From 37ca3212eee6d70a54493168014f9254cc6e8f37 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 29 Apr 2015 13:20:01 -0400 Subject: [PATCH 001/670] Fix MSVC compatibility Make sure to include random unittests in android builds, too Use SWAP() macro Ensure that negative ranges are tested as well in random unittests --- build/android/jni/Android.mk | 1 + src/mg_decoration.cpp | 3 +-- src/noise.cpp | 2 +- src/unittest/test_random.cpp | 28 +++++++++++----------------- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 000a0bfe5..c00d054b2 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -221,6 +221,7 @@ LOCAL_SRC_FILES := \ jni/src/unittest/test_nodedef.cpp \ jni/src/unittest/test_noise.cpp \ jni/src/unittest/test_profiler.cpp \ + jni/src/unittest/test_random.cpp \ jni/src/unittest/test_serialization.cpp \ jni/src/unittest/test_settings.cpp \ jni/src/unittest/test_socket.cpp \ diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index 84f60b029..460db1ede 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -310,8 +310,7 @@ int DecoSimple::getHeight() /////////////////////////////////////////////////////////////////////////////// -DecoSchematic::DecoSchematic() : - Decoration::Decoration() +DecoSchematic::DecoSchematic() { schematic = NULL; } diff --git a/src/noise.cpp b/src/noise.cpp index 614234aa4..7a23819c8 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -148,7 +148,7 @@ s32 PcgRandom::randNormalDist(s32 min, s32 max, int num_trials) s32 accum = 0; for (int i = 0; i != num_trials; i++) accum += range(min, max); - return round((float)accum / num_trials); + return myround((float)accum / num_trials); } /////////////////////////////////////////////////////////////////////////////// diff --git a/src/unittest/test_random.cpp b/src/unittest/test_random.cpp index 4f50bf9b8..81cf9ae28 100644 --- a/src/unittest/test_random.cpp +++ b/src/unittest/test_random.cpp @@ -74,13 +74,10 @@ void TestRandom::testPseudoRandomRange() EXCEPTION_CHECK(PrngException, pr.range(5, 1)); for (u32 i = 0; i != 32768; i++) { - int min = pr.next() % 3000; - int max = pr.next() % 3000; - if (min > max) { - int temp = min; - min = max; - max = temp; - } + int min = (pr.next() % 3000) - 500; + int max = (pr.next() % 3000) - 500; + if (min > max) + SWAP(int, min, max); int randval = pr.range(min, max); UASSERT(randval >= min); @@ -105,13 +102,10 @@ void TestRandom::testPcgRandomRange() EXCEPTION_CHECK(PrngException, pr.range(5, 1)); for (u32 i = 0; i != 32768; i++) { - int min = pr.next() % 3000; - int max = pr.next() % 3000; - if (min > max) { - int temp = min; - min = max; - max = temp; - } + int min = (pr.next() % 3000) - 500; + int max = (pr.next() % 3000) - 500; + if (min > max) + SWAP(int, min, max); int randval = pr.range(min, max); UASSERT(randval >= min); @@ -146,7 +140,7 @@ void TestRandom::testPcgRandomNormalDist() s32 bins[max - min + 1]; memset(bins, 0, sizeof(bins)); - PcgRandom r(486456179 + (int)time(NULL)); + PcgRandom r(486179 + (int)time(NULL)); for (u32 i = 0; i != num_samples; i++) { s32 randval = r.randNormalDist(min, max, num_trials); @@ -173,8 +167,8 @@ void TestRandom::testPcgRandomNormalDist() //// Simple normality test using the 68-95-99.7% rule for (u32 i = 0; i != ARRLEN(prediction_intervals); i++) { float deviations = i / 2.f + 1.f; - int lbound = round(mean - deviations * stddev); - int ubound = round(mean + deviations * stddev); + int lbound = myround(mean - deviations * stddev); + int ubound = myround(mean + deviations * stddev); UASSERT(lbound >= min); UASSERT(ubound <= max); From 6626a3f72f66703a161abccab90cffcec31c3932 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 29 Apr 2015 19:28:25 +0200 Subject: [PATCH 002/670] Fix several MSVC issues numeric.h -> Round negative numbers correctly CMakeLists.txt -> Link Json with the static run-time library --- src/json/CMakeLists.txt | 5 ++++- src/unittest/test_utilities.cpp | 11 +++++++++++ src/util/numeric.h | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt index 206c6ea9c..de99c7f0c 100644 --- a/src/json/CMakeLists.txt +++ b/src/json/CMakeLists.txt @@ -1,4 +1,7 @@ -add_library(jsoncpp jsoncpp.cpp) +if(MSVC) + set(CMAKE_CXX_FLAGS_RELEASE "/MT") +endif() +add_library(jsoncpp jsoncpp.cpp) target_link_libraries(jsoncpp) diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index caf4515c8..07108706a 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -45,6 +45,7 @@ public: void testWrapRows(); void testIsNumber(); void testIsPowerOfTwo(); + void testMyround(); }; static TestUtilities g_test_instance; @@ -67,6 +68,7 @@ void TestUtilities::runTests(IGameDef *gamedef) TEST(testWrapRows); TEST(testIsNumber); TEST(testIsPowerOfTwo); + TEST(testMyround); } //////////////////////////////////////////////////////////////////////////////// @@ -239,3 +241,12 @@ void TestUtilities::testIsPowerOfTwo() } UASSERT(is_power_of_two((u32)-1) == false); } + +void TestUtilities::testMyround() +{ + UASSERT(myround(4.6f) == 5); + UASSERT(myround(1.2f) == 1); + UASSERT(myround(-3.1f) == -3); + UASSERT(myround(-6.5f) == -7); +} + diff --git a/src/util/numeric.h b/src/util/numeric.h index b4b841918..0eba01359 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -288,7 +288,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, */ inline s32 myround(f32 f) { - return floor(f + 0.5); + return (s32)(f < 0.f ? (f - 0.5f) : (f + 0.5f)); } /* From aef1b41b021a41a85ddd83d9ba33cfe9abc0b19d Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 1 May 2015 07:42:08 +0200 Subject: [PATCH 003/670] Add .patch files to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6f252e9fd..0eac84351 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ tags *.orig *.rej +## Files related to minetest development cycle +/*.patch + ## Non-static Minetest directories /bin/ /games/* From 9e1e4b62844f736449ce53be7a87a769bf35d834 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 3 May 2015 02:44:58 +0100 Subject: [PATCH 004/670] RotateAlongYAxis: For facedir case, return if param2 >= 4 --- src/mapnode.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mapnode.cpp b/src/mapnode.cpp index 4afa91983..fe9686f0d 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -163,6 +163,9 @@ void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) { ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2; if (cpt2 == CPT2_FACEDIR) { + if (param2 >= 4) + return; + u8 newrot = param2 & 3; param2 &= ~3; param2 |= (newrot + rot) & 3; From 5704fb36d208e250490e6fb56268e75e0b9b3290 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 1 May 2015 11:48:59 +0200 Subject: [PATCH 005/670] Better version detection for shallow clones --- cmake/Modules/GenerateVersion.cmake | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/GenerateVersion.cmake b/cmake/Modules/GenerateVersion.cmake index 76a0a90c6..9b5304ad5 100644 --- a/cmake/Modules/GenerateVersion.cmake +++ b/cmake/Modules/GenerateVersion.cmake @@ -3,7 +3,7 @@ if(VERSION_EXTRA) set(VERSION_GITHASH "${VERSION_STRING}") else() - execute_process(COMMAND git describe --always --tag --dirty + execute_process(COMMAND git describe --tag --dirty WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) @@ -11,7 +11,16 @@ else() if(VERSION_GITHASH) message(STATUS "*** Detected Git version ${VERSION_GITHASH} ***") else() - set(VERSION_GITHASH "${VERSION_STRING}") + execute_process(COMMAND git describe --always --tag --dirty + WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" + OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + if(VERSION_GITHASH) + set(VERSION_GITHASH "${VERSION_STRING}-${VERSION_GITHASH}") + message(STATUS "*** Detected shallow Git version ${VERSION_GITHASH} ***") + else() + set(VERSION_GITHASH "${VERSION_STRING}") + endif() endif() endif() From 5b237b4d94cc3fa4a95f951654dfbe37dcf2e2f9 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 3 May 2015 22:05:24 -0400 Subject: [PATCH 006/670] ObjDefManager: Set replacement object's handle info after calling set() Make gamedef optional when constructing an ObjDefManager Add note about object ownership --- src/mapgen.cpp | 13 +++++++++++-- src/mapgen.h | 5 ++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/mapgen.cpp b/src/mapgen.cpp index d8eb8068a..1de7fca81 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -434,7 +434,7 @@ void GenerateNotifier::getEvents( ObjDefManager::ObjDefManager(IGameDef *gamedef, ObjDefType type) { m_objtype = type; - m_ndef = gamedef->getNodeDefManager(); + m_ndef = gamedef ? gamedef->getNodeDefManager() : NULL; } @@ -471,7 +471,16 @@ ObjDef *ObjDefManager::get(ObjDefHandle handle) const ObjDef *ObjDefManager::set(ObjDefHandle handle, ObjDef *obj) { u32 index = validateHandle(handle); - return (index != OBJDEF_INVALID_INDEX) ? setRaw(index, obj) : NULL; + if (index == OBJDEF_INVALID_INDEX) + return NULL; + + ObjDef *oldobj = setRaw(index, obj); + + obj->uid = oldobj->uid; + obj->index = oldobj->index; + obj->handle = oldobj->handle; + + return oldobj; } diff --git a/src/mapgen.h b/src/mapgen.h index ee7e8227e..5be004e9f 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -206,12 +206,15 @@ public: std::string name; }; +// 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 class ObjDefManager { public: ObjDefManager(IGameDef *gamedef, ObjDefType type); virtual ~ObjDefManager(); - virtual const char *getObjectTitle() const = 0; + virtual const char *getObjectTitle() const { return "ObjDef"; } virtual void clear(); virtual ObjDef *getByName(const std::string &name) const; From 8f38f8255cce29bccdc4adf16b2244650029e758 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 3 May 2015 22:19:15 -0400 Subject: [PATCH 007/670] Tests: Add ObjDef unittests --- build/android/jni/Android.mk | 1 + src/unittest/CMakeLists.txt | 1 + src/unittest/test_objdef.cpp | 107 +++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 src/unittest/test_objdef.cpp diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index c00d054b2..e58cb82c8 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -220,6 +220,7 @@ LOCAL_SRC_FILES := \ jni/src/unittest/test_mapnode.cpp \ jni/src/unittest/test_nodedef.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_serialization.cpp \ diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index 932eb860e..ccb046bb9 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -8,6 +8,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_noise.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_objdef.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_profiler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_random.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_serialization.cpp diff --git a/src/unittest/test_objdef.cpp b/src/unittest/test_objdef.cpp new file mode 100644 index 000000000..ddb3bc60d --- /dev/null +++ b/src/unittest/test_objdef.cpp @@ -0,0 +1,107 @@ +/* +Minetest +Copyright (C) 2010-2014 kwolekr, Ryan Kwolek + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" + +#include "exceptions.h" +#include "mapgen.h" + + +class TestObjDef : public TestBase { +public: + TestObjDef() { TestManager::registerTestModule(this); } + const char *getName() { return "TestObjDef"; } + + void runTests(IGameDef *gamedef); + + void testHandles(); + void testAddGetSetClear(); +}; + +static TestObjDef g_test_instance; + +void TestObjDef::runTests(IGameDef *gamedef) +{ + TEST(testHandles); + TEST(testAddGetSetClear); +} + +//////////////////////////////////////////////////////////////////////////////// + +void TestObjDef::testHandles() +{ + u32 uid = 0; + u32 index = 0; + ObjDefType type = OBJDEF_GENERIC; + + ObjDefHandle handle = ObjDefManager::createHandle(9530, OBJDEF_ORE, 47); + + UASSERTEQ(ObjDefHandle, 0xAF507B55, handle); + + UASSERT(ObjDefManager::decodeHandle(handle, &index, &type, &uid)); + + UASSERTEQ(u32, 9530, index); + UASSERTEQ(u32, 47, uid); + UASSERTEQ(ObjDefHandle, OBJDEF_ORE, type); +} + + +void TestObjDef::testAddGetSetClear() +{ + ObjDefManager testmgr(NULL, OBJDEF_GENERIC); + ObjDefHandle hObj0, hObj1, hObj2, hObj3; + ObjDef *obj0, *obj1, *obj2, *obj3; + + UASSERTEQ(ObjDefType, testmgr.getType(), OBJDEF_GENERIC); + + obj0 = new ObjDef; + obj0->name = "foobar"; + hObj0 = testmgr.add(obj0); + UASSERT(hObj0 != OBJDEF_INVALID_HANDLE); + UASSERTEQ(u32, obj0->index, 0); + + obj1 = new ObjDef; + obj1->name = "FooBaz"; + hObj1 = testmgr.add(obj1); + UASSERT(hObj1 != OBJDEF_INVALID_HANDLE); + UASSERTEQ(u32, obj1->index, 1); + + obj2 = new ObjDef; + obj2->name = "asdf"; + hObj2 = testmgr.add(obj2); + UASSERT(hObj2 != OBJDEF_INVALID_HANDLE); + UASSERTEQ(u32, obj2->index, 2); + + obj3 = new ObjDef; + obj3->name = "foobaz"; + hObj3 = testmgr.add(obj3); + UASSERT(hObj3 == OBJDEF_INVALID_HANDLE); + + UASSERTEQ(size_t, testmgr.getNumObjects(), 3); + + UASSERT(testmgr.get(hObj0) == obj0); + UASSERT(testmgr.getByName("FOOBAZ") == obj1); + + UASSERT(testmgr.set(hObj0, obj3) == obj0); + UASSERT(testmgr.get(hObj0) == obj3); + delete obj0; + + testmgr.clear(); + UASSERTEQ(size_t, testmgr.getNumObjects(), 0); +} From 9af7f38e3f077ec42fcc3086c82d2676c53c84a6 Mon Sep 17 00:00:00 2001 From: obneq Date: Sat, 25 Apr 2015 15:16:44 +0200 Subject: [PATCH 008/670] Fix pathfinder to produce more useful paths - Fix unintended negation of condition - Remove line_of_sight 'optimization' --- src/pathfinder.cpp | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp index d39bdab3a..8eb52bfd1 100644 --- a/src/pathfinder.cpp +++ b/src/pathfinder.cpp @@ -310,27 +310,16 @@ std::vector pathfinder::get_Path(ServerEnvironment* env, print_path(path); #endif - //optimize path - std::vector optimized_path; - - std::vector::iterator startpos = path.begin(); - optimized_path.push_back(source); - + //finalize path + std::vector full_path; for (std::vector::iterator i = path.begin(); i != path.end(); i++) { - if (!m_env->line_of_sight( - tov3f(getIndexElement(*startpos).pos), - tov3f(getIndexElement(*i).pos))) { - optimized_path.push_back(getIndexElement(*(i-1)).pos); - startpos = (i-1); - } + full_path.push_back(getIndexElement(*i).pos); } - optimized_path.push_back(destination); - #ifdef PATHFINDER_DEBUG - std::cout << "Optimized path:" << std::endl; - print_path(optimized_path); + std::cout << "full path:" << std::endl; + print_path(full_path); #endif #ifdef PATHFINDER_CALC_TIME timespec ts2; @@ -344,7 +333,7 @@ std::vector pathfinder::get_Path(ServerEnvironment* env, std::cout << "Calculating path took: " << (ts2.tv_sec - ts.tv_sec) << "s " << ms << "ms " << us << "us " << ns << "ns " << std::endl; #endif - return optimized_path; + return full_path; } else { #ifdef PATHFINDER_DEBUG @@ -532,7 +521,7 @@ path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) { if ((testpos.Y >= m_limits.Y.min) && (node_at_pos.param0 != CONTENT_IGNORE) && (node_at_pos.param0 != CONTENT_AIR)) { - if (((pos2.Y - testpos.Y)*-1) <= m_maxdrop) { + if ((pos2.Y - testpos.Y - 1) <= m_maxdrop) { retval.valid = true; retval.value = 2; //difference of y-pos +1 (target node is ABOVE solid node) From 5fa4fed09731fa869cfcee5c15e53d9fbdedc28b Mon Sep 17 00:00:00 2001 From: Kevin Ott Date: Sun, 3 May 2015 22:32:29 -0400 Subject: [PATCH 009/670] Add a check for animation when getting an extruded mesh Fixes issue #2667 --- src/wieldmesh.cpp | 14 ++++++++++---- src/wieldmesh.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index b1d82b706..63c09786b 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -259,14 +259,20 @@ void WieldMeshSceneNode::setCube(const TileSpec tiles[6], } void WieldMeshSceneNode::setExtruded(const std::string &imagename, - v3f wield_scale, ITextureSource *tsrc) + v3f wield_scale, ITextureSource *tsrc, u8 num_frames) { video::ITexture *texture = tsrc->getTexture(imagename); if (!texture) { changeToMesh(NULL); return; } + core::dimension2d dim = texture->getSize(); + // Detect animation texture and pull off top frame instead of using entire thing + if (num_frames > 1) { + u32 frame_height = dim.Height / num_frames; + dim = core::dimension2d(dim.Width, frame_height); + } scene::IMesh *mesh = g_extrusion_mesh_cache->create(dim); changeToMesh(mesh); mesh->drop(); @@ -319,7 +325,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) // If wield_image is defined, it overrides everything else if (def.wield_image != "") { - setExtruded(def.wield_image, def.wield_scale, tsrc); + setExtruded(def.wield_image, def.wield_scale, tsrc, 1); return; } // Handle nodes @@ -335,7 +341,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) } else if (f.drawtype == NDT_AIRLIKE) { changeToMesh(NULL); } else if (f.drawtype == NDT_PLANTLIKE) { - setExtruded(tsrc->getTextureName(f.tiles[0].texture_id), def.wield_scale, tsrc); + setExtruded(tsrc->getTextureName(f.tiles[0].texture_id), def.wield_scale, tsrc, f.tiles[0].animation_frame_count); } else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) { setCube(f.tiles, def.wield_scale, tsrc); } else { @@ -385,7 +391,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) return; } else if (def.inventory_image != "") { - setExtruded(def.inventory_image, def.wield_scale, tsrc); + setExtruded(def.inventory_image, def.wield_scale, tsrc, 1); return; } diff --git a/src/wieldmesh.h b/src/wieldmesh.h index b7739f18c..933b53763 100644 --- a/src/wieldmesh.h +++ b/src/wieldmesh.h @@ -41,7 +41,7 @@ public: void setCube(const TileSpec tiles[6], v3f wield_scale, ITextureSource *tsrc); void setExtruded(const std::string &imagename, - v3f wield_scale, ITextureSource *tsrc); + v3f wield_scale, ITextureSource *tsrc, u8 num_frames); void setItem(const ItemStack &item, IGameDef *gamedef); // Sets the vertex color of the wield mesh. From 9345ba7b6a6cd19e0af0f51be1154ae571332f04 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 4 May 2015 18:53:58 +0100 Subject: [PATCH 010/670] Clouds: Make cloud area radius settable in .conf --- minetest.conf.example | 3 +++ src/clouds.cpp | 45 +++++++++++++++++++++-------------------- src/clouds.h | 1 + src/defaultsettings.cpp | 1 + 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 8967eff23..2475235a2 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -142,6 +142,9 @@ # Enable/disable clouds #enable_clouds = true #cloud_height = 120 +# Radius of cloud area stated in number of 64 node cloud squares. +# Values > 22 will start to produce clipping of the cloud area corners. +#cloud_radius = 12 #enable_3d_clouds = true # Use a cloud animation for the main menu background #menu_clouds = true diff --git a/src/clouds.cpp b/src/clouds.cpp index 3409aac73..ff3f603d9 100644 --- a/src/clouds.cpp +++ b/src/clouds.cpp @@ -55,6 +55,8 @@ Clouds::Clouds( m_cloud_y = BS * (cloudheight ? cloudheight : g_settings->getS16("cloud_height")); + m_cloud_radius_i = g_settings->getU16("cloud_radius"); + m_box = core::aabbox3d(-BS*1000000,m_cloud_y-BS,-BS*1000000, BS*1000000,m_cloud_y+BS,BS*1000000); @@ -96,14 +98,13 @@ void Clouds::render() driver->setMaterial(m_material); /* - Clouds move from X+ towards X- + Clouds move from Z+ towards Z- */ - const s16 cloud_radius_i = 12; const float cloud_size = BS * 64; const v2f cloud_speed(0, -BS * 2); - const float cloud_full_radius = cloud_size * cloud_radius_i; + const float cloud_full_radius = cloud_size * m_cloud_radius_i; // Position of cloud noise origin in world coordinates v2f world_cloud_origin_pos_f = m_time * cloud_speed; @@ -165,14 +166,14 @@ void Clouds::render() // Read noise - bool *grid = new bool[cloud_radius_i * 2 * cloud_radius_i * 2]; + bool *grid = new bool[m_cloud_radius_i * 2 * m_cloud_radius_i * 2]; float cloud_size_noise = cloud_size / BS / 200; - for(s16 zi = -cloud_radius_i; zi < cloud_radius_i; zi++) { - u32 si = (zi + cloud_radius_i) * cloud_radius_i * 2 + cloud_radius_i; + for(s16 zi = -m_cloud_radius_i; zi < m_cloud_radius_i; zi++) { + u32 si = (zi + m_cloud_radius_i) * m_cloud_radius_i * 2 + m_cloud_radius_i; - for(s16 xi = -cloud_radius_i; xi < cloud_radius_i; xi++) { + for (s16 xi = -m_cloud_radius_i; xi < m_cloud_radius_i; xi++) { u32 i = si + xi; v2s16 p_in_noise_i( @@ -192,23 +193,23 @@ void Clouds::render() #define INAREA(x, z, radius) \ ((x) >= -(radius) && (x) < (radius) && (z) >= -(radius) && (z) < (radius)) - for(s16 zi0=-cloud_radius_i; zi0= 0) - zi = cloud_radius_i - zi - 1; + zi = m_cloud_radius_i - zi - 1; if(xi >= 0) - xi = cloud_radius_i - xi - 1; + xi = m_cloud_radius_i - xi - 1; - u32 i = GETINDEX(xi, zi, cloud_radius_i); + u32 i = GETINDEX(xi, zi, m_cloud_radius_i); if(grid[i] == false) continue; @@ -247,8 +248,8 @@ void Clouds::render() v[3].Pos.set( rx, ry,-rz); break; case 1: // back - if(INAREA(xi, zi-1, cloud_radius_i)){ - u32 j = GETINDEX(xi, zi-1, cloud_radius_i); + if (INAREA(xi, zi - 1, m_cloud_radius_i)) { + u32 j = GETINDEX(xi, zi - 1, m_cloud_radius_i); if(grid[j]) continue; } @@ -262,8 +263,8 @@ void Clouds::render() v[3].Pos.set(-rx,-ry,-rz); break; case 2: //right - if(INAREA(xi+1, zi, cloud_radius_i)){ - u32 j = GETINDEX(xi+1, zi, cloud_radius_i); + if (INAREA(xi + 1, zi, m_cloud_radius_i)) { + u32 j = GETINDEX(xi+1, zi, m_cloud_radius_i); if(grid[j]) continue; } @@ -277,8 +278,8 @@ void Clouds::render() v[3].Pos.set( rx,-ry,-rz); break; case 3: // front - if(INAREA(xi, zi+1, cloud_radius_i)){ - u32 j = GETINDEX(xi, zi+1, cloud_radius_i); + if (INAREA(xi, zi + 1, m_cloud_radius_i)) { + u32 j = GETINDEX(xi, zi + 1, m_cloud_radius_i); if(grid[j]) continue; } @@ -292,8 +293,8 @@ void Clouds::render() v[3].Pos.set( rx,-ry, rz); break; case 4: // left - if(INAREA(xi-1, zi, cloud_radius_i)){ - u32 j = GETINDEX(xi-1, zi, cloud_radius_i); + if (INAREA(xi-1, zi, m_cloud_radius_i)) { + u32 j = GETINDEX(xi-1, zi, m_cloud_radius_i); if(grid[j]) continue; } diff --git a/src/clouds.h b/src/clouds.h index add8a7247..70f12239e 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -87,6 +87,7 @@ private: video::SMaterial m_material; core::aabbox3d m_box; float m_cloud_y; + u16 m_cloud_radius_i; video::SColorf m_color; u32 m_seed; v2f m_camera_pos; diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index e629377ee..45188f791 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -127,6 +127,7 @@ void set_default_settings(Settings *settings) settings->setDefault("fall_bobbing_amount", "0.0"); settings->setDefault("enable_3d_clouds", "true"); settings->setDefault("cloud_height", "120"); + settings->setDefault("cloud_radius", "12"); settings->setDefault("menu_clouds", "true"); settings->setDefault("opaque_water", "false"); settings->setDefault("console_color", "(0,0,0)"); From 4b0f5fcbf5a52b234f0571ad521707998be320f7 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 4 May 2015 22:50:04 +0200 Subject: [PATCH 011/670] Cache enable_3d_clouds flag Small improvement on clouds rendering performance --- src/clouds.cpp | 7 ++++--- src/clouds.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/clouds.cpp b/src/clouds.cpp index ff3f603d9..a42e588aa 100644 --- a/src/clouds.cpp +++ b/src/clouds.cpp @@ -57,6 +57,8 @@ Clouds::Clouds( m_cloud_radius_i = g_settings->getU16("cloud_radius"); + m_enable_3d = g_settings->getBool("enable_3d_clouds"); + m_box = core::aabbox3d(-BS*1000000,m_cloud_y-BS,-BS*1000000, BS*1000000,m_cloud_y+BS,BS*1000000); @@ -89,10 +91,9 @@ void Clouds::render() ScopeProfiler sp(g_profiler, "Rendering of clouds, avg", SPT_AVG); - bool enable_3d = g_settings->getBool("enable_3d_clouds"); - int num_faces_to_draw = enable_3d ? 6 : 1; + int num_faces_to_draw = m_enable_3d ? 6 : 1; - m_material.setFlag(video::EMF_BACK_FACE_CULLING, enable_3d); + m_material.setFlag(video::EMF_BACK_FACE_CULLING, m_enable_3d); driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); driver->setMaterial(m_material); diff --git a/src/clouds.h b/src/clouds.h index 70f12239e..348220fb1 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -88,6 +88,7 @@ private: core::aabbox3d m_box; float m_cloud_y; u16 m_cloud_radius_i; + bool m_enable_3d; video::SColorf m_color; u32 m_seed; v2f m_camera_pos; From 3ee854cf25c846e535857281fea0e5d1541cb212 Mon Sep 17 00:00:00 2001 From: Mahmut Elmas Date: Mon, 23 Mar 2015 00:20:05 +0200 Subject: [PATCH 012/670] Update Turkish Language Added some new translations Fixed some overlenght lines --- po/tr/minetest.po | 291 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 233 insertions(+), 58 deletions(-) diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 385ae5bcd..8252bc6b4 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -1,9 +1,14 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR mahmutelmas06@gmail.com, 2015. +#, approved msgid "" msgstr "" -"Project-Id-Version: 0.0.1\n" +"Project-Id-Version: 0.1.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-24 14:45+0200\n" -"PO-Revision-Date: 2015-02-24 15:11+0200\n" +"POT-Creation-Date: 2015-03-04 14:450200\n" +"PO-Revision-Date: 2015-03-22 23:56+0200\n" "Last-Translator: Mahmut Elmas mahmutelmas06@gmail.com\n" "Language-Team: Türkçe <>\n" "Language: tr\n" @@ -31,13 +36,13 @@ msgstr "Dünya:" #, approved #| msgid "Hide Game" msgid "Hide Game" -msgstr "Kök Eklentiler" +msgstr "Oyunu Gizle" #: builtin/mainmenu/dlg_config_world.lua:36 #: builtin/mainmenu/dlg_config_world.lua:38 #, approved msgid "Hide mp content" -msgstr "Paket detaylarını gizle" +msgstr "Detayları gizle" #: builtin/mainmenu/dlg_config_world.lua:46 #, approved @@ -68,13 +73,13 @@ msgstr "Vazgeç" #: builtin/mainmenu/dlg_config_world.lua:68 #, approved msgid "Enable MP" -msgstr "Eklenti paketini etkinleştir" +msgstr "Paketi Aç" #: builtin/mainmenu/dlg_config_world.lua:70 #, approved #| msgid "Disable MP" msgid "Disable MP" -msgstr "Eklenti paketini devre dışı bırak" +msgstr "Paketi Kapat" #: builtin/mainmenu/dlg_config_world.lua:74 #: builtin/mainmenu/dlg_config_world.lua:76 @@ -204,7 +209,7 @@ msgstr "Kabul et" #: builtin/mainmenu/modmgr.lua:342 #, approved msgid "Install Mod: file: \"$1\"" -msgstr "Eklenti yükle: file: \"$1\"" +msgstr "Eklenti yükle: Dosya: \"$1\"" #: builtin/mainmenu/modmgr.lua:343 #, approved @@ -256,6 +261,10 @@ msgstr "İndiriliyor" msgid "please wait..." msgstr "lütfen bekleyin..." +#, approved +msgid "Downloading $1, please wait..." +msgstr " $1, indiriliyor, lütfen bekleyin" + #: builtin/mainmenu/store.lua:159 #, approved msgid "Successfully installed:" @@ -299,7 +308,7 @@ msgstr "$2 sayfadan $1 'cisi" #: builtin/mainmenu/tab_credits.lua:22 #, approved msgid "Credits" -msgstr "Emeği Geçenler" +msgstr "Hakkında" #: builtin/mainmenu/tab_credits.lua:29 #, approved @@ -362,10 +371,6 @@ msgid "Mods" msgstr "Eklentiler" #: builtin/mainmenu/tab_multiplayer.lua:23 -#, approved -msgid "Address/Port" -msgstr "Adres / Port" - #: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 #: builtin/mainmenu/tab_simple_main.lua:25 #, approved @@ -378,6 +383,14 @@ msgstr "Kullanıcı adı/Şifre" msgid "Public Serverlist" msgstr "Çevirimiçi Oyun Listesi" +#, approved +msgid "Address / Port :" +msgstr "Adres / Port :" + +#, approved +msgid "Name / Password :" +msgstr "Kullanıcı Adı / Şifre :" + #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 #: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 #, approved @@ -391,6 +404,18 @@ msgid "Connect" msgstr "Bağlan" #: builtin/mainmenu/tab_multiplayer.lua:252 +#, approved +msgid "Creative mode" +msgstr "Yaratıcı mod" + +#, approved +msgid "Damage enabled" +msgstr "Hasar alma etkin" + +#, approved +msgid "PvP enabled" +msgstr "Mücadele modu" + #, approved msgid "Client" msgstr "Çevirimiçi Oyna" @@ -461,6 +486,30 @@ msgstr "" "Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz " "?" +#, approved +msgid "No Filter" +msgstr "Süzme yok" + +#, approved +msgid "Bilinear Filter" +msgstr "İki yönlü süzme" + +#, approved +msgid "Trilinear Filter" +msgstr "Üç yönlü süzme" + +#, approved +msgid "No Mipmap" +msgstr "Mipmap kapalı" + +#, approved +msgid "Mipmap" +msgstr "Mipmap" + +#, approved +msgid "Mipmap Aniso. Filter" +msgstr "Mipmap Aniso. Süzgeci" + #: builtin/mainmenu/tab_settings.lua:27 #, approved msgid "No!!!" @@ -518,6 +567,18 @@ msgstr "Eşyönsüz süzme" msgid "Bi-Linear Filtering" msgstr "Çift yönlü süzme" +#, approved +msgid "Node Highlighting" +msgstr "Nesne seçme göstergesi" + +#, approved +msgid "Texturing:" +msgstr "Doku:" + +#, approved +msgid "Rendering:" +msgstr "Kaplama:" + #: builtin/mainmenu/tab_settings.lua:157 #, approved msgid "Tri-Linear Filtering" @@ -642,24 +703,178 @@ msgstr "Bilgi yok" #: builtin/mainmenu/tab_texturepacks.lua:114 #, approved msgid "Texturepacks" -msgstr "Doku paketleri" +msgstr "Doku paketi" #: src/client.cpp:2726 +#, approved +msgid "Loading textures..." +msgstr "Dokular yükleniyor..." + +#, approved +msgid "Rebuilding shaders..." +msgstr "Shader inşa ediliyor..." + +#, approved +msgid "Initializing nodes..." +msgstr "Nesneler yükleniyor..." + #, approved msgid "Item textures..." msgstr "Nesne dokuları ..." #: src/fontengine.cpp:70 src/fontengine.cpp:226 +#, approved +msgid "Done!" +msgstr "Tamam!" + +#, approved +msgid "Main Menu" +msgstr "Ana menu" + +#, approved +msgid "Player name too long." +msgstr "Kullanıcı adı çok uzun." + +#, approved +msgid "Connection error (timed out?)" +msgstr "Bağlantı hatası ( Zaman aşımı ? )" + +#, approved +msgid "No world selected and no address provided. Nothing to do." +msgstr "Dünya veya adres seçilmedi." + +#, approved +msgid "Provided world path doesn't exist: " +msgstr "Belirtilen dünya konumu yok:" + +#, approved +msgid "Could not find or load game \"" +msgstr "Oyun yüklenemiyor \"" + +#, approved +msgid "Invalid gamespec." +msgstr "Geçersiz oyun özellikleri." + #, approved msgid "needs_fallback_font" msgstr "needs_fallback_font" #: src/game.cpp:1063 +#, approved +msgid "Proceed" +msgstr "Uygula" + +#, approved +msgid "You died." +msgstr "Geberdin." + #, approved msgid "Respawn" msgstr "Yeniden Canlan" #: src/game.cpp:2250 +#, approved +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 "" +"Varsayılan Kontroller:\n" +"Tüm menüler gizli:\n" +"- Tek tık: tuş etkin\n" +"- Çift tık: yerleştir/kullan\n" +"- Parmağı kaydır: etrafa bak\n" +"Menu/Encanter görünür:\n" +"- çift tık (dışarda):\n" +" -->kapat\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- tut&bırak, iki parmağı kullan\n" +" --> slotuna bir item bırak\n" + +#, approved +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Varsayılanlar Kontroller:\n" +"- WASD: Hareket et\n" +"- Boşluk: Zıpla/Tırman\n" +"- Shift: Sessiz yürü/Aşağı in\n" +"- Q: Elindekini bırak\n" +"- I: Envanter\n" +"- Fare: Dön/Bak\n" +"- Sol fare: Kaz/Vur\n" +"- Sağ fare: Yerleştir/Kullan\n" +"- Fare tekerleği: Araç seç\n" +"- T: Sohbet\n" + +#, approved +msgid "Continue" +msgstr "Devam et" + +#, approved +msgid "Change Password" +msgstr "Şifre değiştir" + +#, approved +msgid "Sound Volume" +msgstr "Ses yüksekliği :" + +#, approved +msgid "Change Keys" +msgstr "Tuşları değiştir" + +#, approved +msgid "Exit to Menu" +msgstr "Menüye dön" + +#, approved +msgid "Exit to OS" +msgstr "Oyundan Çık" + +#, approved +msgid "Shutting down..." +msgstr "Kapatılıyor..." + +#, approved +msgid "Loading..." +msgstr "Yükleniyor..." + +#, approved +msgid "Creating server..." +msgstr "Sunucu oluşturuluyor..." + +#, approved +msgid "Creating client..." +msgstr "İstemci oluşturuluyor..." + +#, approved +msgid "Resolving address..." +msgstr "Adres çözümleniyor..." + +#, approved +msgid "Connecting to server..." +msgstr "Sunucuya bağlanılıyor..." + #, approved msgid "Item definitions..." msgstr "Nesne tanımlamaları..." @@ -694,10 +909,6 @@ msgstr "" "Hata ayrıntıları için debug.txt dosyasını inceleyin." #: src/guiFormSpecMenu.cpp:2055 -#, approved -msgid "Proceed" -msgstr "Uygula" - #: src/guiFormSpecMenu.cpp:2846 #, approved msgid "Enter " @@ -713,7 +924,7 @@ msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin #: src/guiKeyChangeMenu.cpp:165 #, approved msgid "\"Use\" = climb down" -msgstr "\"Kullan\" = Aşağı in" +msgstr "\"Kullan Tuşu\" = Aşağı in" #: src/guiKeyChangeMenu.cpp:180 #, approved @@ -1090,13 +1301,14 @@ msgstr "Numpad 7" msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 -#, approved msgid "Numpad +" msgstr "Numpad +" #: src/keycode.cpp:236 #, approved +msgid "Numpad " +msgstr "Numpad " + msgid "Numpad -" msgstr "Numpad -" @@ -1209,40 +1421,3 @@ msgstr "PA1" #, approved msgid "Zoom" msgstr "Yakınlaştır" - -#: src/main.cpp:1681 -#, approved -msgid "Main Menu" -msgstr "Ana menu" - -#: src/main.cpp:1719 -#, approved -msgid "Player name too long." -msgstr "Kullanıcı adı çok uzun." - -#: src/main.cpp:1757 -#, approved -msgid "Connection error (timed out?)" -msgstr "Bağlantı hatası ( Zaman aşımı ? )" - -#: src/main.cpp:1919 -#, approved -msgid "" -"No world selected and no address provided. Nothing to " -"do." -msgstr "Dünya veya adres seçilmedi." - -#: src/main.cpp:1926 -#, approved -msgid "Provided world path doesn't exist: " -msgstr "Belirtilen dünya konumu yok:" - -#: src/main.cpp:1935 -#, approved -msgid "Could not find or load game \"" -msgstr "Oyun bulunamıyor veya yüklenemiyor \"" - -#: src/main.cpp:1953 -#, approved -msgid "Invalid gamespec." -msgstr "Geçersiz oyun özellikleri." From 2923eafaca929e129ba81504676d3770cff5f681 Mon Sep 17 00:00:00 2001 From: Jay Arndt Date: Mon, 4 May 2015 04:53:41 -0500 Subject: [PATCH 013/670] Stop NetworkPacket methods from producing bloated packets --- src/network/networkpacket.cpp | 24 ++++++------------------ src/network/networkpacket.h | 2 +- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index a4a481db4..1e4b6e23e 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -72,8 +72,8 @@ char* NetworkPacket::getString(u32 from_offset) void NetworkPacket::putRawString(const char* src, u32 len) { - if (m_read_offset + len * sizeof(char) >= m_datasize) { - m_datasize += len * sizeof(char); + if (m_read_offset + len > m_datasize) { + m_datasize = m_read_offset + len; m_data.resize(m_datasize); } @@ -95,7 +95,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) dst.reserve(strLen); dst.append((char*)&m_data[m_read_offset], strLen); - m_read_offset += strLen * sizeof(char); + m_read_offset += strLen; return *this; } @@ -108,13 +108,7 @@ NetworkPacket& NetworkPacket::operator<<(std::string src) *this << msgsize; - if (m_read_offset + msgsize * sizeof(char) >= m_datasize) { - m_datasize += msgsize * sizeof(char); - m_data.resize(m_datasize); - } - - memcpy(&m_data[m_read_offset], src.c_str(), msgsize); - m_read_offset += msgsize; + putRawString(src.c_str(), (u32)msgsize); return *this; } @@ -128,13 +122,7 @@ void NetworkPacket::putLongString(std::string src) *this << msgsize; - if (m_read_offset + msgsize * sizeof(char) >= m_datasize) { - m_datasize += msgsize * sizeof(char); - m_data.resize(m_datasize); - } - - memcpy(&m_data[m_read_offset], src.c_str(), msgsize); - m_read_offset += msgsize; + putRawString(src.c_str(), msgsize); } NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) @@ -189,7 +177,7 @@ std::string NetworkPacket::readLongString() dst.reserve(strLen); dst.append((char*)&m_data[m_read_offset], strLen); - m_read_offset += strLen*sizeof(char); + m_read_offset += strLen; return dst; } diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 9ad169888..0d2015e7f 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -114,7 +114,7 @@ private: template void checkDataSize() { if (m_read_offset + sizeof(T) > m_datasize) { - m_datasize += sizeof(T); + m_datasize = m_read_offset + sizeof(T); m_data.resize(m_datasize); } } From dfd790930c8c1464ead730999c3ac9677d130360 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Mon, 4 May 2015 19:59:36 -0400 Subject: [PATCH 014/670] Fix GCC compiler warning --- src/unittest/test_random.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unittest/test_random.cpp b/src/unittest/test_random.cpp index 81cf9ae28..20cfca334 100644 --- a/src/unittest/test_random.cpp +++ b/src/unittest/test_random.cpp @@ -173,8 +173,8 @@ void TestRandom::testPcgRandomNormalDist() UASSERT(ubound <= max); int accum = 0; - for (int i = lbound; i != ubound; i++) - accum += bins[i - min]; + for (int j = lbound; j != ubound; j++) + accum += bins[j - min]; float actual = (float)accum / num_samples; UASSERT(fabs(actual - prediction_intervals[i]) < 0.02); From 1be2d32fd502eeb68bd63fb07b0325b25ee357bd Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Mon, 4 May 2015 18:46:49 -0400 Subject: [PATCH 015/670] Make Git version detection use VERSION_STRING instead of tags This fixes the problem where 0.4.12-dev versions were erroneously shown as 0.4.11-dev because the tag was added on a separate branch. It also fixes a similar issue when builders didn't fetch new tags when updating. This also removes the number-of-commits-since-tag field, since it's incompatible with this. Said field doesn't seem to be useful anyway if you have the commit hash. --- CMakeLists.txt | 6 ++++-- cmake/Modules/GenerateVersion.cmake | 26 +++++++++++--------------- src/CMakeLists.txt | 2 +- util/bump_version.sh | 23 ++++++++++++++++++++++- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 639c07077..d1353e16c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,11 +16,13 @@ set(VERSION_MINOR 4) set(VERSION_PATCH 12) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") +# Change to false for releases +set(DEVELOPMENT_BUILD TRUE) + set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA}) -else() - # Comment the following line during release +elseif(DEVELOPMENT_BUILD) set(VERSION_STRING "${VERSION_STRING}-dev") endif() diff --git a/cmake/Modules/GenerateVersion.cmake b/cmake/Modules/GenerateVersion.cmake index 9b5304ad5..ad0e38263 100644 --- a/cmake/Modules/GenerateVersion.cmake +++ b/cmake/Modules/GenerateVersion.cmake @@ -1,28 +1,24 @@ # Always run during 'make' -if(VERSION_EXTRA) - set(VERSION_GITHASH "${VERSION_STRING}") -else() - execute_process(COMMAND git describe --tag --dirty +if(DEVELOPMENT_BUILD) + execute_process(COMMAND git rev-parse --short HEAD WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) - if(VERSION_GITHASH) - message(STATUS "*** Detected Git version ${VERSION_GITHASH} ***") - else() - execute_process(COMMAND git describe --always --tag --dirty + set(VERSION_GITHASH "${VERSION_STRING}-${VERSION_GITHASH}") + execute_process(COMMAND git diff-index --quiet HEAD WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" - OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET) - if(VERSION_GITHASH) - set(VERSION_GITHASH "${VERSION_STRING}-${VERSION_GITHASH}") - message(STATUS "*** Detected shallow Git version ${VERSION_GITHASH} ***") - else() - set(VERSION_GITHASH "${VERSION_STRING}") + RESULT_VARIABLE IS_DIRTY) + if(IS_DIRTY) + set(VERSION_GITHASH "${VERSION_GITHASH}-dirty") endif() + message(STATUS "*** Detected Git version ${VERSION_GITHASH} ***") endif() endif() +if(NOT VERSION_GITHASH) + set(VERSION_GITHASH "${VERSION_STRING}") +endif() configure_file( ${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 66c8170cb..044afa367 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -269,7 +269,7 @@ add_custom_target(GenerateVersion -D "GENERATE_VERSION_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" -D "GENERATE_VERSION_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" -D "VERSION_STRING=${VERSION_STRING}" - -D "VERSION_EXTRA=${VERSION_EXTRA}" + -D "DEVELOPMENT_BUILD=${DEVELOPMENT_BUILD}" -P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/util/bump_version.sh b/util/bump_version.sh index b45c63664..5ff69c8af 100755 --- a/util/bump_version.sh +++ b/util/bump_version.sh @@ -87,7 +87,7 @@ sed -i -re "s/^set\(VERSION_MINOR [0-9]+\)$/set(VERSION_MINOR $NEW_VERSION_MINOR sed -i -re "s/^set\(VERSION_PATCH [0-9]+\)$/set(VERSION_PATCH $NEW_VERSION_PATCH)/" CMakeLists.txt || die "Failed to update VERSION_PATCH" -sed -i -re "s/^\tset\(VERSION_PATCH \\\$.VERSION_PATCH}-dev\)$/\t#set(VERSION_PATCH \${VERSION_PATCH}-dev)/" CMakeLists.txt || die "Failed to disable -dev suffix" +sed -i -re "s/^set\(DEVELOPMENT_BUILD TRUE\)$/set(DEVELOPMENT_BUILD FALSE)/" CMakeLists.txt || die "Failed to unset DEVELOPMENT_BUILD" sed -i -re "s/^ANDROID_VERSION_CODE = [0-9]+$/ANDROID_VERSION_CODE = $NEW_ANDROID_VERSION_CODE/" build/android/Makefile || die "Failed to update ANDROID_VERSION_CODE" @@ -98,3 +98,24 @@ sed -i -re "1s/[0-9]+\.[0-9]+\.[0-9]+/$NEW_VERSION/g" doc/menu_lua_api.txt || di git add -f CMakeLists.txt build/android/Makefile doc/lua_api.txt doc/menu_lua_api.txt || die "git add failed" git commit -m "Bump version to $NEW_VERSION" || die "git commit failed" + +############ +# Create tag +############ + +echo "Tagging $NEW_VERSION" + +git tag -a "$NEW_VERSION" -m "$NEW_VERSION" || die 'Adding tag failed' + +###################### +# Create revert commit +###################### + +echo 'Creating "revert to development" commit' + +sed -i -re 's/^set\(DEVELOPMENT_BUILD FALSE\)$/set(DEVELOPMENT_BUILD TRUE)/' CMakeLists.txt || die 'Failed to set DEVELOPMENT_BUILD' + +git add -f CMakeLists.txt || die 'git add failed' + +git commit -m "Continue with $NEW_VERSION-dev" || die 'git commit failed' + From b45df9d6a73d97671cbdd38d77e9b153a80fb458 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 5 May 2015 11:36:40 -0400 Subject: [PATCH 016/670] Tests: Add NodeResolver unittests Minor misc. NodeResolver cleanups Prefix faux content type constants for testing with t_ to avoid confusion or name collisions --- build/android/jni/Android.mk | 1 + src/nodedef.cpp | 19 +- src/unittest/CMakeLists.txt | 1 + src/unittest/test.cpp | 77 +++++++- src/unittest/test.h | 9 +- src/unittest/test_noderesolver.cpp | 253 +++++++++++++++++++++++++ src/unittest/test_voxelalgorithms.cpp | 8 +- src/unittest/test_voxelmanipulator.cpp | 6 +- 8 files changed, 349 insertions(+), 25 deletions(-) create mode 100644 src/unittest/test_noderesolver.cpp diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index e58cb82c8..17c6fa7dd 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -219,6 +219,7 @@ LOCAL_SRC_FILES := \ jni/src/unittest/test_inventory.cpp \ jni/src/unittest/test_mapnode.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 \ diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 58566200e..48207da1f 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1346,7 +1346,8 @@ void CNodeDefManager::runNodeResolveCallbacks() //// NodeResolver //// -NodeResolver::NodeResolver() { +NodeResolver::NodeResolver() +{ m_ndef = NULL; m_nodenames_idx = 0; m_nnlistsizes_idx = 0; @@ -1379,14 +1380,14 @@ void NodeResolver::nodeResolveInternal() const std::string &NodeResolver::getNodeName(content_t c) const { - if (m_nodenames.size() == 0) { + if (c < m_nodenames.size()) + return m_nodenames[c]; + + if (m_ndef) return m_ndef->get(c).name; - } else { - if (c < m_nodenames.size()) - return m_nodenames[c]; - else - return m_ndef->get(CONTENT_UNKNOWN).name; - } + + static const std::string unknown_str("unknown"); + return unknown_str; } @@ -1395,7 +1396,7 @@ bool NodeResolver::getIdFromNrBacklog(content_t *result_out, { if (m_nodenames_idx == m_nodenames.size()) { *result_out = c_fallback; - errorstream << "Resolver: no more nodes in list" << std::endl; + errorstream << "NodeResolver: no more nodes in list" << std::endl; return false; } diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index ccb046bb9..6ec5eaea5 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -7,6 +7,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_inventory.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_noderesolver.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_noise.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_objdef.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_profiler.cpp diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index 6fea0b8a0..57843da5e 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -25,9 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "itemdef.h" #include "gamedef.h" -content_t CONTENT_STONE; -content_t CONTENT_GRASS; -content_t CONTENT_TORCH; +content_t t_CONTENT_STONE; +content_t t_CONTENT_GRASS; +content_t t_CONTENT_TORCH; +content_t t_CONTENT_WATER; +content_t t_CONTENT_LAVA; +content_t t_CONTENT_BRICK; //////////////////////////////////////////////////////////////////////////////// @@ -111,7 +114,7 @@ void TestGameDef::defineSomeNodes() f.tiledef[i].name = "default_stone.png"; f.is_ground_content = true; idef->registerItem(itemdef); - CONTENT_STONE = ndef->set(f.name, f); + t_CONTENT_STONE = ndef->set(f.name, f); //// Grass itemdef = ItemDefinition(); @@ -131,7 +134,7 @@ void TestGameDef::defineSomeNodes() f.tiledef[i].name = "default_dirt.png^default_grass_side.png"; f.is_ground_content = true; idef->registerItem(itemdef); - CONTENT_GRASS = ndef->set(f.name, f); + t_CONTENT_GRASS = ndef->set(f.name, f); //// Torch (minimal definition for lighting tests) itemdef = ItemDefinition(); @@ -144,7 +147,69 @@ void TestGameDef::defineSomeNodes() f.sunlight_propagates = true; f.light_source = LIGHT_MAX-1; idef->registerItem(itemdef); - CONTENT_TORCH = ndef->set(f.name, f); + t_CONTENT_TORCH = ndef->set(f.name, f); + + //// Water + itemdef = ItemDefinition(); + itemdef.type = ITEM_NODE; + itemdef.name = "default:water"; + itemdef.description = "Water"; + itemdef.inventory_image = "[inventorycube" + "{default_water.png" + "{default_water.png" + "{default_water.png"; + f = ContentFeatures(); + f.name = itemdef.name; + f.alpha = 128; + f.liquid_type = LIQUID_SOURCE; + f.liquid_viscosity = 4; + f.is_ground_content = true; + f.groups["liquids"] = 3; + for(int i = 0; i < 6; i++) + f.tiledef[i].name = "default_water.png"; + idef->registerItem(itemdef); + t_CONTENT_WATER = ndef->set(f.name, f); + + //// Lava + itemdef = ItemDefinition(); + itemdef.type = ITEM_NODE; + itemdef.name = "default:lava"; + itemdef.description = "Lava"; + itemdef.inventory_image = "[inventorycube" + "{default_lava.png" + "{default_lava.png" + "{default_lava.png"; + f = ContentFeatures(); + f.name = itemdef.name; + f.alpha = 128; + f.liquid_type = LIQUID_SOURCE; + f.liquid_viscosity = 7; + f.light_source = LIGHT_MAX-1; + f.is_ground_content = true; + f.groups["liquids"] = 3; + for(int i = 0; i < 6; i++) + f.tiledef[i].name = "default_lava.png"; + idef->registerItem(itemdef); + t_CONTENT_LAVA = ndef->set(f.name, f); + + + //// Brick + itemdef = ItemDefinition(); + itemdef.type = ITEM_NODE; + itemdef.name = "default:brick"; + itemdef.description = "Brick"; + itemdef.groups["cracky"] = 3; + itemdef.inventory_image = "[inventorycube" + "{default_brick.png" + "{default_brick.png" + "{default_brick.png"; + f = ContentFeatures(); + f.name = itemdef.name; + for(int i = 0; i < 6; i++) + f.tiledef[i].name = "default_brick.png"; + f.is_ground_content = true; + idef->registerItem(itemdef); + t_CONTENT_BRICK = ndef->set(f.name, f); } //// diff --git a/src/unittest/test.h b/src/unittest/test.h index c9a5a2e9a..8219e30fc 100644 --- a/src/unittest/test.h +++ b/src/unittest/test.h @@ -124,9 +124,12 @@ public: }; // A few item and node definitions for those tests that need them -extern content_t CONTENT_STONE; -extern content_t CONTENT_GRASS; -extern content_t CONTENT_TORCH; +extern content_t t_CONTENT_STONE; +extern content_t t_CONTENT_GRASS; +extern content_t t_CONTENT_TORCH; +extern content_t t_CONTENT_WATER; +extern content_t t_CONTENT_LAVA; +extern content_t t_CONTENT_BRICK; void run_tests(); diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp new file mode 100644 index 000000000..c440b2399 --- /dev/null +++ b/src/unittest/test_noderesolver.cpp @@ -0,0 +1,253 @@ +/* +Minetest +Copyright (C) 2010-2014 kwolekr, Ryan Kwolek + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" + +#include "exceptions.h" +#include "gamedef.h" +#include "nodedef.h" + + +class TestNodeResolver : public TestBase { +public: + TestNodeResolver() { TestManager::registerTestModule(this); } + const char *getName() { return "TestNodeResolver"; } + + void runTests(IGameDef *gamedef); + + void testNodeResolving(INodeDefManager *ndef); + void testPendingResolveCancellation(INodeDefManager *ndef); + void testDirectResolveMethod(INodeDefManager *ndef); + void testNoneResolveMethod(INodeDefManager *ndef); +}; + +static TestNodeResolver g_test_instance; + +void TestNodeResolver::runTests(IGameDef *gamedef) +{ + IWritableNodeDefManager *parent_ndef; + INodeDefManager *ndef; + + parent_ndef = (IWritableNodeDefManager *)gamedef->getNodeDefManager(); + + ndef = parent_ndef->clone(); + TEST(testNodeResolving, ndef); + delete ndef; + + ndef = parent_ndef->clone(); + TEST(testPendingResolveCancellation, ndef); + delete ndef; + + ndef = parent_ndef->clone(); + TEST(testDirectResolveMethod, ndef); + delete ndef; + + ndef = parent_ndef->clone(); + TEST(testNoneResolveMethod, ndef); + delete ndef; +} + +class Foobar : public NodeResolver { +public: + void resolveNodeNames(); + + content_t test_nr_node1; + content_t test_nr_node2; + content_t test_nr_node3; + content_t test_nr_node4; + content_t test_nr_node5; + std::vector test_nr_list; + std::vector test_nr_list_group; + std::vector test_nr_list_required; + std::vector test_nr_list_empty; +}; + +class Foobaz : public NodeResolver { +public: + void resolveNodeNames(); + + content_t test_content1; + content_t test_content2; +}; + +//////////////////////////////////////////////////////////////////////////////// + +void Foobar::resolveNodeNames() +{ + UASSERT(getIdFromNrBacklog(&test_nr_node1, "", CONTENT_IGNORE) == true); + UASSERT(getIdsFromNrBacklog(&test_nr_list) == true); + UASSERT(getIdsFromNrBacklog(&test_nr_list_group) == true); + UASSERT(getIdsFromNrBacklog(&test_nr_list_required, + true, CONTENT_AIR) == false); + UASSERT(getIdsFromNrBacklog(&test_nr_list_empty) == true); + + UASSERT(getIdFromNrBacklog(&test_nr_node2, "", CONTENT_IGNORE) == true); + UASSERT(getIdFromNrBacklog(&test_nr_node3, + "default:brick", CONTENT_IGNORE) == true); + UASSERT(getIdFromNrBacklog(&test_nr_node4, + "default:gobbledygook", CONTENT_AIR) == false); + UASSERT(getIdFromNrBacklog(&test_nr_node5, "", CONTENT_IGNORE) == false); +} + + +void Foobaz::resolveNodeNames() +{ + UASSERT(getIdFromNrBacklog(&test_content1, "", CONTENT_IGNORE) == true); + UASSERT(getIdFromNrBacklog(&test_content2, "", CONTENT_IGNORE) == false); +} + + +void TestNodeResolver::testNodeResolving(INodeDefManager *ndef) +{ + Foobar foobar; + size_t i; + + foobar.m_nodenames.push_back("default:torch"); + + foobar.m_nodenames.push_back("default:dirt_with_grass"); + foobar.m_nodenames.push_back("default:water"); + foobar.m_nodenames.push_back("default:abloobloobloo"); + foobar.m_nodenames.push_back("default:stone"); + foobar.m_nodenames.push_back("default:shmegoldorf"); + foobar.m_nnlistsizes.push_back(5); + + foobar.m_nodenames.push_back("group:liquids"); + foobar.m_nnlistsizes.push_back(1); + + foobar.m_nodenames.push_back("default:warf"); + foobar.m_nodenames.push_back("default:stone"); + foobar.m_nodenames.push_back("default:bloop"); + foobar.m_nnlistsizes.push_back(3); + + foobar.m_nnlistsizes.push_back(0); + + foobar.m_nodenames.push_back("default:brick"); + foobar.m_nodenames.push_back("default:desert_stone"); + foobar.m_nodenames.push_back("default:shnitzle"); + + ndef->pendNodeResolve(&foobar, NODE_RESOLVE_DEFERRED); + UASSERT(foobar.m_ndef == ndef); + + ndef->setNodeRegistrationStatus(true); + ndef->runNodeResolveCallbacks(); + + // Check that we read single nodes successfully + UASSERTEQ(content_t, foobar.test_nr_node1, t_CONTENT_TORCH); + UASSERTEQ(content_t, foobar.test_nr_node2, t_CONTENT_BRICK); + UASSERTEQ(content_t, foobar.test_nr_node3, t_CONTENT_BRICK); + UASSERTEQ(content_t, foobar.test_nr_node4, CONTENT_AIR); + UASSERTEQ(content_t, foobar.test_nr_node5, CONTENT_IGNORE); + + // Check that we read all the regular list items + static const content_t expected_test_nr_list[] = { + t_CONTENT_GRASS, + t_CONTENT_WATER, + t_CONTENT_STONE, + }; + UASSERTEQ(size_t, foobar.test_nr_list.size(), 3); + for (i = 0; i != foobar.test_nr_list.size(); i++) + UASSERTEQ(content_t, foobar.test_nr_list[i], expected_test_nr_list[i]); + + // Check that we read all the list items that were from a group entry + static const content_t expected_test_nr_list_group[] = { + t_CONTENT_WATER, + t_CONTENT_LAVA, + }; + UASSERTEQ(size_t, foobar.test_nr_list_group.size(), 2); + for (i = 0; i != foobar.test_nr_list_group.size(); i++) { + UASSERT(CONTAINS(foobar.test_nr_list_group, + expected_test_nr_list_group[i])); + } + + // Check that we read all the items we're able to in a required list + static const content_t expected_test_nr_list_required[] = { + CONTENT_AIR, + t_CONTENT_STONE, + CONTENT_AIR, + }; + UASSERTEQ(size_t, foobar.test_nr_list_required.size(), 3); + for (i = 0; i != foobar.test_nr_list_required.size(); i++) + UASSERTEQ(content_t, foobar.test_nr_list_required[i], + expected_test_nr_list_required[i]); + + // Check that the edge case of 0 is successful + UASSERTEQ(size_t, foobar.test_nr_list_empty.size(), 0); +} + + +void TestNodeResolver::testPendingResolveCancellation(INodeDefManager *ndef) +{ + Foobaz foobaz1; + foobaz1.test_content1 = 1234; + foobaz1.test_content2 = 5678; + foobaz1.m_nodenames.push_back("default:dirt_with_grass"); + foobaz1.m_nodenames.push_back("default:abloobloobloo"); + ndef->pendNodeResolve(&foobaz1, NODE_RESOLVE_DEFERRED); + + Foobaz foobaz2; + foobaz2.test_content1 = 1234; + foobaz2.test_content2 = 5678; + foobaz2.m_nodenames.push_back("default:dirt_with_grass"); + foobaz2.m_nodenames.push_back("default:abloobloobloo"); + ndef->pendNodeResolve(&foobaz2, NODE_RESOLVE_DEFERRED); + + ndef->cancelNodeResolveCallback(&foobaz1); + + ndef->setNodeRegistrationStatus(true); + ndef->runNodeResolveCallbacks(); + + UASSERT(foobaz1.test_content1 == 1234); + UASSERT(foobaz1.test_content2 == 5678); + UASSERT(foobaz2.test_content1 == t_CONTENT_GRASS); + UASSERT(foobaz2.test_content2 == CONTENT_IGNORE); +} + + +void TestNodeResolver::testDirectResolveMethod(INodeDefManager *ndef) +{ + Foobaz foobaz; + + foobaz.m_nodenames.push_back("default:dirt_with_grass"); + foobaz.m_nodenames.push_back("default:abloobloobloo"); + + UASSERTEQ(std::string, foobaz.getNodeName(1), "default:abloobloobloo"); + + ndef->pendNodeResolve(&foobaz, NODE_RESOLVE_DIRECT); + + UASSERTEQ(content_t, foobaz.test_content1, t_CONTENT_GRASS); + UASSERTEQ(content_t, foobaz.test_content2, CONTENT_IGNORE); + + // We expect this to be *different* because the resolution of this node had + // failed. The internal nodename buffer is cleared and lookups should now + // use the nodedef manager. + UASSERT(foobaz.getNodeName(1) != "default:abloobloobloo"); +} + + +void TestNodeResolver::testNoneResolveMethod(INodeDefManager *ndef) +{ + Foobaz foobaz; + + foobaz.m_nodenames.push_back("default:dirt_with_grass"); + foobaz.m_nodenames.push_back("default:abloobloobloo"); + + ndef->pendNodeResolve(&foobaz, NODE_RESOLVE_NONE); + + UASSERTEQ(std::string, foobaz.getNodeName(1), "default:abloobloobloo"); +} diff --git a/src/unittest/test_voxelalgorithms.cpp b/src/unittest/test_voxelalgorithms.cpp index 2093ff5f8..31b9cadd5 100644 --- a/src/unittest/test_voxelalgorithms.cpp +++ b/src/unittest/test_voxelalgorithms.cpp @@ -69,7 +69,7 @@ void TestVoxelAlgorithms::testPropogateSunlight(INodeDefManager *ndef) == LIGHT_SUN); } - v.setNodeNoRef(v3s16(0,0,0), MapNode(CONTENT_STONE)); + v.setNodeNoRef(v3s16(0,0,0), MapNode(t_CONTENT_STONE)); { std::set light_sources; @@ -91,7 +91,7 @@ void TestVoxelAlgorithms::testPropogateSunlight(INodeDefManager *ndef) == 0); } - v.setNodeNoRef(v3s16(1,3,2), MapNode(CONTENT_STONE)); + v.setNodeNoRef(v3s16(1,3,2), MapNode(t_CONTENT_STONE)); { std::set light_sources; @@ -180,8 +180,8 @@ void TestVoxelAlgorithms::testClearLightAndCollectSources(INodeDefManager *ndef) } VoxelArea a(v3s16(0,0,0), v3s16(2,2,2)); - v.setNodeNoRef(v3s16(0,0,0), MapNode(CONTENT_STONE)); - v.setNodeNoRef(v3s16(1,1,1), MapNode(CONTENT_TORCH)); + v.setNodeNoRef(v3s16(0,0,0), MapNode(t_CONTENT_STONE)); + v.setNodeNoRef(v3s16(1,1,1), MapNode(t_CONTENT_TORCH)); { MapNode n(CONTENT_AIR); diff --git a/src/unittest/test_voxelmanipulator.cpp b/src/unittest/test_voxelmanipulator.cpp index d219e62e0..7f8ba3849 100644 --- a/src/unittest/test_voxelmanipulator.cpp +++ b/src/unittest/test_voxelmanipulator.cpp @@ -87,10 +87,10 @@ void TestVoxelManipulator::testVoxelManipulator(INodeDefManager *nodedef) v.print(infostream, nodedef); infostream << "*** Setting (-1,0,-1)=2 ***" << std::endl; - v.setNodeNoRef(v3s16(-1,0,-1), MapNode(CONTENT_GRASS)); + v.setNodeNoRef(v3s16(-1,0,-1), MapNode(t_CONTENT_GRASS)); v.print(infostream, nodedef); - UASSERT(v.getNode(v3s16(-1,0,-1)).getContent() == CONTENT_GRASS); + UASSERT(v.getNode(v3s16(-1,0,-1)).getContent() == t_CONTENT_GRASS); infostream << "*** Reading from inexistent (0,0,-1) ***" << std::endl; @@ -103,6 +103,6 @@ void TestVoxelManipulator::testVoxelManipulator(INodeDefManager *nodedef) v.addArea(a); v.print(infostream, nodedef); - UASSERT(v.getNode(v3s16(-1,0,-1)).getContent() == CONTENT_GRASS); + UASSERT(v.getNode(v3s16(-1,0,-1)).getContent() == t_CONTENT_GRASS); EXCEPTION_CHECK(InvalidPositionException, v.getNode(v3s16(0,1,1))); } From b785577f03d00c83236782876def4c900edbba4e Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 5 May 2015 14:30:46 -0400 Subject: [PATCH 017/670] Add core.find_nodes_with_meta() script API --- doc/lua_api.txt | 2 ++ src/map.cpp | 34 ++++++++++++++++++++++++++++++++++ src/map.h | 3 ++- src/nodemetadata.cpp | 34 ++++++++++++++++++++++------------ src/nodemetadata.h | 15 +++++++++------ src/script/lua_api/l_env.cpp | 17 +++++++++++++++++ src/script/lua_api/l_env.h | 4 +++- 7 files changed, 89 insertions(+), 20 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 6325ed35d..c01ef208c 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1871,6 +1871,8 @@ and `minetest.auth_reload` call the authetification handler. * `minetest.punch_node(pos)` * Punch node with the same effects that a player would cause +* `minetest.find_nodes_with_meta(pos1, pos2)` + * Get a table of positions of nodes that have metadata within a region {pos1, pos2} * `minetest.get_meta(pos)` * Get a `NodeMetaRef` at that position * `minetest.get_node_timer(pos)` diff --git a/src/map.cpp b/src/map.cpp index 9fead00c6..7f8059cc4 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1890,6 +1890,40 @@ void Map::transformLiquids(std::map & modified_blocks) } } +std::vector Map::findNodesWithMetadata(v3s16 p1, v3s16 p2) +{ + std::vector positions_with_meta; + + sortBoxVerticies(p1, p2); + v3s16 bpmin = getNodeBlockPos(p1); + v3s16 bpmax = getNodeBlockPos(p2); + + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) + for (s16 x = bpmin.X; x <= bpmax.X; x++) { + v3s16 blockpos(x, y, z); + + MapBlock *block = getBlockNoCreateNoEx(blockpos); + if (!block) { + verbosestream << "Map::getNodeMetadata(): Need to emerge " + << PP(blockpos) << std::endl; + block = emergeBlock(blockpos, false); + } + if (!block) { + infostream << "WARNING: Map::getNodeMetadata(): Block not found" + << std::endl; + continue; + } + + v3s16 p_base = blockpos * MAP_BLOCKSIZE; + std::vector keys = block->m_node_metadata.getAllKeys(); + for (size_t i = 0; i != keys.size(); i++) + positions_with_meta.push_back(keys[i] + p_base); + } + + return positions_with_meta; +} + NodeMetadata *Map::getNodeMetadata(v3s16 p) { v3s16 blockpos = getNodeBlockPos(p); diff --git a/src/map.h b/src/map.h index 325a02e60..5500ccf91 100644 --- a/src/map.h +++ b/src/map.h @@ -301,7 +301,8 @@ public: These are basically coordinate wrappers to MapBlock */ - NodeMetadata* getNodeMetadata(v3s16 p); + std::vector findNodesWithMetadata(v3s16 p1, v3s16 p2); + NodeMetadata *getNodeMetadata(v3s16 p); /** * Sets metadata for a node. diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index 1e40a1630..bd54d2256 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -157,10 +157,21 @@ NodeMetadataList::~NodeMetadataList() clear(); } -NodeMetadata* NodeMetadataList::get(v3s16 p) +std::vector NodeMetadataList::getAllKeys() { - std::map::const_iterator n = m_data.find(p); - if(n == m_data.end()) + std::vector keys; + + std::map::const_iterator it; + for (it = m_data.begin(); it != m_data.end(); ++it) + keys.push_back(it->first); + + return keys; +} + +NodeMetadata *NodeMetadataList::get(v3s16 p) +{ + std::map::const_iterator n = m_data.find(p); + if (n == m_data.end()) return NULL; return n->second; } @@ -168,8 +179,7 @@ NodeMetadata* NodeMetadataList::get(v3s16 p) void NodeMetadataList::remove(v3s16 p) { NodeMetadata *olddata = get(p); - if(olddata) - { + if (olddata) { delete olddata; m_data.erase(p); } @@ -183,16 +193,15 @@ void NodeMetadataList::set(v3s16 p, NodeMetadata *d) void NodeMetadataList::clear() { - for(std::map::iterator - i = m_data.begin(); - i != m_data.end(); i++) - { - delete i->second; + std::map::iterator it; + for (it = m_data.begin(); it != m_data.end(); ++it) { + delete it->second; } m_data.clear(); } -std::string NodeMetadata::getString(const std::string &name, unsigned short recursion) const +std::string NodeMetadata::getString(const std::string &name, + unsigned short recursion) const { std::map::const_iterator it; it = m_stringvars.find(name); @@ -211,7 +220,8 @@ void NodeMetadata::setString(const std::string &name, const std::string &var) } } -std::string NodeMetadata::resolveString(const std::string &str, unsigned short recursion) const +std::string NodeMetadata::resolveString(const std::string &str, + unsigned short recursion) const { if (recursion > 1) { return str; diff --git a/src/nodemetadata.h b/src/nodemetadata.h index 6baf3b3d3..acd45bdf9 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irr_v3d.h" #include #include +#include #include /* @@ -42,10 +43,10 @@ class NodeMetadata public: NodeMetadata(IGameDef *gamedef); ~NodeMetadata(); - + void serialize(std::ostream &os) const; void deSerialize(std::istream &is); - + void clear(); // Generic key/value store @@ -81,18 +82,20 @@ public: void serialize(std::ostream &os) const; void deSerialize(std::istream &is, IGameDef *gamedef); - + + // Add all keys in this list to the vector keys + std::vector getAllKeys(); // Get pointer to data - NodeMetadata* get(v3s16 p); + NodeMetadata *get(v3s16 p); // Deletes data void remove(v3s16 p); // Deletes old data and sets a new one void set(v3s16 p, NodeMetadata *d); // Deletes all void clear(); - + private: - std::map m_data; + std::map m_data; }; #endif diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 0fe1ddec3..9581d1ef3 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -334,6 +334,22 @@ int ModApiEnvMod::l_add_node_level(lua_State *L) return 1; } +// find_nodes_with_meta(pos1, pos2) +int ModApiEnvMod::l_find_nodes_with_meta(lua_State *L) +{ + GET_ENV_PTR; + + std::vector positions = env->getMap().findNodesWithMetadata( + check_v3s16(L, 1), check_v3s16(L, 2)); + + lua_newtable(L); + for (size_t i = 0; i != positions.size(); i++) { + push_v3s16(L, positions[i]); + lua_rawseti(L, -2, i + 1); + } + + return 1; +} // get_meta(pos) int ModApiEnvMod::l_get_meta(lua_State *L) @@ -912,6 +928,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top) API_FCT(set_node_level); API_FCT(add_node_level); API_FCT(add_entity); + API_FCT(find_nodes_with_meta); API_FCT(get_meta); API_FCT(get_node_timer); API_FCT(get_player_by_name); diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h index 5c9afd2f1..0d4ca788e 100644 --- a/src/script/lua_api/l_env.h +++ b/src/script/lua_api/l_env.h @@ -64,7 +64,6 @@ private: // pos = {x=num, y=num, z=num} static int l_punch_node(lua_State *L); - // get_node_max_level(pos) // pos = {x=num, y=num, z=num} static int l_get_node_max_level(lua_State *L); @@ -81,6 +80,9 @@ private: // pos = {x=num, y=num, z=num} static int l_add_node_level(lua_State *L); + // find_nodes_with_meta(pos1, pos2) + static int l_find_nodes_with_meta(lua_State *L); + // get_meta(pos) static int l_get_meta(lua_State *L); From 633af58a05fb9b3ad7a0a178011f4243e5f8be2e Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 5 May 2015 16:52:06 -0400 Subject: [PATCH 018/670] NodeDefManager: Improve const-correctness of interfaces - Add ability to explicitly reset NodeResolve state (useful for unittesting) - Remove non-essential NodeResolve methods modifying state from INodeDefManager - Add const qualifier to NodeDefManager and ContentFeatures serialize --- src/nodedef.cpp | 25 +++++++++++++-------- src/nodedef.h | 35 ++++++++++++++---------------- src/unittest/test_noderesolver.cpp | 34 ++++++++++++----------------- 3 files changed, 46 insertions(+), 48 deletions(-) diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 48207da1f..2442799c7 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -241,7 +241,7 @@ void ContentFeatures::reset() sound_dug = SimpleSoundSpec(); } -void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) +void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const { if(protocol_version < 24){ serializeOld(os, protocol_version); @@ -398,9 +398,9 @@ public: virtual content_t allocateDummy(const std::string &name); virtual void updateAliases(IItemDefManager *idef); virtual void updateTextures(IGameDef *gamedef, - /*argument: */void (*progress_callback)(void *progress_args, u32 progress, u32 max_progress), - /*argument: */void *progress_callback_args); - void serialize(std::ostream &os, u16 protocol_version); + void (*progress_cbk)(void *progress_args, u32 progress, u32 max_progress), + void *progress_cbk_args); + void serialize(std::ostream &os, u16 protocol_version) const; void deSerialize(std::istream &is); inline virtual bool getNodeRegistrationStatus() const; @@ -409,6 +409,7 @@ public: virtual void pendNodeResolve(NodeResolver *nr, NodeResolveMethod how); virtual bool cancelNodeResolveCallback(NodeResolver *nr); virtual void runNodeResolveCallbacks(); + virtual void resetNodeResolveState(); private: void addNameIdMapping(content_t i, std::string name); @@ -474,8 +475,7 @@ void CNodeDefManager::clear() m_group_to_items.clear(); m_next_id = 0; - m_node_registration_complete = false; - m_pending_resolve_callbacks.clear(); + resetNodeResolveState(); u32 initial_length = 0; initial_length = MYMAX(initial_length, CONTENT_UNKNOWN + 1); @@ -972,7 +972,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, #endif -void CNodeDefManager::serialize(std::ostream &os, u16 protocol_version) +void CNodeDefManager::serialize(std::ostream &os, u16 protocol_version) const { writeU8(os, 1); // version u16 count = 0; @@ -981,7 +981,7 @@ void CNodeDefManager::serialize(std::ostream &os, u16 protocol_version) if (i == CONTENT_IGNORE || i == CONTENT_AIR || i == CONTENT_UNKNOWN) continue; - ContentFeatures *f = &m_content_features[i]; + const ContentFeatures *f = &m_content_features[i]; if (f->name == "") continue; writeU16(os2, i); @@ -1062,7 +1062,7 @@ IWritableNodeDefManager *createNodeDefManager() //// Serialization of old ContentFeatures formats -void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) +void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const { if (protocol_version == 13) { @@ -1342,6 +1342,13 @@ void CNodeDefManager::runNodeResolveCallbacks() } +void CNodeDefManager::resetNodeResolveState() +{ + m_node_registration_complete = false; + m_pending_resolve_callbacks.clear(); +} + + //// //// NodeResolver //// diff --git a/src/nodedef.h b/src/nodedef.h index d9829c495..42b345059 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -265,9 +265,9 @@ struct ContentFeatures ContentFeatures(); ~ContentFeatures(); void reset(); - void serialize(std::ostream &os, u16 protocol_version); + void serialize(std::ostream &os, u16 protocol_version) const; void deSerialize(std::istream &is); - void serializeOld(std::ostream &os, u16 protocol_version); + void serializeOld(std::ostream &os, u16 protocol_version) const; void deSerializeOld(std::istream &is, int version); /* @@ -288,48 +288,44 @@ enum NodeResolveMethod { NODE_RESOLVE_DEFERRED, }; -class INodeDefManager -{ +class INodeDefManager { public: INodeDefManager(){} virtual ~INodeDefManager(){} // Get node definition - virtual const ContentFeatures& get(content_t c) const=0; - virtual const ContentFeatures& get(const MapNode &n) const=0; + virtual const ContentFeatures &get(content_t c) const=0; + virtual const ContentFeatures &get(const MapNode &n) const=0; virtual bool getId(const std::string &name, content_t &result) const=0; virtual content_t getId(const std::string &name) const=0; // Allows "group:name" in addition to regular node names virtual void getIds(const std::string &name, std::set &result) const=0; - virtual const ContentFeatures& get(const std::string &name) const=0; + virtual const ContentFeatures &get(const std::string &name) const=0; - virtual void serialize(std::ostream &os, u16 protocol_version)=0; + virtual void serialize(std::ostream &os, u16 protocol_version) const=0; virtual bool getNodeRegistrationStatus() const=0; - virtual void setNodeRegistrationStatus(bool completed)=0; virtual void pendNodeResolve(NodeResolver *nr, NodeResolveMethod how)=0; virtual bool cancelNodeResolveCallback(NodeResolver *nr)=0; - virtual void runNodeResolveCallbacks()=0; }; -class IWritableNodeDefManager : public INodeDefManager -{ +class IWritableNodeDefManager : public INodeDefManager { public: IWritableNodeDefManager(){} virtual ~IWritableNodeDefManager(){} virtual IWritableNodeDefManager* clone()=0; // Get node definition - virtual const ContentFeatures& get(content_t c) const=0; - virtual const ContentFeatures& get(const MapNode &n) const=0; + virtual const ContentFeatures &get(content_t c) const=0; + virtual const ContentFeatures &get(const MapNode &n) const=0; virtual bool getId(const std::string &name, content_t &result) const=0; // If not found, returns CONTENT_IGNORE virtual content_t getId(const std::string &name) const=0; // Allows "group:name" in addition to regular node names virtual void getIds(const std::string &name, std::set &result) - const=0; + const=0; // If not found, returns the features of CONTENT_UNKNOWN - virtual const ContentFeatures& get(const std::string &name) const=0; + virtual const ContentFeatures &get(const std::string &name) const=0; // Register node definition by name (allocate an id) // If returns CONTENT_IGNORE, could not allocate id @@ -348,10 +344,10 @@ public: Update tile textures to latest return values of TextueSource. */ virtual void updateTextures(IGameDef *gamedef, - /*argument: */void (*progress_callback)(void *progress_args, u32 progress, u32 max_progress), - /*argument: */void *progress_callback_args)=0; + void (*progress_cbk)(void *progress_args, u32 progress, u32 max_progress), + void *progress_cbk_args)=0; - virtual void serialize(std::ostream &os, u16 protocol_version)=0; + virtual void serialize(std::ostream &os, u16 protocol_version) const=0; virtual void deSerialize(std::istream &is)=0; virtual bool getNodeRegistrationStatus() const=0; @@ -360,6 +356,7 @@ public: virtual void pendNodeResolve(NodeResolver *nr, NodeResolveMethod how)=0; virtual bool cancelNodeResolveCallback(NodeResolver *nr)=0; virtual void runNodeResolveCallbacks()=0; + virtual void resetNodeResolveState()=0; }; IWritableNodeDefManager *createNodeDefManager(); diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp index c440b2399..a4ea647bc 100644 --- a/src/unittest/test_noderesolver.cpp +++ b/src/unittest/test_noderesolver.cpp @@ -31,36 +31,30 @@ public: void runTests(IGameDef *gamedef); - void testNodeResolving(INodeDefManager *ndef); - void testPendingResolveCancellation(INodeDefManager *ndef); - void testDirectResolveMethod(INodeDefManager *ndef); - void testNoneResolveMethod(INodeDefManager *ndef); + void testNodeResolving(IWritableNodeDefManager *ndef); + void testPendingResolveCancellation(IWritableNodeDefManager *ndef); + void testDirectResolveMethod(IWritableNodeDefManager *ndef); + void testNoneResolveMethod(IWritableNodeDefManager *ndef); }; static TestNodeResolver g_test_instance; void TestNodeResolver::runTests(IGameDef *gamedef) { - IWritableNodeDefManager *parent_ndef; - INodeDefManager *ndef; + IWritableNodeDefManager *ndef = + (IWritableNodeDefManager *)gamedef->getNodeDefManager(); - parent_ndef = (IWritableNodeDefManager *)gamedef->getNodeDefManager(); - - ndef = parent_ndef->clone(); + ndef->resetNodeResolveState(); TEST(testNodeResolving, ndef); - delete ndef; - ndef = parent_ndef->clone(); + ndef->resetNodeResolveState(); TEST(testPendingResolveCancellation, ndef); - delete ndef; - ndef = parent_ndef->clone(); + ndef->resetNodeResolveState(); TEST(testDirectResolveMethod, ndef); - delete ndef; - ndef = parent_ndef->clone(); + ndef->resetNodeResolveState(); TEST(testNoneResolveMethod, ndef); - delete ndef; } class Foobar : public NodeResolver { @@ -113,7 +107,7 @@ void Foobaz::resolveNodeNames() } -void TestNodeResolver::testNodeResolving(INodeDefManager *ndef) +void TestNodeResolver::testNodeResolving(IWritableNodeDefManager *ndef) { Foobar foobar; size_t i; @@ -191,7 +185,7 @@ void TestNodeResolver::testNodeResolving(INodeDefManager *ndef) } -void TestNodeResolver::testPendingResolveCancellation(INodeDefManager *ndef) +void TestNodeResolver::testPendingResolveCancellation(IWritableNodeDefManager *ndef) { Foobaz foobaz1; foobaz1.test_content1 = 1234; @@ -219,7 +213,7 @@ void TestNodeResolver::testPendingResolveCancellation(INodeDefManager *ndef) } -void TestNodeResolver::testDirectResolveMethod(INodeDefManager *ndef) +void TestNodeResolver::testDirectResolveMethod(IWritableNodeDefManager *ndef) { Foobaz foobaz; @@ -240,7 +234,7 @@ void TestNodeResolver::testDirectResolveMethod(INodeDefManager *ndef) } -void TestNodeResolver::testNoneResolveMethod(INodeDefManager *ndef) +void TestNodeResolver::testNoneResolveMethod(IWritableNodeDefManager *ndef) { Foobaz foobaz; From 2b44e7544267e26edc1f4df0b12a4759012049a2 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 5 May 2015 20:40:18 -0400 Subject: [PATCH 019/670] Fix build on Debian broken by b45df9d (missing include, somehow?) --- src/unittest/test_noderesolver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp index a4ea647bc..bd6e6f5ac 100644 --- a/src/unittest/test_noderesolver.cpp +++ b/src/unittest/test_noderesolver.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "test.h" +#include "util/numeric.h" #include "exceptions.h" #include "gamedef.h" #include "nodedef.h" From 3f5c2dea4daa1d6924ce83c9c42e2be076da2525 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 6 May 2015 15:04:14 -0400 Subject: [PATCH 020/670] Improve Redis error messages --- src/database-redis.cpp | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/database-redis.cpp b/src/database-redis.cpp index 7b42274b9..cc4e5bade 100644 --- a/src/database-redis.cpp +++ b/src/database-redis.cpp @@ -47,7 +47,7 @@ Database_Redis::Database_Redis(Settings &conf) ctx = redisConnect(addr, port); if (!ctx) { throw FileNotGoodException("Cannot allocate redis context"); - } else if(ctx->err) { + } else if (ctx->err) { std::string err = std::string("Connection error: ") + ctx->errstr; redisFree(ctx); throw FileNotGoodException(err); @@ -92,7 +92,7 @@ bool Database_Redis::saveBlock(const v3s16 &pos, const std::string &data) if (reply->type == REDIS_REPLY_ERROR) { errorstream << "WARNING: saveBlock: saving block " << PP(pos) - << "failed" << std::endl; + << " failed: " << reply->str << std::endl; freeReplyObject(reply); return false; } @@ -110,13 +110,20 @@ std::string Database_Redis::loadBlock(const v3s16 &pos) if (!reply) { throw FileNotGoodException(std::string( "Redis command 'HGET %s %s' failed: ") + ctx->errstr); - } else if (reply->type != REDIS_REPLY_STRING) { - return ""; } - - std::string str(reply->str, reply->len); - freeReplyObject(reply); // std::string copies the memory so this won't cause any problems - return str; + switch (reply->type) { + case REDIS_REPLY_STRING: { + std::string str(reply->str, reply->len); + // std::string copies the memory so this won't cause any problems + freeReplyObject(reply); + return str; + } + case REDIS_REPLY_ERROR: + errorstream << "WARNING: loadBlock: loading block " << PP(pos) + << " failed: " << reply->str << std::endl; + } + freeReplyObject(reply); + return ""; } bool Database_Redis::deleteBlock(const v3s16 &pos) @@ -130,7 +137,7 @@ bool Database_Redis::deleteBlock(const v3s16 &pos) "Redis command 'HDEL %s %s' failed: ") + ctx->errstr); } else if (reply->type == REDIS_REPLY_ERROR) { errorstream << "WARNING: deleteBlock: deleting block " << PP(pos) - << " failed" << std::endl; + << " failed: " << reply->str << std::endl; freeReplyObject(reply); return false; } @@ -145,12 +152,16 @@ void Database_Redis::listAllLoadableBlocks(std::vector &dst) if (!reply) { throw FileNotGoodException(std::string( "Redis command 'HKEYS %s' failed: ") + ctx->errstr); - } else if (reply->type != REDIS_REPLY_ARRAY) { - throw FileNotGoodException("Failed to get keys from database"); } - for (size_t i = 0; i < reply->elements; i++) { - assert(reply->element[i]->type == REDIS_REPLY_STRING); - dst.push_back(getIntegerAsBlock(stoi64(reply->element[i]->str))); + switch (reply->type) { + case REDIS_REPLY_ARRAY: + for (size_t i = 0; i < reply->elements; i++) { + assert(reply->element[i]->type == REDIS_REPLY_STRING); + dst.push_back(getIntegerAsBlock(stoi64(reply->element[i]->str))); + } + case REDIS_REPLY_ERROR: + throw FileNotGoodException(std::string( + "Failed to get keys from database: ") + reply->str); } freeReplyObject(reply); } From 3a8e7341ec29e264cb13f5ff4983ab625ab67498 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 6 May 2015 15:33:36 -0400 Subject: [PATCH 021/670] Fix error messages for type-checking Lua reading functions --- src/script/common/c_converter.cpp | 57 ++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 755485ee4..027df4dbf 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -26,6 +26,19 @@ extern "C" { #include "common/c_converter.h" #include "constants.h" + +#define CHECK_TYPE(index, name, type) do { \ + int t = lua_type(L, (index)); \ + if (t != (type)) { \ + throw LuaError(std::string("Invalid ") + (name) + \ + " (expected " + lua_typename(L, (type)) + \ + " got " + lua_typename(L, t) + ")."); \ + } \ +} while(0) +#define CHECK_POS_COORD(name) CHECK_TYPE(-1, "position coordinate '" name "'", LUA_TNUMBER) +#define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE) + + void push_v3f(lua_State *L, v3f p) { lua_newtable(L); @@ -49,7 +62,7 @@ void push_v2f(lua_State *L, v2f p) v2s16 read_v2s16(lua_State *L, int index) { v2s16 p; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); lua_getfield(L, index, "x"); p.X = lua_tonumber(L, -1); lua_pop(L, 1); @@ -62,12 +75,14 @@ v2s16 read_v2s16(lua_State *L, int index) v2s16 check_v2s16(lua_State *L, int index) { v2s16 p; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); lua_getfield(L, index, "x"); - p.X = luaL_checknumber(L, -1); + CHECK_POS_COORD("x"); + p.X = lua_tonumber(L, -1); lua_pop(L, 1); lua_getfield(L, index, "y"); - p.Y = luaL_checknumber(L, -1); + CHECK_POS_COORD("y"); + p.Y = lua_tonumber(L, -1); lua_pop(L, 1); return p; } @@ -75,7 +90,7 @@ v2s16 check_v2s16(lua_State *L, int index) v2s32 read_v2s32(lua_State *L, int index) { v2s32 p; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); lua_getfield(L, index, "x"); p.X = lua_tonumber(L, -1); lua_pop(L, 1); @@ -88,7 +103,8 @@ v2s32 read_v2s32(lua_State *L, int index) v2f read_v2f(lua_State *L, int index) { v2f p; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); + lua_getfield(L, index, "x"); lua_getfield(L, index, "x"); p.X = lua_tonumber(L, -1); lua_pop(L, 1); @@ -101,12 +117,14 @@ v2f read_v2f(lua_State *L, int index) v2f check_v2f(lua_State *L, int index) { v2f p; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); lua_getfield(L, index, "x"); - p.X = luaL_checknumber(L, -1); + CHECK_POS_COORD("x"); + p.X = lua_tonumber(L, -1); lua_pop(L, 1); lua_getfield(L, index, "y"); - p.Y = luaL_checknumber(L, -1); + CHECK_POS_COORD("y"); + p.Y = lua_tonumber(L, -1); lua_pop(L, 1); return p; } @@ -114,7 +132,7 @@ v2f check_v2f(lua_State *L, int index) v3f read_v3f(lua_State *L, int index) { v3f pos; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); lua_getfield(L, index, "x"); pos.X = lua_tonumber(L, -1); lua_pop(L, 1); @@ -130,15 +148,18 @@ v3f read_v3f(lua_State *L, int index) v3f check_v3f(lua_State *L, int index) { v3f pos; - luaL_checktype(L, index, LUA_TTABLE); + CHECK_POS_TAB(index); lua_getfield(L, index, "x"); - pos.X = luaL_checknumber(L, -1); + CHECK_POS_COORD("x"); + pos.X = lua_tonumber(L, -1); lua_pop(L, 1); lua_getfield(L, index, "y"); - pos.Y = luaL_checknumber(L, -1); + CHECK_POS_COORD("y"); + pos.Z = lua_tonumber(L, -1); lua_pop(L, 1); lua_getfield(L, index, "z"); - pos.Z = luaL_checknumber(L, -1); + CHECK_POS_COORD("z"); + pos.Z = lua_tonumber(L, -1); lua_pop(L, 1); return pos; } @@ -182,7 +203,7 @@ v3s16 check_v3s16(lua_State *L, int index) video::SColor readARGB8(lua_State *L, int index) { video::SColor color(0); - luaL_checktype(L, index, LUA_TTABLE); + CHECK_TYPE(index, "ARGB color", LUA_TTABLE); lua_getfield(L, index, "a"); if(lua_isnumber(L, -1)) color.setAlpha(lua_tonumber(L, -1)); @@ -378,9 +399,11 @@ std::string checkstringfield(lua_State *L, int table, const char *fieldname) { lua_getfield(L, table, fieldname); - std::string s = luaL_checkstring(L, -1); + 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 s; + return std::string(s, len); } std::string getstringfield_default(lua_State *L, int table, From d720fd564427b64cfab76e4b6177307bc46fa893 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 6 May 2015 15:41:37 -0400 Subject: [PATCH 022/670] Fix connection speed unit names --- src/game.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index af68a2571..74ae211bf 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2298,14 +2298,14 @@ bool Game::getServerContent(bool *aborted) if ((USE_CURL == 0) || (!g_settings->getBool("enable_remote_media_server"))) { float cur = client->getCurRate(); - std::string cur_unit = gettext(" KB/s"); + std::string cur_unit = gettext("KiB/s"); if (cur > 900) { cur /= 1024.0; - cur_unit = gettext(" MB/s"); + cur_unit = gettext("MiB/s"); } - message << " ( " << cur << cur_unit << " )"; + message << " (" << cur << ' ' << cur_unit << ")"; } progress = 30 + client->mediaReceiveProgress() * 35 + 0.5; From 656575b59d4f0d67452cca7409c9064f690f038c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 7 May 2015 02:34:15 -0400 Subject: [PATCH 023/670] NodeResolver: Remove NodeResolveMethod This simplifies NodeResolver logic and makes some interfaces cleaner. --- doc/lua_api.txt | 9 ---- src/mg_biome.cpp | 2 +- src/mg_decoration.cpp | 2 +- src/mg_schematic.cpp | 81 ++++++++++++++++++++---------- src/mg_schematic.h | 19 ++++--- src/nodedef.cpp | 33 ++---------- src/nodedef.h | 11 +--- src/script/lua_api/l_mapgen.cpp | 69 +++++++++++-------------- src/unittest/test_noderesolver.cpp | 46 ++--------------- 9 files changed, 103 insertions(+), 169 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index c01ef208c..6d1e7e705 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2180,15 +2180,6 @@ These functions return the leftover itemstack. * `options` is a table containing the following optional parameters: * If `use_comments` is true and `format` is "lua", the Lua code generated will have (X, Z) * position comments for every X row generated in the schematic data for easier reading. - * If `register_after_load` is true, then `schematic`, if not yet loaded, will be registered - * after loading and persist in memory. - * node_resolve_method can be one of either "none", "direct", or "deferred" (default: "none") - * This sets the way method by with node names are mapped to their content IDs, if loaded: - * "none" performs no node resolution and preserves all node names from the schematic definition - * "direct" performs an immediate lookup of content ID, given all the nodes that have been - * registered up to this point in script execution - * "deferred" pends node resolution until after the script registration phase has ended - * In practice, it is recommended to use "none" in nearly all use cases. ### Misc. * `minetest.get_connected_players()`: returns list of `ObjectRefs` diff --git a/src/mg_biome.cpp b/src/mg_biome.cpp index 241a06829..1944aa12f 100644 --- a/src/mg_biome.cpp +++ b/src/mg_biome.cpp @@ -57,7 +57,7 @@ BiomeManager::BiomeManager(IGameDef *gamedef) : b->m_nodenames.push_back("mapgen_water_source"); b->m_nodenames.push_back("mapgen_river_water_source"); b->m_nodenames.push_back("air"); - m_ndef->pendNodeResolve(b, NODE_RESOLVE_DEFERRED); + m_ndef->pendNodeResolve(b); add(b); } diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index 460db1ede..5176ccb68 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -340,7 +340,7 @@ size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p) bool force_placement = (flags & DECO_FORCE_PLACEMENT); - schematic->blitToVManip(p, vm, rot, force_placement, m_ndef); + schematic->blitToVManip(p, vm, rot, force_placement); return 1; } diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index 71f6f421c..3100637ae 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -94,9 +94,11 @@ void Schematic::resolveNodeNames() } -void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, - bool force_placement, INodeDefManager *ndef) +void Schematic::blitToVManip(v3s16 p, MMVManip *vm, + Rotation rot, bool force_placement) { + sanity_check(m_ndef != NULL); + int xstride = 1; int ystride = size.X; int zstride = size.X * size.Y; @@ -163,7 +165,7 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, vm->m_data[vi].param1 = 0; if (rot) - vm->m_data[vi].rotateAlongYAxis(ndef, rot); + vm->m_data[vi].rotateAlongYAxis(m_ndef, rot); } } y_map++; @@ -171,10 +173,12 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, } -void Schematic::placeStructure(Map *map, v3s16 p, u32 flags, Rotation rot, - bool force_placement, INodeDefManager *ndef) +void Schematic::placeStructure(Map *map, v3s16 p, u32 flags, + Rotation rot, bool force_placement) { assert(schemdata != NULL); // Pre-condition + sanity_check(m_ndef != NULL); + MMVManip *vm = new MMVManip(map); if (rot == ROTATE_RAND) @@ -194,7 +198,7 @@ void Schematic::placeStructure(Map *map, v3s16 p, u32 flags, Rotation rot, v3s16 bp2 = getNodeBlockPos(p + s - v3s16(1,1,1)); vm->initialEmerge(bp1, bp2); - blitToVManip(p, vm, rot, force_placement, ndef); + blitToVManip(p, vm, rot, force_placement); std::map lighting_modified_blocks; std::map modified_blocks; @@ -215,7 +219,8 @@ void Schematic::placeStructure(Map *map, v3s16 p, u32 flags, Rotation rot, } -bool Schematic::deserializeFromMts(std::istream *is, std::vector *names) +bool Schematic::deserializeFromMts(std::istream *is, + std::vector *names) { std::istream &ss = *is; content_t cignore = CONTENT_IGNORE; @@ -279,7 +284,8 @@ bool Schematic::deserializeFromMts(std::istream *is, std::vector *n } -bool Schematic::serializeToMts(std::ostream *os) +bool Schematic::serializeToMts(std::ostream *os, + const std::vector &names) { std::ostream &ss = *os; @@ -290,24 +296,20 @@ bool Schematic::serializeToMts(std::ostream *os) for (int y = 0; y != size.Y; y++) // Y slice probabilities writeU8(ss, slice_probs[y]); - std::vector usednodes; - int nodecount = size.X * size.Y * size.Z; - build_nnlist_and_update_ids(schemdata, nodecount, &usednodes); - - u16 numids = usednodes.size(); - writeU16(ss, numids); // name count - for (int i = 0; i != numids; i++) - ss << serializeString(getNodeName(usednodes[i])); // node names + writeU16(ss, names.size()); // name count + for (size_t i = 0; i != names.size(); i++) + ss << serializeString(names[i]); // node names // compressed bulk node data MapNode::serializeBulk(ss, SER_FMT_VER_HIGHEST_WRITE, - schemdata, nodecount, 2, 2, true); + schemdata, size.X * size.Y * size.Z, 2, 2, true); return true; } -bool Schematic::serializeToLua(std::ostream *os, bool use_comments) +bool Schematic::serializeToLua(std::ostream *os, + const std::vector &names, bool use_comments) { std::ostream &ss = *os; @@ -350,7 +352,7 @@ bool Schematic::serializeToLua(std::ostream *os, bool use_comments) for (u16 x = 0; x != size.X; x++, i++) { ss << "\t\t{" - << "name=\"" << getNodeName(schemdata[i].getContent()) + << "name=\"" << names[schemdata[i].getContent()] << "\", param1=" << (u16)schemdata[i].param1 << ", param2=" << (u16)schemdata[i].param2 << "}," << std::endl; @@ -367,8 +369,7 @@ bool Schematic::serializeToLua(std::ostream *os, bool use_comments) bool Schematic::loadSchematicFromFile(const std::string &filename, - INodeDefManager *ndef, StringMap *replace_names, - NodeResolveMethod resolve_method) + INodeDefManager *ndef, StringMap *replace_names) { std::ifstream is(filename.c_str(), std::ios_base::binary); if (!is.good()) { @@ -392,7 +393,8 @@ bool Schematic::loadSchematicFromFile(const std::string &filename, m_nnlistsizes.push_back(m_nodenames.size() - origsize); - ndef->pendNodeResolve(this, resolve_method); + if (ndef) + ndef->pendNodeResolve(this); return true; } @@ -400,8 +402,33 @@ bool Schematic::loadSchematicFromFile(const std::string &filename, bool Schematic::saveSchematicToFile(const std::string &filename) { + MapNode *orig_schemdata = schemdata; + std::vector ndef_nodenames; + std::vector *names; + + // Only carry out the modification if we know the nodes + // were resolved at this point + if (m_resolve_done) { + names = &ndef_nodenames; + + u32 volume = size.X * size.Y * size.Z; + schemdata = new MapNode[volume]; + for (u32 i = 0; i != volume; i++) + schemdata[i] = orig_schemdata[i]; + + generate_nodelist_and_update_ids(schemdata, volume, names, m_ndef); + } else { // otherwise, use the names we have on hand in the list + names = &m_nodenames; + } + std::ostringstream os(std::ios_base::binary); - serializeToMts(&os); + serializeToMts(&os, *names); + + if (m_resolve_done) { + delete []schemdata; + schemdata = orig_schemdata; + } + return fs::safeWriteToFile(filename, os.str()); } @@ -461,13 +488,13 @@ void Schematic::applyProbabilities(v3s16 p0, } -void build_nnlist_and_update_ids(MapNode *nodes, u32 nodecount, - std::vector *usednodes) +void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount, + std::vector *usednodes, INodeDefManager *ndef) { std::map nodeidmap; content_t numids = 0; - for (u32 i = 0; i != nodecount; i++) { + for (size_t i = 0; i != nodecount; i++) { content_t id; content_t c = nodes[i].getContent(); @@ -476,7 +503,7 @@ void build_nnlist_and_update_ids(MapNode *nodes, u32 nodecount, id = numids; numids++; - usednodes->push_back(c); + usednodes->push_back(ndef->get(c).name); nodeidmap.insert(std::make_pair(c, id)); } else { id = it->second; diff --git a/src/mg_schematic.h b/src/mg_schematic.h index 296e7b104..3f253ad92 100644 --- a/src/mg_schematic.h +++ b/src/mg_schematic.h @@ -100,20 +100,20 @@ public: void updateContentIds(); void blitToVManip(v3s16 p, MMVManip *vm, - Rotation rot, bool force_placement, INodeDefManager *ndef); + Rotation rot, bool force_placement); bool loadSchematicFromFile(const std::string &filename, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method); + StringMap *replace_names); bool saveSchematicToFile(const std::string &filename); bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2); - bool deserializeFromMts(std::istream *is, std::vector *names_out); - bool serializeToMts(std::ostream *os); - bool serializeToLua(std::ostream *os, bool use_comments); - + bool deserializeFromMts(std::istream *is, std::vector *names); + bool serializeToMts(std::ostream *os, const std::vector &names); + bool serializeToLua(std::ostream *os, const std::vector &names, + bool use_comments); void placeStructure(Map *map, v3s16 p, u32 flags, - Rotation rot, bool force_placement, INodeDefManager *nef); + Rotation rot, bool force_placement); void applyProbabilities(v3s16 p0, std::vector > *plist, std::vector > *splist); @@ -140,8 +140,7 @@ private: IGameDef *m_gamedef; }; -void build_nnlist_and_update_ids(MapNode *nodes, u32 nodecount, - std::vector *usednodes); - +void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount, + std::vector *usednodes, INodeDefManager *ndef); #endif diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 2442799c7..ac432d196 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -406,7 +406,7 @@ public: inline virtual bool getNodeRegistrationStatus() const; inline virtual void setNodeRegistrationStatus(bool completed); - virtual void pendNodeResolve(NodeResolver *nr, NodeResolveMethod how); + virtual void pendNodeResolve(NodeResolver *nr); virtual bool cancelNodeResolveCallback(NodeResolver *nr); virtual void runNodeResolveCallbacks(); virtual void resetNodeResolveState(); @@ -1294,23 +1294,13 @@ inline void CNodeDefManager::setNodeRegistrationStatus(bool completed) } -void CNodeDefManager::pendNodeResolve(NodeResolver *nr, NodeResolveMethod how) +void CNodeDefManager::pendNodeResolve(NodeResolver *nr) { nr->m_ndef = this; - - switch (how) { - case NODE_RESOLVE_NONE: - break; - case NODE_RESOLVE_DIRECT: + if (m_node_registration_complete) nr->nodeResolveInternal(); - break; - case NODE_RESOLVE_DEFERRED: - if (m_node_registration_complete) - nr->nodeResolveInternal(); - else - m_pending_resolve_callbacks.push_back(nr); - break; - } + else + m_pending_resolve_callbacks.push_back(nr); } @@ -1385,19 +1375,6 @@ void NodeResolver::nodeResolveInternal() } -const std::string &NodeResolver::getNodeName(content_t c) const -{ - if (c < m_nodenames.size()) - return m_nodenames[c]; - - if (m_ndef) - return m_ndef->get(c).name; - - static const std::string unknown_str("unknown"); - return unknown_str; -} - - bool NodeResolver::getIdFromNrBacklog(content_t *result_out, const std::string &node_alt, content_t c_fallback) { diff --git a/src/nodedef.h b/src/nodedef.h index 42b345059..efd7f0923 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -282,12 +282,6 @@ struct ContentFeatures } }; -enum NodeResolveMethod { - NODE_RESOLVE_NONE, - NODE_RESOLVE_DIRECT, - NODE_RESOLVE_DEFERRED, -}; - class INodeDefManager { public: INodeDefManager(){} @@ -306,7 +300,7 @@ public: virtual bool getNodeRegistrationStatus() const=0; - virtual void pendNodeResolve(NodeResolver *nr, NodeResolveMethod how)=0; + virtual void pendNodeResolve(NodeResolver *nr)=0; virtual bool cancelNodeResolveCallback(NodeResolver *nr)=0; }; @@ -353,7 +347,7 @@ public: virtual bool getNodeRegistrationStatus() const=0; virtual void setNodeRegistrationStatus(bool completed)=0; - virtual void pendNodeResolve(NodeResolver *nr, NodeResolveMethod how)=0; + virtual void pendNodeResolve(NodeResolver *nr)=0; virtual bool cancelNodeResolveCallback(NodeResolver *nr)=0; virtual void runNodeResolveCallbacks()=0; virtual void resetNodeResolveState()=0; @@ -371,7 +365,6 @@ public: const std::string &node_alt, content_t c_fallback); bool getIdsFromNrBacklog(std::vector *result_out, bool all_required=false, content_t c_fallback=CONTENT_IGNORE); - const std::string &getNodeName(content_t c) const; void nodeResolveInternal(); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 7057344ab..d99f40ccd 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -92,14 +92,6 @@ struct EnumString ModApiMapgen::es_SchematicFormatType[] = {0, NULL}, }; -struct EnumString ModApiMapgen::es_NodeResolveMethod[] = -{ - {NODE_RESOLVE_NONE, "none"}, - {NODE_RESOLVE_DIRECT, "direct"}, - {NODE_RESOLVE_DEFERRED, "deferred"}, - {0, NULL}, -}; - ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr); Biome *get_or_load_biome(lua_State *L, int index, @@ -109,14 +101,11 @@ size_t get_biome_list(lua_State *L, int index, BiomeManager *biomemgr, std::set *biome_id_list); Schematic *get_or_load_schematic(lua_State *L, int index, - SchematicManager *schemmgr, StringMap *replace_names, - bool register_on_load=true, - NodeResolveMethod resolve_method=NODE_RESOLVE_DEFERRED); + SchematicManager *schemmgr, StringMap *replace_names); Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method); + StringMap *replace_names); Schematic *load_schematic_from_def(lua_State *L, int index, - INodeDefManager *ndef, StringMap *replace_names, - NodeResolveMethod resolve_method); + INodeDefManager *ndef, StringMap *replace_names); bool read_schematic_def(lua_State *L, int index, Schematic *schem, std::vector *names); @@ -145,9 +134,7 @@ ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr) /////////////////////////////////////////////////////////////////////////////// Schematic *get_or_load_schematic(lua_State *L, int index, - SchematicManager *schemmgr, StringMap *replace_names, - bool register_on_load, - NodeResolveMethod resolve_method) + SchematicManager *schemmgr, StringMap *replace_names) { if (index < 0) index = lua_gettop(L) + 1 + index; @@ -157,13 +144,10 @@ Schematic *get_or_load_schematic(lua_State *L, int index, return schem; schem = load_schematic(L, index, schemmgr->getNodeDef(), - replace_names, resolve_method); + replace_names); if (!schem) return NULL; - if (!register_on_load) - return schem; - if (schemmgr->add(schem) == OBJDEF_INVALID_HANDLE) { delete schem; return NULL; @@ -174,7 +158,7 @@ Schematic *get_or_load_schematic(lua_State *L, int index, Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method) + StringMap *replace_names) { if (index < 0) index = lua_gettop(L) + 1 + index; @@ -183,7 +167,7 @@ Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, if (lua_istable(L, index)) { schem = load_schematic_from_def(L, index, ndef, - replace_names, resolve_method); + replace_names); if (!schem) { delete schem; return NULL; @@ -198,7 +182,7 @@ Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, filepath = ModApiBase::getCurrentModPath(L) + DIR_DELIM + filepath; if (!schem->loadSchematicFromFile(filepath, ndef, - replace_names, resolve_method)) { + replace_names)) { delete schem; return NULL; } @@ -208,8 +192,8 @@ Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, } -Schematic *load_schematic_from_def(lua_State *L, int index, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method) +Schematic *load_schematic_from_def(lua_State *L, int index, + INodeDefManager *ndef, StringMap *replace_names) { Schematic *schem = SchematicManager::create(SCHEMATIC_NORMAL); @@ -230,7 +214,7 @@ Schematic *load_schematic_from_def(lua_State *L, int index, INodeDefManager *nde } } - ndef->pendNodeResolve(schem, resolve_method); + ndef->pendNodeResolve(schem); return schem; } @@ -406,7 +390,7 @@ Biome *read_biome_def(lua_State *L, int index, INodeDefManager *ndef) nn.push_back(getstringfield_default(L, index, "node_water", "")); nn.push_back(getstringfield_default(L, index, "node_river_water", "")); nn.push_back(getstringfield_default(L, index, "node_dust", "")); - ndef->pendNodeResolve(b, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(b); return b; } @@ -770,7 +754,7 @@ int ModApiMapgen::l_register_decoration(lua_State *L) return 0; } - ndef->pendNodeResolve(deco, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(deco); ObjDefHandle handle = decomgr->add(deco); if (handle == OBJDEF_INVALID_HANDLE) { @@ -928,7 +912,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) size_t nnames = getstringlistfield(L, index, "wherein", &ore->m_nodenames); ore->m_nnlistsizes.push_back(nnames); - ndef->pendNodeResolve(ore, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(ore); lua_pushinteger(L, handle); return 1; @@ -945,7 +929,7 @@ int ModApiMapgen::l_register_schematic(lua_State *L) read_schematic_replacements(L, 2, &replace_names); Schematic *schem = load_schematic(L, 1, schemmgr->getNodeDef(), - &replace_names, NODE_RESOLVE_DEFERRED); + &replace_names); if (!schem) return 0; @@ -1138,8 +1122,7 @@ int ModApiMapgen::l_place_schematic(lua_State *L) return 0; } - schem->placeStructure(map, p, 0, (Rotation)rot, force_placement, - schemmgr->getNodeDef()); + schem->placeStructure(map, p, 0, (Rotation)rot, force_placement); lua_pushboolean(L, true); return 1; @@ -1151,14 +1134,15 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; //// Read options - NodeResolveMethod resolve_method = (NodeResolveMethod)getenumfield(L, 3, - "node_resolve_method", es_NodeResolveMethod, NODE_RESOLVE_NONE); - bool register_on_load = getboolfield_default(L, 3, "register_on_load", false); bool use_comments = getboolfield_default(L, 3, "use_lua_comments", false); - //// Read schematic - Schematic *schem = get_or_load_schematic(L, 1, schemmgr, NULL, - register_on_load, resolve_method); + //// Get schematic + bool was_loaded = false; + Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr); + if (!schem) { + schem = load_schematic(L, 1, NULL, NULL); + was_loaded = true; + } if (!schem) { errorstream << "serialize_schematic: failed to get schematic" << std::endl; return 0; @@ -1174,15 +1158,18 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) std::ostringstream os(std::ios_base::binary); switch (schem_format) { case SCHEM_FMT_MTS: - schem->serializeToMts(&os); + schem->serializeToMts(&os, schem->m_nodenames); break; case SCHEM_FMT_LUA: - schem->serializeToLua(&os, use_comments); + schem->serializeToLua(&os, schem->m_nodenames, use_comments); break; default: return 0; } + if (was_loaded) + delete schem; + std::string ser = os.str(); lua_pushlstring(L, ser.c_str(), ser.length()); return 1; diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp index bd6e6f5ac..55acece6a 100644 --- a/src/unittest/test_noderesolver.cpp +++ b/src/unittest/test_noderesolver.cpp @@ -50,12 +50,6 @@ void TestNodeResolver::runTests(IGameDef *gamedef) ndef->resetNodeResolveState(); TEST(testPendingResolveCancellation, ndef); - - ndef->resetNodeResolveState(); - TEST(testDirectResolveMethod, ndef); - - ndef->resetNodeResolveState(); - TEST(testNoneResolveMethod, ndef); } class Foobar : public NodeResolver { @@ -136,7 +130,7 @@ void TestNodeResolver::testNodeResolving(IWritableNodeDefManager *ndef) foobar.m_nodenames.push_back("default:desert_stone"); foobar.m_nodenames.push_back("default:shnitzle"); - ndef->pendNodeResolve(&foobar, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(&foobar); UASSERT(foobar.m_ndef == ndef); ndef->setNodeRegistrationStatus(true); @@ -193,14 +187,14 @@ void TestNodeResolver::testPendingResolveCancellation(IWritableNodeDefManager *n foobaz1.test_content2 = 5678; foobaz1.m_nodenames.push_back("default:dirt_with_grass"); foobaz1.m_nodenames.push_back("default:abloobloobloo"); - ndef->pendNodeResolve(&foobaz1, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(&foobaz1); Foobaz foobaz2; foobaz2.test_content1 = 1234; foobaz2.test_content2 = 5678; foobaz2.m_nodenames.push_back("default:dirt_with_grass"); foobaz2.m_nodenames.push_back("default:abloobloobloo"); - ndef->pendNodeResolve(&foobaz2, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(&foobaz2); ndef->cancelNodeResolveCallback(&foobaz1); @@ -212,37 +206,3 @@ void TestNodeResolver::testPendingResolveCancellation(IWritableNodeDefManager *n UASSERT(foobaz2.test_content1 == t_CONTENT_GRASS); UASSERT(foobaz2.test_content2 == CONTENT_IGNORE); } - - -void TestNodeResolver::testDirectResolveMethod(IWritableNodeDefManager *ndef) -{ - Foobaz foobaz; - - foobaz.m_nodenames.push_back("default:dirt_with_grass"); - foobaz.m_nodenames.push_back("default:abloobloobloo"); - - UASSERTEQ(std::string, foobaz.getNodeName(1), "default:abloobloobloo"); - - ndef->pendNodeResolve(&foobaz, NODE_RESOLVE_DIRECT); - - UASSERTEQ(content_t, foobaz.test_content1, t_CONTENT_GRASS); - UASSERTEQ(content_t, foobaz.test_content2, CONTENT_IGNORE); - - // We expect this to be *different* because the resolution of this node had - // failed. The internal nodename buffer is cleared and lookups should now - // use the nodedef manager. - UASSERT(foobaz.getNodeName(1) != "default:abloobloobloo"); -} - - -void TestNodeResolver::testNoneResolveMethod(IWritableNodeDefManager *ndef) -{ - Foobaz foobaz; - - foobaz.m_nodenames.push_back("default:dirt_with_grass"); - foobaz.m_nodenames.push_back("default:abloobloobloo"); - - ndef->pendNodeResolve(&foobaz, NODE_RESOLVE_NONE); - - UASSERTEQ(std::string, foobaz.getNodeName(1), "default:abloobloobloo"); -} From b246812455737b2d0337dec905ba0256adefd105 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 7 May 2015 02:54:30 -0400 Subject: [PATCH 024/670] Schematics: Add indent-with-space option for schematic Lua table serialization --- doc/lua_api.txt | 4 +++- src/mg_schematic.cpp | 23 ++++++++++++++--------- src/mg_schematic.h | 2 +- src/script/lua_api/l_mapgen.cpp | 6 ++++-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 6d1e7e705..cb8b8848f 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2178,8 +2178,10 @@ These functions return the leftover itemstack. * "mts" - a string containing the binary MTS data used in the MTS file format * "lua" - a string containing Lua code representing the schematic in table format * `options` is a table containing the following optional parameters: - * If `use_comments` is true and `format` is "lua", the Lua code generated will have (X, Z) + * If `lua_use_comments` is true and `format` is "lua", the Lua code generated will have (X, Z) * position comments for every X row generated in the schematic data for easier reading. + * If `lua_num_indent_spaces` is a nonzero number and `format` is "lua", the Lua code generated + * will use that number of spaces as indentation instead of a tab character. ### Misc. * `minetest.get_connected_players()`: returns list of `ObjectRefs` diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index 3100637ae..bea08ef12 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -309,14 +309,18 @@ bool Schematic::serializeToMts(std::ostream *os, bool Schematic::serializeToLua(std::ostream *os, - const std::vector &names, bool use_comments) + const std::vector &names, bool use_comments, u32 indent_spaces) { std::ostream &ss = *os; + std::string indent("\t"); + if (indent_spaces > 0) + indent.assign(indent_spaces, ' '); + //// Write header { ss << "schematic = {" << std::endl; - ss << "\tsize = " + ss << indent << "size = " << "{x=" << size.X << ", y=" << size.Y << ", z=" << size.Z @@ -325,33 +329,34 @@ bool Schematic::serializeToLua(std::ostream *os, //// Write y-slice probabilities { - ss << "\tyslice_prob = {" << std::endl; + ss << indent << "yslice_prob = {" << std::endl; for (u16 y = 0; y != size.Y; y++) { - ss << "\t\t{" + ss << indent << indent << "{" << "ypos=" << y << ", prob=" << (u16)slice_probs[y] << "}," << std::endl; } - ss << "\t}," << std::endl; + ss << indent << "}," << std::endl; } //// Write node data { - ss << "\tdata = {" << std::endl; + ss << indent << "data = {" << std::endl; u32 i = 0; for (u16 z = 0; z != size.Z; z++) for (u16 y = 0; y != size.Y; y++) { if (use_comments) { ss << std::endl - << "\t\t-- z=" << z + << indent << indent + << "-- z=" << z << ", y=" << y << std::endl; } for (u16 x = 0; x != size.X; x++, i++) { - ss << "\t\t{" + ss << indent << indent << "{" << "name=\"" << names[schemdata[i].getContent()] << "\", param1=" << (u16)schemdata[i].param1 << ", param2=" << (u16)schemdata[i].param2 @@ -359,7 +364,7 @@ bool Schematic::serializeToLua(std::ostream *os, } } - ss << "\t}," << std::endl; + ss << indent << "}," << std::endl; } ss << "}" << std::endl; diff --git a/src/mg_schematic.h b/src/mg_schematic.h index 3f253ad92..5b546f879 100644 --- a/src/mg_schematic.h +++ b/src/mg_schematic.h @@ -110,7 +110,7 @@ public: bool deserializeFromMts(std::istream *is, std::vector *names); bool serializeToMts(std::ostream *os, const std::vector &names); bool serializeToLua(std::ostream *os, const std::vector &names, - bool use_comments); + bool use_comments, u32 indent_spaces); void placeStructure(Map *map, v3s16 p, u32 flags, Rotation rot, bool force_placement); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index d99f40ccd..7e9c07939 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -1134,7 +1134,8 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; //// Read options - bool use_comments = getboolfield_default(L, 3, "use_lua_comments", false); + bool use_comments = getboolfield_default(L, 3, "lua_use_comments", false); + u32 indent_spaces = getintfield_default(L, 3, "lua_num_indent_spaces", 0); //// Get schematic bool was_loaded = false; @@ -1161,7 +1162,8 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) schem->serializeToMts(&os, schem->m_nodenames); break; case SCHEM_FMT_LUA: - schem->serializeToLua(&os, schem->m_nodenames, use_comments); + schem->serializeToLua(&os, schem->m_nodenames, + use_comments, indent_spaces); break; default: return 0; From e17c6ba2cdab2ec753646ba9984716c5a88ad0a0 Mon Sep 17 00:00:00 2001 From: Kevin Ott Date: Thu, 7 May 2015 02:50:22 -0400 Subject: [PATCH 025/670] Remove duplicate lua_getfield() in c_converter.cpp Fixes #2678 --- src/script/common/c_converter.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 027df4dbf..6bf48db0d 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -105,7 +105,6 @@ v2f read_v2f(lua_State *L, int index) v2f p; CHECK_POS_TAB(index); lua_getfield(L, index, "x"); - lua_getfield(L, index, "x"); p.X = lua_tonumber(L, -1); lua_pop(L, 1); lua_getfield(L, index, "y"); From 77e4a467f019459572d14e32a6187f43aee31b3a Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 8 May 2015 00:53:12 +0100 Subject: [PATCH 026/670] Conf.example: Update recommended maximum cloud radius to 26 --- minetest.conf.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minetest.conf.example b/minetest.conf.example index 2475235a2..3d67afed5 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -143,7 +143,7 @@ #enable_clouds = true #cloud_height = 120 # Radius of cloud area stated in number of 64 node cloud squares. -# Values > 22 will start to produce clipping of the cloud area corners. +# Values larger than 26 will start to produce sharp cutoffs at cloud area corners. #cloud_radius = 12 #enable_3d_clouds = true # Use a cloud animation for the main menu background From 0e64fc45b909b50dcd7551e4b9492517fbaee40e Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 00:03:41 -0400 Subject: [PATCH 027/670] Fix missing Y component assignment in check_v3f --- src/script/common/c_converter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 6bf48db0d..157db3b7d 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -154,7 +154,7 @@ v3f check_v3f(lua_State *L, int index) lua_pop(L, 1); lua_getfield(L, index, "y"); CHECK_POS_COORD("y"); - pos.Z = lua_tonumber(L, -1); + pos.Y = lua_tonumber(L, -1); lua_pop(L, 1); lua_getfield(L, index, "z"); CHECK_POS_COORD("z"); From 33c11415bf9f05192c104c4bb38f579824addfa5 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 8 May 2015 06:51:03 +0200 Subject: [PATCH 028/670] Gracefully handle PacketErrors --- src/server.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 921dd14de..7289dc905 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1227,11 +1227,14 @@ void Server::ProcessData(NetworkPacket *pkt) } handleCommand(pkt); - } - catch(SendFailedException &e) { + } catch (SendFailedException &e) { errorstream << "Server::ProcessData(): SendFailedException: " << "what=" << e.what() << std::endl; + } catch (PacketError &e) { + actionstream << "Server::ProcessData(): PacketError: " + << "what=" << e.what() + << std::endl; } } From 2dba29ebf20e95068872b758a9c16daeb4c74440 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 00:05:08 -0400 Subject: [PATCH 029/670] Tests: Add schematic unittests Improve schematic file-saving interface Add ability to create temporary test files --- build/android/jni/Android.mk | 1 + src/mg_schematic.cpp | 28 ++-- src/mg_schematic.h | 27 ++-- src/script/lua_api/l_mapgen.cpp | 7 +- src/unittest/CMakeLists.txt | 1 + src/unittest/test.cpp | 26 ++++ src/unittest/test.h | 6 + src/unittest/test_schematic.cpp | 265 ++++++++++++++++++++++++++++++++ 8 files changed, 329 insertions(+), 32 deletions(-) create mode 100644 src/unittest/test_schematic.cpp diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 17c6fa7dd..722efa42b 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -224,6 +224,7 @@ LOCAL_SRC_FILES := \ 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 \ diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index bea08ef12..33f82a74c 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -94,8 +94,7 @@ void Schematic::resolveNodeNames() } -void Schematic::blitToVManip(v3s16 p, MMVManip *vm, - Rotation rot, bool force_placement) +void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_place) { sanity_check(m_ndef != NULL); @@ -151,7 +150,7 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, if (schemdata[i].param1 == MTSCHEM_PROB_NEVER) continue; - if (!force_placement) { + if (!force_place) { content_t c = vm->m_data[vi].getContent(); if (c != CONTENT_AIR && c != CONTENT_IGNORE) continue; @@ -174,7 +173,7 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, void Schematic::placeStructure(Map *map, v3s16 p, u32 flags, - Rotation rot, bool force_placement) + Rotation rot, bool force_place) { assert(schemdata != NULL); // Pre-condition sanity_check(m_ndef != NULL); @@ -198,7 +197,7 @@ void Schematic::placeStructure(Map *map, v3s16 p, u32 flags, v3s16 bp2 = getNodeBlockPos(p + s - v3s16(1,1,1)); vm->initialEmerge(bp1, bp2); - blitToVManip(p, vm, rot, force_placement); + blitToVManip(p, vm, rot, force_place); std::map lighting_modified_blocks; std::map modified_blocks; @@ -405,15 +404,17 @@ bool Schematic::loadSchematicFromFile(const std::string &filename, } -bool Schematic::saveSchematicToFile(const std::string &filename) +bool Schematic::saveSchematicToFile(const std::string &filename, + INodeDefManager *ndef) { MapNode *orig_schemdata = schemdata; std::vector ndef_nodenames; std::vector *names; - // Only carry out the modification if we know the nodes - // were resolved at this point - if (m_resolve_done) { + if (m_resolve_done && ndef == NULL) + ndef = m_ndef; + + if (ndef) { names = &ndef_nodenames; u32 volume = size.X * size.Y * size.Z; @@ -421,19 +422,22 @@ bool Schematic::saveSchematicToFile(const std::string &filename) for (u32 i = 0; i != volume; i++) schemdata[i] = orig_schemdata[i]; - generate_nodelist_and_update_ids(schemdata, volume, names, m_ndef); + generate_nodelist_and_update_ids(schemdata, volume, names, ndef); } else { // otherwise, use the names we have on hand in the list names = &m_nodenames; } std::ostringstream os(std::ios_base::binary); - serializeToMts(&os, *names); + bool status = serializeToMts(&os, *names); - if (m_resolve_done) { + if (ndef) { delete []schemdata; schemdata = orig_schemdata; } + if (!status) + return false; + return fs::safeWriteToFile(filename, os.str()); } diff --git a/src/mg_schematic.h b/src/mg_schematic.h index 5b546f879..3d3e328d3 100644 --- a/src/mg_schematic.h +++ b/src/mg_schematic.h @@ -85,26 +85,14 @@ enum SchematicFormatType { class Schematic : public ObjDef, public NodeResolver { public: - std::vector c_nodes; - - u32 flags; - v3s16 size; - MapNode *schemdata; - u8 *slice_probs; - Schematic(); virtual ~Schematic(); virtual void resolveNodeNames(); - void updateContentIds(); - - void blitToVManip(v3s16 p, MMVManip *vm, - Rotation rot, bool force_placement); - bool loadSchematicFromFile(const std::string &filename, INodeDefManager *ndef, - StringMap *replace_names); - bool saveSchematicToFile(const std::string &filename); + StringMap *replace_names=NULL); + bool saveSchematicToFile(const std::string &filename, INodeDefManager *ndef); bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2); bool deserializeFromMts(std::istream *is, std::vector *names); @@ -112,11 +100,18 @@ public: bool serializeToLua(std::ostream *os, const std::vector &names, bool use_comments, u32 indent_spaces); - void placeStructure(Map *map, v3s16 p, u32 flags, - Rotation rot, bool force_placement); + void blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_place); + void placeStructure(Map *map, v3s16 p, u32 flags, Rotation rot, bool force_place); + void applyProbabilities(v3s16 p0, std::vector > *plist, std::vector > *splist); + + std::vector c_nodes; + u32 flags; + v3s16 size; + MapNode *schemdata; + u8 *slice_probs; }; class SchematicManager : public ObjDefManager { diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 7e9c07939..5422447ed 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -1031,10 +1031,9 @@ int ModApiMapgen::l_generate_decorations(lua_State *L) // create_schematic(p1, p2, probability_list, filename, y_slice_prob_list) int ModApiMapgen::l_create_schematic(lua_State *L) { - Schematic schem; - schem.m_ndef = getServer(L)->getNodeDefManager(); - + INodeDefManager *ndef = getServer(L)->getNodeDefManager(); Map *map = &(getEnv(L)->getMap()); + Schematic schem; v3s16 p1 = check_v3s16(L, 1); v3s16 p2 = check_v3s16(L, 2); @@ -1081,7 +1080,7 @@ int ModApiMapgen::l_create_schematic(lua_State *L) schem.applyProbabilities(p1, &prob_list, &slice_prob_list); - schem.saveSchematicToFile(filename); + schem.saveSchematicToFile(filename, ndef); actionstream << "create_schematic: saved schematic file '" << filename << "'." << std::endl; diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index 6ec5eaea5..dcc68f9c8 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -12,6 +12,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_objdef.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_profiler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_random.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_schematic.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_serialization.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_socket.cpp diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index 57843da5e..d0ffb423f 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -276,9 +276,35 @@ bool TestBase::testModule(IGameDef *gamedef) << " failures / " << num_tests_run << " tests) - " << tdiff << "ms" << std::endl; + if (!m_test_dir.empty()) + fs::RecursiveDelete(m_test_dir); + return num_tests_failed == 0; } +std::string TestBase::getTestTempDirectory() +{ + if (!m_test_dir.empty()) + return m_test_dir; + + char buf[32]; + snprintf(buf, sizeof(buf), "%08X", myrand()); + + m_test_dir = fs::TempPath() + DIR_DELIM "mttest_" + buf; + if (!fs::CreateDir(m_test_dir)) + throw TestFailedException(); + + return m_test_dir; +} + +std::string TestBase::getTestTempFile() +{ + char buf[32]; + snprintf(buf, sizeof(buf), "%08X", myrand()); + + return getTestTempDirectory() + DIR_DELIM + buf + ".tmp"; +} + /* NOTE: These tests became non-working then NodeContainer was removed. diff --git a/src/unittest/test.h b/src/unittest/test.h index 8219e30fc..e1f1721f9 100644 --- a/src/unittest/test.h +++ b/src/unittest/test.h @@ -102,11 +102,17 @@ class IGameDef; class TestBase { public: bool testModule(IGameDef *gamedef); + std::string getTestTempDirectory(); + std::string getTestTempFile(); + virtual void runTests(IGameDef *gamedef) = 0; virtual const char *getName() = 0; u32 num_tests_failed; u32 num_tests_run; + +private: + std::string m_test_dir; }; class TestManager { diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp new file mode 100644 index 000000000..c9e970459 --- /dev/null +++ b/src/unittest/test_schematic.cpp @@ -0,0 +1,265 @@ + /* +Minetest +Copyright (C) 2010-2014 kwolekr, Ryan Kwolek + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" + +#include "mg_schematic.h" +#include "gamedef.h" +#include "nodedef.h" + +class TestSchematic : public TestBase { +public: + TestSchematic() { TestManager::registerTestModule(this); } + const char *getName() { return "TestSchematic"; } + + void runTests(IGameDef *gamedef); + + void testMtsSerializeDeserialize(INodeDefManager *ndef); + void testLuaTableSerialize(INodeDefManager *ndef); + void testFileSerializeDeserialize(INodeDefManager *ndef); + + static const content_t test_schem_data[7 * 6 * 4]; + static const content_t test_schem_data2[3 * 3 * 3]; + static const char *expected_lua_output; +}; + +static TestSchematic g_test_instance; + +void TestSchematic::runTests(IGameDef *gamedef) +{ + IWritableNodeDefManager *ndef = + (IWritableNodeDefManager *)gamedef->getNodeDefManager(); + + ndef->setNodeRegistrationStatus(true); + + TEST(testMtsSerializeDeserialize, ndef); + TEST(testLuaTableSerialize, ndef); + TEST(testFileSerializeDeserialize, ndef); + + ndef->resetNodeResolveState(); +} + +//////////////////////////////////////////////////////////////////////////////// + +void TestSchematic::testMtsSerializeDeserialize(INodeDefManager *ndef) +{ + static const v3s16 size(7, 6, 4); + static const u32 volume = size.X * size.Y * size.Z; + + std::stringstream ss(std::ios_base::binary | + std::ios_base::in | std::ios_base::out); + + std::vector names; + names.push_back("foo"); + names.push_back("bar"); + names.push_back("baz"); + names.push_back("qux"); + + Schematic schem, schem2; + + schem.flags = 0; + schem.size = size; + schem.schemdata = new MapNode[volume]; + schem.slice_probs = new u8[size.Y]; + for (size_t i = 0; i != volume; i++) + schem.schemdata[i] = MapNode(test_schem_data[i], MTSCHEM_PROB_ALWAYS, 0); + for (size_t y = 0; y != size.Y; y++) + schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; + + UASSERT(schem.serializeToMts(&ss, names)); + + ss.seekg(0); + names.clear(); + + UASSERT(schem2.deserializeFromMts(&ss, &names)); + + UASSERTEQ(size_t, names.size(), 4); + UASSERTEQ(std::string, names[0], "foo"); + UASSERTEQ(std::string, names[1], "bar"); + UASSERTEQ(std::string, names[2], "baz"); + UASSERTEQ(std::string, names[3], "qux"); + + UASSERT(schem2.size == size); + for (size_t i = 0; i != volume; i++) + UASSERT(schem2.schemdata[i] == schem.schemdata[i]); + for (size_t y = 0; y != size.Y; y++) + UASSERTEQ(u8, schem2.slice_probs[y], schem.slice_probs[y]); +} + + +void TestSchematic::testLuaTableSerialize(INodeDefManager *ndef) +{ + static const v3s16 size(3, 3, 3); + static const u32 volume = size.X * size.Y * size.Z; + + Schematic schem; + + schem.flags = 0; + schem.size = size; + schem.schemdata = new MapNode[volume]; + schem.slice_probs = new u8[size.Y]; + for (size_t i = 0; i != volume; i++) + schem.schemdata[i] = MapNode(test_schem_data2[i], MTSCHEM_PROB_ALWAYS, 0); + for (size_t y = 0; y != size.Y; y++) + schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; + + std::vector names; + names.push_back("air"); + names.push_back("default:lava_source"); + names.push_back("default:glass"); + + std::ostringstream ss(std::ios_base::binary); + + UASSERT(schem.serializeToLua(&ss, names, false, 0)); + UASSERTEQ(std::string, ss.str(), expected_lua_output); +} + + +void TestSchematic::testFileSerializeDeserialize(INodeDefManager *ndef) +{ + static const v3s16 size(3, 3, 3); + static const u32 volume = size.X * size.Y * size.Z; + static const content_t content_map[] = { + CONTENT_AIR, + t_CONTENT_STONE, + t_CONTENT_LAVA, + }; + static const content_t content_map2[] = { + CONTENT_AIR, + t_CONTENT_STONE, + t_CONTENT_WATER, + }; + StringMap replace_names; + replace_names["default:lava"] = "default:water"; + + Schematic schem1, schem2; + + //// Construct the schematic to save + schem1.flags = 0; + schem1.size = size; + schem1.schemdata = new MapNode[volume]; + schem1.slice_probs = new u8[size.Y]; + schem1.slice_probs[0] = 80; + schem1.slice_probs[1] = 160; + schem1.slice_probs[2] = 240; + + for (size_t i = 0; i != volume; i++) { + content_t c = content_map[test_schem_data2[i]]; + schem1.schemdata[i] = MapNode(c, MTSCHEM_PROB_ALWAYS, 0); + } + + std::string temp_file = getTestTempFile(); + UASSERT(schem1.saveSchematicToFile(temp_file, ndef)); + UASSERT(schem2.loadSchematicFromFile(temp_file, ndef, &replace_names)); + + UASSERT(schem2.size == size); + UASSERT(schem2.slice_probs[0] == 80); + UASSERT(schem2.slice_probs[1] == 160); + UASSERT(schem2.slice_probs[2] == 240); + + for (size_t i = 0; i != volume; i++) { + content_t c = content_map2[test_schem_data2[i]]; + UASSERT(schem2.schemdata[i] == MapNode(c, MTSCHEM_PROB_ALWAYS, 0)); + } +} + + +// Should form a cross-shaped-thing...? +const content_t TestSchematic::test_schem_data[7 * 6 * 4] = { + 3, 3, 1, 1, 1, 3, 3, // Y=0, Z=0 + 3, 0, 1, 2, 1, 0, 3, // Y=1, Z=0 + 3, 0, 1, 2, 1, 0, 3, // Y=2, Z=0 + 3, 1, 1, 2, 1, 1, 3, // Y=3, Z=0 + 3, 2, 2, 2, 2, 2, 3, // Y=4, Z=0 + 3, 1, 1, 2, 1, 1, 3, // Y=5, Z=0 + + 0, 0, 1, 1, 1, 0, 0, // Y=0, Z=1 + 0, 0, 1, 2, 1, 0, 0, // Y=1, Z=1 + 0, 0, 1, 2, 1, 0, 0, // Y=2, Z=1 + 1, 1, 1, 2, 1, 1, 1, // Y=3, Z=1 + 1, 2, 2, 2, 2, 2, 1, // Y=4, Z=1 + 1, 1, 1, 2, 1, 1, 1, // Y=5, Z=1 + + 0, 0, 1, 1, 1, 0, 0, // Y=0, Z=2 + 0, 0, 1, 2, 1, 0, 0, // Y=1, Z=2 + 0, 0, 1, 2, 1, 0, 0, // Y=2, Z=2 + 1, 1, 1, 2, 1, 1, 1, // Y=3, Z=2 + 1, 2, 2, 2, 2, 2, 1, // Y=4, Z=2 + 1, 1, 1, 2, 1, 1, 1, // Y=5, Z=2 + + 3, 3, 1, 1, 1, 3, 3, // Y=0, Z=3 + 3, 0, 1, 2, 1, 0, 3, // Y=1, Z=3 + 3, 0, 1, 2, 1, 0, 3, // Y=2, Z=3 + 3, 1, 1, 2, 1, 1, 3, // Y=3, Z=3 + 3, 2, 2, 2, 2, 2, 3, // Y=4, Z=3 + 3, 1, 1, 2, 1, 1, 3, // Y=5, Z=3 +}; + +const content_t TestSchematic::test_schem_data2[3 * 3 * 3] = { + 0, 0, 0, + 0, 2, 0, + 0, 0, 0, + + 0, 2, 0, + 2, 1, 2, + 0, 2, 0, + + 0, 0, 0, + 0, 2, 0, + 0, 0, 0, +}; + +const char *TestSchematic::expected_lua_output = + "schematic = {\n" + "\tsize = {x=3, y=3, z=3},\n" + "\tyslice_prob = {\n" + "\t\t{ypos=0, prob=255},\n" + "\t\t{ypos=1, prob=255},\n" + "\t\t{ypos=2, prob=255},\n" + "\t},\n" + "\tdata = {\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"default:glass\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"default:glass\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"default:glass\", param1=255, param2=0},\n" + "\t\t{name=\"default:lava_source\", param1=255, param2=0},\n" + "\t\t{name=\"default:glass\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"default:glass\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"default:glass\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t},\n" + "}\n"; From f091bbd563dcd477c2c22b9180e776947dc3749b Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 01:21:23 -0400 Subject: [PATCH 030/670] Fix compilation for non-client builds, and fix signed comparison warning --- src/nodedef.h | 1 + src/unittest/test_schematic.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/nodedef.h b/src/nodedef.h index efd7f0923..68f6c8c37 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "util/numeric.h" #include "mapnode.h" #ifndef SERVER #include "client/tile.h" diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp index c9e970459..24bacf6c5 100644 --- a/src/unittest/test_schematic.cpp +++ b/src/unittest/test_schematic.cpp @@ -79,7 +79,7 @@ void TestSchematic::testMtsSerializeDeserialize(INodeDefManager *ndef) schem.slice_probs = new u8[size.Y]; for (size_t i = 0; i != volume; i++) schem.schemdata[i] = MapNode(test_schem_data[i], MTSCHEM_PROB_ALWAYS, 0); - for (size_t y = 0; y != size.Y; y++) + for (s16 y = 0; y != size.Y; y++) schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; UASSERT(schem.serializeToMts(&ss, names)); @@ -116,7 +116,7 @@ void TestSchematic::testLuaTableSerialize(INodeDefManager *ndef) schem.slice_probs = new u8[size.Y]; for (size_t i = 0; i != volume; i++) schem.schemdata[i] = MapNode(test_schem_data2[i], MTSCHEM_PROB_ALWAYS, 0); - for (size_t y = 0; y != size.Y; y++) + for (s16 y = 0; y != size.Y; y++) schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; std::vector names; From 0310123bc920874312968b498828bbd7bb3b3113 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 8 May 2015 07:23:06 +0200 Subject: [PATCH 031/670] Fix release build warning --- src/craftdef.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/craftdef.cpp b/src/craftdef.cpp index 6fc0ae934..8c0e91690 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -67,6 +67,7 @@ static u64 getHashForGrid(CraftHashType type, const std::vector &gr } // invalid CraftHashType assert(false); + return 0; } // Check if input matches recipe From f1ccfd3c3d7d626087f70b8c5798110cd28b248a Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 13:26:01 -0400 Subject: [PATCH 032/670] Replace Wieldmesh::setItem assertion that could be triggered by the server with an error --- src/wieldmesh.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 63c09786b..f12771968 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -357,8 +357,13 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) def.wield_scale * WIELD_SCALE_FACTOR / (BS * f.visual_scale)); } - for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) { - assert(i < 6); + u32 material_count = m_meshnode->getMaterialCount(); + if (material_count >= 6) { + errorstream << "WieldMeshSceneNode::setItem: Invalid material " + "count " << material_count << ", truncating to 6" << std::endl; + material_count = 6; + } + for (u32 i = 0; i < material_count; ++i) { video::SMaterial &material = m_meshnode->getMaterial(i); material.setFlag(video::EMF_BACK_FACE_CULLING, true); material.setFlag(video::EMF_BILINEAR_FILTER, m_bilinear_filter); From ff740a417946abb003426734645f823458eee9f3 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 13:31:03 -0400 Subject: [PATCH 033/670] Ensure that Map::findNodesWithMetadata() reports nodes strictly within the node-granular area --- src/map.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 7f8059cc4..47c66055d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1898,6 +1898,8 @@ std::vector Map::findNodesWithMetadata(v3s16 p1, v3s16 p2) v3s16 bpmin = getNodeBlockPos(p1); v3s16 bpmax = getNodeBlockPos(p2); + VoxelArea area(p1, p2); + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) for (s16 y = bpmin.Y; y <= bpmax.Y; y++) for (s16 x = bpmin.X; x <= bpmax.X; x++) { @@ -1917,8 +1919,13 @@ std::vector Map::findNodesWithMetadata(v3s16 p1, v3s16 p2) v3s16 p_base = blockpos * MAP_BLOCKSIZE; std::vector keys = block->m_node_metadata.getAllKeys(); - for (size_t i = 0; i != keys.size(); i++) - positions_with_meta.push_back(keys[i] + p_base); + for (size_t i = 0; i != keys.size(); i++) { + v3s16 p(keys[i] + p_base); + if (!area.contains(p)) + continue; + + positions_with_meta.push_back(p); + } } return positions_with_meta; From d59e6ad004b64d37ac10dddd61a7b35e7baa1f89 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 23:30:56 -0400 Subject: [PATCH 034/670] Fix typo in WieldMesh::setItem() --- src/wieldmesh.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index f12771968..036b25a90 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -358,7 +358,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) / (BS * f.visual_scale)); } u32 material_count = m_meshnode->getMaterialCount(); - if (material_count >= 6) { + if (material_count > 6) { errorstream << "WieldMeshSceneNode::setItem: Invalid material " "count " << material_count << ", truncating to 6" << std::endl; material_count = 6; From 2b99d904f6b8197931954772b6466d8ee56cafc9 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 9 May 2015 01:38:20 -0400 Subject: [PATCH 035/670] Schematics: Add per-node force placement option --- doc/lua_api.txt | 37 ++++++------ src/mg_schematic.cpp | 54 +++++++++++++----- src/mg_schematic.h | 24 +++++--- src/script/common/c_converter.cpp | 13 +++++ src/script/common/c_converter.h | 2 + src/script/lua_api/l_mapgen.cpp | 57 +++++++++---------- src/unittest/test_schematic.cpp | 95 ++++++++++++++++++------------- 7 files changed, 170 insertions(+), 112 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index cb8b8848f..93387ef0b 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -782,30 +782,27 @@ Schematic specifier -------------------- A schematic specifier identifies a schematic by either a filename to a Minetest Schematic file (`.mts`) or through raw data supplied through Lua, -in the form of a table. This table must specify two fields: +in the form of a table. This table specifies the following fields: -* The `size` field is a 3D vector containing the dimensions of the provided schematic. -* The `data` field is a flat table of MapNodes making up the schematic, - in the order of `[z [y [x]]]`. +* The `size` field is a 3D vector containing the dimensions of the provided schematic. (required) +* The `yslice_prob` field is a table of {ypos, prob} which sets the `ypos`th vertical slice + of the schematic to have a `prob / 256 * 100` chance of occuring. (default: 255) +* The `data` field is a flat table of MapNode tables making up the schematic, + in the order of `[z [y [x]]]`. (required) + Each MapNode table contains: + * `name`: the name of the map node to place (required) + * `prob` (alias `param1`): the probability of this node being placed (default: 255) + * `param2`: the raw param2 value of the node being placed onto the map (default: 0) + * `force_place`: boolean representing if the node should forcibly overwrite any + previous contents (default: false) -**Important**: The default value for `param1` in MapNodes here is `255`, -which represents "always place". - -In the bulk `MapNode` data, `param1`, instead of the typical light values, -instead represents the probability of that node appearing in the structure. - -When passed to `minetest.create_schematic`, probability is an integer value -ranging from `0` to `255`: - -* A probability value of `0` means that node will never appear (0% chance). -* A probability value of `255` means the node will always appear (100% chance). -* If the probability value `p` is greater than `0`, then there is a - `(p / 256 * 100)`% chance that node will appear when the schematic is +About probability values: +* A probability value of `0` or `1` means that node will never appear (0% chance). +* A probability value of `254` or `255` means the node will always appear (100% chance). +* If the probability value `p` is greater than `1`, then there is a + `(p / 256 * 100)` percent chance that node will appear when the schematic is placed on the map. -**Important note**: Node aliases cannot be used for a raw schematic provided - when registering as a decoration. - Schematic attributes -------------------- diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index 33f82a74c..81d849a66 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -133,8 +133,8 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_pla s16 y_map = p.Y; for (s16 y = 0; y != sy; y++) { - if (slice_probs[y] != MTSCHEM_PROB_ALWAYS && - myrand_range(1, 255) > slice_probs[y]) + if ((slice_probs[y] != MTSCHEM_PROB_ALWAYS) && + (slice_probs[y] <= myrand_range(1, MTSCHEM_PROB_ALWAYS))) continue; for (s16 z = 0; z != sz; z++) { @@ -147,17 +147,20 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_pla if (schemdata[i].getContent() == CONTENT_IGNORE) continue; - if (schemdata[i].param1 == MTSCHEM_PROB_NEVER) + u8 placement_prob = schemdata[i].param1 & MTSCHEM_PROB_MASK; + bool force_place_node = schemdata[i].param1 & MTSCHEM_FORCE_PLACE; + + if (placement_prob == MTSCHEM_PROB_NEVER) continue; - if (!force_place) { + if (!force_place && !force_place_node) { content_t c = vm->m_data[vi].getContent(); if (c != CONTENT_AIR && c != CONTENT_IGNORE) continue; } - if (schemdata[i].param1 != MTSCHEM_PROB_ALWAYS && - myrand_range(1, 255) > schemdata[i].param1) + if ((placement_prob != MTSCHEM_PROB_ALWAYS) && + (placement_prob <= myrand_range(1, MTSCHEM_PROB_ALWAYS))) continue; vm->m_data[vi] = schemdata[i]; @@ -225,6 +228,7 @@ bool Schematic::deserializeFromMts(std::istream *is, content_t cignore = CONTENT_IGNORE; bool have_cignore = false; + //// Read signature u32 signature = readU32(ss); if (signature != MTSCHEM_FILE_SIGNATURE) { errorstream << "Schematic::deserializeFromMts: invalid schematic " @@ -232,6 +236,7 @@ bool Schematic::deserializeFromMts(std::istream *is, return false; } + //// Read version u16 version = readU16(ss); if (version > MTSCHEM_FILE_VER_HIGHEST_READ) { errorstream << "Schematic::deserializeFromMts: unsupported schematic " @@ -239,18 +244,21 @@ bool Schematic::deserializeFromMts(std::istream *is, return false; } + //// Read size size = readV3S16(ss); + //// Read Y-slice probability values delete []slice_probs; slice_probs = new u8[size.Y]; for (int y = 0; y != size.Y; y++) - slice_probs[y] = (version >= 3) ? readU8(ss) : MTSCHEM_PROB_ALWAYS; + slice_probs[y] = (version >= 3) ? readU8(ss) : MTSCHEM_PROB_ALWAYS_OLD; + //// Read node names u16 nidmapcount = readU16(ss); for (int i = 0; i != nidmapcount; i++) { std::string name = deSerializeString(ss); - // Instances of "ignore" from ver 1 are converted to air (and instances + // Instances of "ignore" from v1 are converted to air (and instances // are fixed to have MTSCHEM_PROB_NEVER later on). if (name == "ignore") { name = "air"; @@ -261,6 +269,7 @@ bool Schematic::deserializeFromMts(std::istream *is, names->push_back(name); } + //// Read node data size_t nodecount = size.X * size.Y * size.Z; delete []schemdata; @@ -269,8 +278,8 @@ bool Schematic::deserializeFromMts(std::istream *is, MapNode::deSerializeBulk(ss, SER_FMT_VER_HIGHEST_READ, schemdata, nodecount, 2, 2, true); - // fix any probability values for nodes that were ignore - if (version == 1) { + // Fix probability values for nodes that were ignore; removed in v2 + if (version < 2) { for (size_t i = 0; i != nodecount; i++) { if (schemdata[i].param1 == 0) schemdata[i].param1 = MTSCHEM_PROB_ALWAYS; @@ -279,6 +288,14 @@ bool Schematic::deserializeFromMts(std::istream *is, } } + // Fix probability values for probability range truncation introduced in v4 + if (version < 4) { + for (s16 y = 0; y != size.Y; y++) + slice_probs[y] >>= 1; + for (size_t i = 0; i != nodecount; i++) + schemdata[i].param1 >>= 1; + } + return true; } @@ -331,9 +348,11 @@ bool Schematic::serializeToLua(std::ostream *os, ss << indent << "yslice_prob = {" << std::endl; for (u16 y = 0; y != size.Y; y++) { + u8 probability = slice_probs[y] & MTSCHEM_PROB_MASK; + ss << indent << indent << "{" << "ypos=" << y - << ", prob=" << (u16)slice_probs[y] + << ", prob=" << (u16)probability * 2 << "}," << std::endl; } @@ -355,11 +374,18 @@ bool Schematic::serializeToLua(std::ostream *os, } for (u16 x = 0; x != size.X; x++, i++) { + u8 probability = schemdata[i].param1 & MTSCHEM_PROB_MASK; + bool force_place = schemdata[i].param1 & MTSCHEM_FORCE_PLACE; + ss << indent << indent << "{" << "name=\"" << names[schemdata[i].getContent()] - << "\", param1=" << (u16)schemdata[i].param1 - << ", param2=" << (u16)schemdata[i].param2 - << "}," << std::endl; + << "\", prob=" << (u16)probability * 2 + << ", param2=" << (u16)schemdata[i].param2; + + if (force_place) + ss << ", force_place=true"; + + ss << "}," << std::endl; } } diff --git a/src/mg_schematic.h b/src/mg_schematic.h index 3d3e328d3..5c732648e 100644 --- a/src/mg_schematic.h +++ b/src/mg_schematic.h @@ -36,7 +36,7 @@ class IGameDef; All values are stored in big-endian byte order. [u32] signature: 'MTSM' - [u16] version: 3 + [u16] version: 4 [u16] size X [u16] size Y [u16] size Z @@ -51,7 +51,9 @@ class IGameDef; For each node in schematic: (for z, y, x) [u16] content For each node in schematic: - [u8] probability of occurance (param1) + [u8] param1 + bit 0-6: probability + bit 7: specific node force placement For each node in schematic: [u8] param2 } @@ -60,17 +62,21 @@ class IGameDef; 1 - Initial version 2 - Fixed messy never/always place; 0 probability is now never, 0xFF is always 3 - Added y-slice probabilities; this allows for variable height structures + 4 - Compressed range of node occurence prob., added per-node force placement bit */ -/////////////////// Schematic flags -#define SCHEM_CIDS_UPDATED 0x08 - +//// Schematic constants #define MTSCHEM_FILE_SIGNATURE 0x4d54534d // 'MTSM' -#define MTSCHEM_FILE_VER_HIGHEST_READ 3 -#define MTSCHEM_FILE_VER_HIGHEST_WRITE 3 +#define MTSCHEM_FILE_VER_HIGHEST_READ 4 +#define MTSCHEM_FILE_VER_HIGHEST_WRITE 4 -#define MTSCHEM_PROB_NEVER 0x00 -#define MTSCHEM_PROB_ALWAYS 0xFF +#define MTSCHEM_PROB_MASK 0x7F + +#define MTSCHEM_PROB_NEVER 0x00 +#define MTSCHEM_PROB_ALWAYS 0x7F +#define MTSCHEM_PROB_ALWAYS_OLD 0xFF + +#define MTSCHEM_FORCE_PLACE 0x80 enum SchematicType { diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 157db3b7d..fc489ea95 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -331,6 +331,19 @@ bool getintfield(lua_State *L, int table, return got; } +bool getintfield(lua_State *L, int table, + const char *fieldname, u8 &result) +{ + lua_getfield(L, table, fieldname); + bool got = false; + if(lua_isnumber(L, -1)){ + result = lua_tonumber(L, -1); + got = true; + } + lua_pop(L, 1); + return got; +} + bool getintfield(lua_State *L, int table, const char *fieldname, u16 &result) { diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index 1d5be6971..0847f47c9 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -53,6 +53,8 @@ size_t getstringlistfield(lua_State *L, int table, std::vector *result); bool getintfield(lua_State *L, int table, const char *fieldname, int &result); +bool getintfield(lua_State *L, int table, + const char *fieldname, u8 &result); bool getintfield(lua_State *L, int table, const char *fieldname, u16 &result); bool getintfield(lua_State *L, int table, diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 5422447ed..3cb52eab4 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -237,36 +237,32 @@ bool read_schematic_def(lua_State *L, int index, lua_getfield(L, index, "data"); luaL_checktype(L, -1, LUA_TTABLE); - int numnodes = size.X * size.Y * size.Z; + u32 numnodes = size.X * size.Y * size.Z; schem->schemdata = new MapNode[numnodes]; - int i = 0; size_t names_base = names->size(); std::map name_id_map; - lua_pushnil(L); - while (lua_next(L, -2)) { - if (i >= numnodes) { - i++; - lua_pop(L, 1); + u32 i = 0; + for (lua_pushnil(L); lua_next(L, -2); i++, lua_pop(L, 1)) { + if (i >= numnodes) continue; - } - // same as readnode, except param1 default is MTSCHEM_PROB_CONST - lua_getfield(L, -1, "name"); - std::string name = luaL_checkstring(L, -1); - lua_pop(L, 1); + //// Read name + std::string name; + if (!getstringfield(L, -1, "name", name)) + throw LuaError("Schematic data definition with missing name field"); + //// Read param1/prob u8 param1; - lua_getfield(L, -1, "param1"); - param1 = !lua_isnil(L, -1) ? lua_tonumber(L, -1) : MTSCHEM_PROB_ALWAYS; - lua_pop(L, 1); + if (!getintfield(L, -1, "param1", param1) && + !getintfield(L, -1, "prob", param1)) + param1 = MTSCHEM_PROB_ALWAYS_OLD; - u8 param2; - lua_getfield(L, -1, "param2"); - param2 = !lua_isnil(L, -1) ? lua_tonumber(L, -1) : 0; - lua_pop(L, 1); + //// Read param2 + u8 param2 = getintfield_default(L, -1, "param2", 0); + //// Find or add new nodename-to-ID mapping std::map::iterator it = name_id_map.find(name); content_t name_index; if (it != name_id_map.end()) { @@ -277,10 +273,13 @@ bool read_schematic_def(lua_State *L, int index, names->push_back(name); } - schem->schemdata[i] = MapNode(name_index, param1, param2); + //// Perform probability/force_place fixup on param1 + param1 >>= 1; + if (getboolfield_default(L, -1, "force_place", false)) + param1 |= MTSCHEM_FORCE_PLACE; - i++; - lua_pop(L, 1); + //// Actually set the node in the schematic + schem->schemdata[i] = MapNode(name_index, param1, param2); } if (i != numnodes) { @@ -297,13 +296,13 @@ bool read_schematic_def(lua_State *L, int index, lua_getfield(L, index, "yslice_prob"); if (lua_istable(L, -1)) { - lua_pushnil(L); - while (lua_next(L, -2)) { - if (getintfield(L, -1, "ypos", i) && i >= 0 && i < size.Y) { - schem->slice_probs[i] = getintfield_default(L, -1, - "prob", MTSCHEM_PROB_ALWAYS); - } - lua_pop(L, 1); + for (lua_pushnil(L); lua_next(L, -2); lua_pop(L, 1)) { + u16 ypos; + if (!getintfield(L, -1, "ypos", ypos) || (ypos >= size.Y) || + !getintfield(L, -1, "prob", schem->slice_probs[ypos])) + continue; + + schem->slice_probs[ypos] >>= 1; } } diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp index 24bacf6c5..df47d2bc0 100644 --- a/src/unittest/test_schematic.cpp +++ b/src/unittest/test_schematic.cpp @@ -34,8 +34,9 @@ public: void testLuaTableSerialize(INodeDefManager *ndef); void testFileSerializeDeserialize(INodeDefManager *ndef); - static const content_t test_schem_data[7 * 6 * 4]; - static const content_t test_schem_data2[3 * 3 * 3]; + static const content_t test_schem1_data[7 * 6 * 4]; + static const content_t test_schem2_data[3 * 3 * 3]; + static const u8 test_schem2_prob[3 * 3 * 3]; static const char *expected_lua_output; }; @@ -78,7 +79,7 @@ void TestSchematic::testMtsSerializeDeserialize(INodeDefManager *ndef) schem.schemdata = new MapNode[volume]; schem.slice_probs = new u8[size.Y]; for (size_t i = 0; i != volume; i++) - schem.schemdata[i] = MapNode(test_schem_data[i], MTSCHEM_PROB_ALWAYS, 0); + schem.schemdata[i] = MapNode(test_schem1_data[i], MTSCHEM_PROB_ALWAYS, 0); for (s16 y = 0; y != size.Y; y++) schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; @@ -115,7 +116,7 @@ void TestSchematic::testLuaTableSerialize(INodeDefManager *ndef) schem.schemdata = new MapNode[volume]; schem.slice_probs = new u8[size.Y]; for (size_t i = 0; i != volume; i++) - schem.schemdata[i] = MapNode(test_schem_data2[i], MTSCHEM_PROB_ALWAYS, 0); + schem.schemdata[i] = MapNode(test_schem2_data[i], test_schem2_prob[i], 0); for (s16 y = 0; y != size.Y; y++) schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS; @@ -160,8 +161,8 @@ void TestSchematic::testFileSerializeDeserialize(INodeDefManager *ndef) schem1.slice_probs[2] = 240; for (size_t i = 0; i != volume; i++) { - content_t c = content_map[test_schem_data2[i]]; - schem1.schemdata[i] = MapNode(c, MTSCHEM_PROB_ALWAYS, 0); + content_t c = content_map[test_schem2_data[i]]; + schem1.schemdata[i] = MapNode(c, test_schem2_prob[i], 0); } std::string temp_file = getTestTempFile(); @@ -174,14 +175,14 @@ void TestSchematic::testFileSerializeDeserialize(INodeDefManager *ndef) UASSERT(schem2.slice_probs[2] == 240); for (size_t i = 0; i != volume; i++) { - content_t c = content_map2[test_schem_data2[i]]; - UASSERT(schem2.schemdata[i] == MapNode(c, MTSCHEM_PROB_ALWAYS, 0)); + content_t c = content_map2[test_schem2_data[i]]; + UASSERT(schem2.schemdata[i] == MapNode(c, test_schem2_prob[i], 0)); } } // Should form a cross-shaped-thing...? -const content_t TestSchematic::test_schem_data[7 * 6 * 4] = { +const content_t TestSchematic::test_schem1_data[7 * 6 * 4] = { 3, 3, 1, 1, 1, 3, 3, // Y=0, Z=0 3, 0, 1, 2, 1, 0, 3, // Y=1, Z=0 3, 0, 1, 2, 1, 0, 3, // Y=2, Z=0 @@ -211,7 +212,7 @@ const content_t TestSchematic::test_schem_data[7 * 6 * 4] = { 3, 1, 1, 2, 1, 1, 3, // Y=5, Z=3 }; -const content_t TestSchematic::test_schem_data2[3 * 3 * 3] = { +const content_t TestSchematic::test_schem2_data[3 * 3 * 3] = { 0, 0, 0, 0, 2, 0, 0, 0, 0, @@ -225,41 +226,55 @@ const content_t TestSchematic::test_schem_data2[3 * 3 * 3] = { 0, 0, 0, }; +const u8 TestSchematic::test_schem2_prob[3 * 3 * 3] = { + 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, + + 0x00, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, + + 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, +}; + const char *TestSchematic::expected_lua_output = "schematic = {\n" "\tsize = {x=3, y=3, z=3},\n" "\tyslice_prob = {\n" - "\t\t{ypos=0, prob=255},\n" - "\t\t{ypos=1, prob=255},\n" - "\t\t{ypos=2, prob=255},\n" + "\t\t{ypos=0, prob=254},\n" + "\t\t{ypos=1, prob=254},\n" + "\t\t{ypos=2, prob=254},\n" "\t},\n" "\tdata = {\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"default:glass\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"default:glass\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"default:glass\", param1=255, param2=0},\n" - "\t\t{name=\"default:lava_source\", param1=255, param2=0},\n" - "\t\t{name=\"default:glass\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"default:glass\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"default:glass\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" - "\t\t{name=\"air\", param1=255, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"default:glass\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"default:glass\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"default:glass\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"default:lava_source\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"default:glass\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"default:glass\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"default:glass\", prob=254, param2=0, force_place=true},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" + "\t\t{name=\"air\", prob=0, param2=0},\n" "\t},\n" "}\n"; From 5a1975a4e38caa1385cfefac299ce17018172714 Mon Sep 17 00:00:00 2001 From: Craig Robbins Date: Mon, 11 May 2015 02:03:09 +1000 Subject: [PATCH 036/670] Change lower limit of display_gamma to 1.0 (linear light) Now matches function comment --- minetest.conf.example | 2 +- src/light.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 3d67afed5..4e3e97b95 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -116,7 +116,7 @@ # Disable for speed or for different looks. #smooth_lighting = true # Adjust the gamma encoding for the light tables. Valid values are in the range -# 1.1 to 3.0 (inclusive); lower numbers are brighter. This setting is for the +# 1.0 to 3.0 (inclusive); lower numbers are brighter. This setting is for the # client only and is ignored by the server #display_gamma = 1.8 # Path to texture directory. All textures are first searched from here. diff --git a/src/light.cpp b/src/light.cpp index 08380a180..5dc01fcf0 100644 --- a/src/light.cpp +++ b/src/light.cpp @@ -88,7 +88,7 @@ void set_light_table(float gamma) 0 }; - gamma = rangelim(gamma, 1.1, 3.0); + gamma = rangelim(gamma, 1.0, 3.0); float brightness = brightness_step; From 58eae43322ffa83f634b4199176f4e1bae0cbcde Mon Sep 17 00:00:00 2001 From: Megaf Date: Sat, 2 May 2015 22:06:54 +0100 Subject: [PATCH 037/670] Replaced libjpeg dependency on apt-get, it should be libjpeg-dev instead of libjpeg8-dev. On Debian 8... ``` Package libjpeg8-dev is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source However the following packages replace it: libjpeg62-turbo-dev ``` Using libjpeg-dev should make the OS select the most appropriate lib to be installed. These are the packages available on Debian 8. ``` libjpeg-dev - Development files for the JPEG library [dummy package] libjpeg-turbo-progs - Programs for manipulating JPEG files libjpeg-turbo-progs-dbg - Programs for manipulating JPEG files (debugging symbols) libjpeg62-turbo - libjpeg-turbo JPEG runtime library libjpeg62-turbo-dbg - Debugging symbols for the libjpeg-turbo JPEG library libjpeg62-turbo-dev - Development files for the libjpeg-turbo JPEG library libturbojpeg1 - TurboJPEG runtime library - SIMD optimized libturbojpeg1-dbg - TurboJPEG runtime library - SIMD optimized (debugging symbols) libturbojpeg1-dev - Development files for the TurboJPEG library ``` This seems to work on all current Debian versions, Wheezy, Jessie and Sid. https://packages.debian.org/wheezy/libjpeg-dev https://packages.debian.org/jessie/libjpeg-dev https://packages.debian.org/stretch/libjpeg-dev Im not sure if Ubuntu has this dummy package. http://packages.ubuntu.com/search?keywords=libjpeg-dev Perhaps this should be further discussed. libjpeg8-dev -> libjpeg-dev --- README.txt | 2 +- util/travis/before_install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.txt b/README.txt index 0fadcaa2f..f87c7fe37 100644 --- a/README.txt +++ b/README.txt @@ -103,7 +103,7 @@ Compiling on GNU/Linux: ----------------------- Install dependencies. Here's an example for Debian/Ubuntu: -$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libjsoncpp-dev +$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libjsoncpp-dev You can install git for easily keeping your copy up to date. If you dont want git, read below on how to get the source without git. diff --git a/util/travis/before_install.sh b/util/travis/before_install.sh index 15f5da023..023f98070 100755 --- a/util/travis/before_install.sh +++ b/util/travis/before_install.sh @@ -11,7 +11,7 @@ fi sudo apt-get install p7zip-full if [[ $PLATFORM == "Linux" ]]; then sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \ - libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \ + libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \ libhiredis-dev libogg-dev libvorbis-dev libopenal-dev gettext # Linking to LevelDB is broken, use a custom build wget http://sfan5.pf-control.de/libleveldb-1.18-ubuntu12.04.7z From 181f7baa453c58d4070de7196fd74663110946a8 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 12 Apr 2015 06:18:48 +0200 Subject: [PATCH 038/670] Add LibGMP Uses system provided libgmp if found, if not it falls back to mini-gmp. --- .gitignore | 2 + README.txt | 3 +- build/android/Makefile | 139 +- build/android/jni/Android.mk | 11 +- cmake/Modules/FindGMP.cmake | 28 + src/CMakeLists.txt | 4 + src/cmake_config.h.in | 1 + src/gmp/CMakeLists.txt | 4 + src/gmp/mini-gmp.c | 4130 +++++++++++++++++++++++++++++++++ src/gmp/mini-gmp.h | 256 ++ util/travis/before_install.sh | 2 +- 11 files changed, 4537 insertions(+), 43 deletions(-) create mode 100644 cmake/Modules/FindGMP.cmake create mode 100644 src/gmp/CMakeLists.txt create mode 100644 src/gmp/mini-gmp.c create mode 100644 src/gmp/mini-gmp.h diff --git a/.gitignore b/.gitignore index 0eac84351..b89ad68e3 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,8 @@ src/cguittfont/CMakeFiles/ src/cguittfont/libcguittfont.a src/cguittfont/cmake_install.cmake src/cguittfont/Makefile +src/gmp/CMakeFiles/ +src/gmp/libgmp.a src/json/CMakeFiles/ src/json/libjsoncpp.a src/sqlite/CMakeFiles/* diff --git a/README.txt b/README.txt index f87c7fe37..5a17b2a9d 100644 --- a/README.txt +++ b/README.txt @@ -103,7 +103,7 @@ Compiling on GNU/Linux: ----------------------- Install dependencies. Here's an example for Debian/Ubuntu: -$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libjsoncpp-dev +$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-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 You can install git for easily keeping your copy up to date. If you dont want git, read below on how to get the source without git. @@ -166,6 +166,7 @@ ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend (fa ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua) +ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp) RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory) USE_GPROF - Enable profiling using GProf VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) diff --git a/build/android/Makefile b/build/android/Makefile index 569a45a68..898968bed 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -118,6 +118,13 @@ CURL_TIMESTAMP = $(CURL_DIR)/timestamp CURL_TIMESTAMP_INT = $(ROOT)/deps/curl_timestamp CURL_URL_HTTP = http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2 +GMP_VERSION = 6.0.0 +GMP_DIR = $(ROOT)/deps/gmp-$(GMP_VERSION) +GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.la +GMP_TIMESTAMP = $(GMP_DIR)/timestamp +GMP_TIMESTAMP_INT = $(ROOT)/deps/gmp_timestamp +GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2 + FREETYPE_DIR = $(ROOT)/deps/freetype2-android/ FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_ABI)/libfreetype2-static.a FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp @@ -148,14 +155,14 @@ endif $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \ $(OPENSSL_TIMESTAMP) curl_binary \ $(ROOT)/jni/src/android_version.h - + debug : $(PATHCFGFILE) export NDEBUG=; \ export BUILD_TYPE=debug; \ $(MAKE) apk - + all : debug release - + release : $(PATHCFGFILE) @export NDEBUG=1; \ export BUILD_TYPE=release; \ @@ -194,7 +201,7 @@ $(OPENAL_TIMESTAMP) : openal_download if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ touch ${OPENAL_TIMESTAMP}; \ fi - + openal_download : @if [ ! -d ${OPENAL_DIR} ] ; then \ echo "openal sources missing, downloading..."; \ @@ -202,7 +209,7 @@ openal_download : cd ${ROOT}/deps ; \ git clone ${OPENAL_URL_GIT} || exit 1; \ fi - + openal : $(OPENAL_LIB) $(OPENAL_LIB): $(OPENAL_TIMESTAMP) @@ -227,16 +234,16 @@ $(OPENAL_LIB): $(OPENAL_TIMESTAMP) 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..."; \ @@ -246,7 +253,7 @@ ogg_download : cd libvorbis-libogg-android ; \ patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \ fi - + ogg : $(OGG_LIB) $(OGG_LIB): $(OGG_TIMESTAMP) @@ -275,13 +282,13 @@ $(OGG_LIB): $(OGG_TIMESTAMP) 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..."; \ @@ -292,7 +299,7 @@ openssl_download : cd ${OPENSSL_BASEDIR}; \ patch -p1 < ../../openssl_arch.patch; \ fi - + openssl : $(OPENSSL_LIB) $(OPENSSL_LIB): $(OPENSSL_TIMESTAMP) @@ -340,7 +347,7 @@ leveldb_download : cd ${ROOT}/deps ; \ git clone ${LEVELDB_URL_GIT} || exit 1; \ fi - + leveldb : $(LEVELDB_LIB) $(LEVELDB_LIB): $(LEVELDB_TIMESTAMP) @@ -374,10 +381,10 @@ $(LEVELDB_LIB): $(LEVELDB_TIMESTAMP) else \ echo "nothing to be done for leveldb"; \ fi - + clean_leveldb : $(RM) -rf deps/leveldb - + $(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 \ @@ -391,13 +398,13 @@ freetype_download : cd deps; \ git clone ${FREETYPE_URL_GIT} || 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 - + freetype : $(FREETYPE_LIB) $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) @@ -426,7 +433,7 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) else \ echo "nothing to be done for freetype"; \ fi - + clean_freetype : $(RM) -rf ${FREETYPE_DIR} @@ -475,10 +482,10 @@ $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB) else \ echo "nothing to be done for irrlicht"; \ fi - + clean_irrlicht : $(RM) -rf deps/irrlicht - + $(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 \ @@ -535,13 +542,13 @@ $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB) else \ echo "nothing to be done for curl"; \ fi - + clean_curl : $(RM) -rf deps/curl-${CURL_VERSION} \ $(RM) -f deps/curl - - -curl_binary: + + +curl_binary: @if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \ echo "curl sources missing, downloading..."; \ mkdir -p ${ROOT}/deps; \ @@ -552,6 +559,62 @@ curl_binary: rm curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz; \ fi +$(GMP_TIMESTAMP) : gmp_download + @LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${GMP_TIMESTAMP}; \ + fi + +gmp_download : + @if [ ! -d "${GMP_DIR}" ] ; then \ + echo "gmp sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd deps; \ + wget ${GMP_URL_HTTP} || exit 1; \ + tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1; \ + rm gmp-${GMP_VERSION}.tar.bz2; \ + ln -s gmp-${GMP_VERSION} gmp; \ + fi + +gmp : $(GMP_LIB) + +$(GMP_LIB): $(GMP_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${GMP_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${GMP_DIR}; \ + export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \ + echo "changed timestamp for gmp detected building..."; \ + cd deps/gmp-${GMP_VERSION}; \ + export CROSS_PREFIX=${CROSS_PREFIX}; \ + export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + ./configure --disable-static --host=${TARGET_HOST} --prefix=/usr; \ + $(MAKE) install DESTDIR=/${GMP_DIR} || exit 1; \ + touch ${GMP_TIMESTAMP}; \ + touch ${GMP_TIMESTAMP_INT}; \ + $(RM) -rf $${TOOLCHAIN}; \ + else \ + echo "nothing to be done for gmp"; \ + fi + +clean_gmp: + $(RM) -rf deps/gmp-${GMP_VERSION} \ + $(RM) -f deps/gmp + sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c deps/${SQLITE3_FOLDER}/sqlite3.c : @@ -559,7 +622,7 @@ deps/${SQLITE3_FOLDER}/sqlite3.c : wget ${SQLITE3_URL}; \ unzip ${SQLITE3_FOLDER}.zip; \ ln -s ${SQLITE3_FOLDER} sqlite - + clean_sqlite3: cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \ $(RM) -f sqlite @@ -622,7 +685,7 @@ $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB) if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \ touch $(ASSETS_TIMESTAMP); \ fi - + assets : $(ASSETS_TIMESTAMP) @REFRESH=0; \ if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then \ @@ -670,8 +733,8 @@ assets : $(ASSETS_TIMESTAMP) clean_assets : @$(RM) -r assets - -apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_TARGET) \ + +apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \ sqlite3_download @export NDEBUG=$$NDEBUG; $(MAKE) manifest; \ @@ -689,32 +752,32 @@ apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_TARGET) \ echo "++ Success!" && \ echo "APK: bin/Minetest-$$BUILD_TYPE.apk" && \ echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`" - + prep_srcdir : @rm ${ROOT}/jni/src; \ ln -s ${ROOT}/../../src ${ROOT}/jni/src - + clean_apk : manifest @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \ export ANDROID_HOME=${SDKFOLDER}; \ ant clean - -install_debug : + +install_debug : @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \ adb install -r ${ROOT}/bin/Minetest-debug.apk - + install : @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \ adb install -r ${ROOT}/bin/Minetest-release.apk - + envpaths : @echo "export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}" > and_env;\ echo "export ANDROID_HOME=${SDKFOLDER}" >> and_env; - -clean_all : + +clean_all : @$(MAKE) clean_apk; \ $(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \ - clean_openal clean_ogg clean_manifest; \ + clean_openal clean_ogg clean_gmp clean_manifest; \ sleep 1; \ $(RM) -r gen libs obj deps bin Debug and_env @@ -762,7 +825,7 @@ manifest : sed s/###BASE_VERSION###/$$BASE_VERSION/g | \ sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \ sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml - + clean_manifest : rm -rf ${ROOT}/AndroidManifest.xml diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 722efa42b..2b582051e 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -39,6 +39,11 @@ LOCAL_MODULE := vorbis LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libvorbis.so include $(PREBUILT_SHARED_LIBRARY) +include $(CLEAR_VARS) +LOCAL_MODULE := gmp +LOCAL_SRC_FILES := deps/gmp/usr/lib/libgmp.so +include $(PREBUILT_SHARED_LIBRARY) + include $(CLEAR_VARS) LOCAL_MODULE := ssl LOCAL_SRC_FILES := deps/openssl/libssl.a @@ -49,7 +54,6 @@ LOCAL_MODULE := crypto LOCAL_SRC_FILES := deps/openssl/libcrypto.a include $(PREBUILT_STATIC_LIBRARY) - include $(CLEAR_VARS) LOCAL_MODULE := minetest @@ -97,6 +101,7 @@ LOCAL_C_INCLUDES := \ deps/curl/include \ deps/openal-soft/jni/OpenAL/include \ deps/libvorbis-libogg-android/jni/include \ + deps/gmp/usr/include \ deps/leveldb/include \ deps/sqlite/ @@ -283,7 +288,7 @@ LOCAL_SRC_FILES += \ jni/src/script/lua_api/l_vmanip.cpp \ jni/src/script/scripting_game.cpp \ jni/src/script/scripting_mainmenu.cpp - + #freetype2 support LOCAL_SRC_FILES += \ jni/src/cguittfont/xCGUITTFont.cpp @@ -334,7 +339,7 @@ LOCAL_SRC_FILES += \ # json LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp -LOCAL_SHARED_LIBRARIES := openal ogg vorbis +LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) ifeq ($(HAVE_LEVELDB), 1) diff --git a/cmake/Modules/FindGMP.cmake b/cmake/Modules/FindGMP.cmake new file mode 100644 index 000000000..bb48289c5 --- /dev/null +++ b/cmake/Modules/FindGMP.cmake @@ -0,0 +1,28 @@ + +option(ENABLE_SYSTEM_GMP "Use GMP from system" TRUE) +mark_as_advanced(GMP_LIBRARY GMP_INCLUDE_DIR) +set(USE_SYSTEM_GMP FALSE) + +if(ENABLE_SYSTEM_GMP) + find_library(GMP_LIBRARY NAMES libgmp.so) + find_path(GMP_INCLUDE_DIR NAMES gmp.h) + + if(GMP_LIBRARY AND GMP_INCLUDE_DIR) + message (STATUS "Using GMP provided by system.") + set(USE_SYSTEM_GMP TRUE) + else() + message (STATUS "Detecting GMP from system failed.") + endif() +else() + message (STATUS "Detecting GMP from system disabled! (ENABLE_SYSTEM_GMP=0)") +endif() + +if(NOT USE_SYSTEM_GMP) + message(STATUS "Using bundled mini-gmp library.") + set(GMP_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/gmp) + set(GMP_LIBRARY gmp) + add_subdirectory(gmp) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GMP DEFAULT_MSG GMP_LIBRARY GMP_INCLUDE_DIR) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 044afa367..c384286d4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -143,6 +143,7 @@ endif(ENABLE_FREETYPE) find_package(Lua REQUIRED) +find_package(GMP REQUIRED) option(ENABLE_LEVELDB "Enable LevelDB backend" TRUE) set(USE_LEVELDB FALSE) @@ -446,6 +447,7 @@ include_directories( ${SOUND_INCLUDE_DIRS} ${SQLITE3_INCLUDE_DIR} ${LUA_INCLUDE_DIR} + ${GMP_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/script ) @@ -479,6 +481,7 @@ if(BUILD_CLIENT) ${SOUND_LIBRARIES} ${SQLITE3_LIBRARY} ${LUA_LIBRARY} + ${GMP_LIBRARY} ${JSON_LIBRARY} ${OPENGLES2_LIBRARIES} ${PLATFORM_LIBS} @@ -532,6 +535,7 @@ if(BUILD_SERVER) ${JSON_LIBRARY} ${GETTEXT_LIBRARY} ${LUA_LIBRARY} + ${GMP_LIBRARY} ${PLATFORM_LIBS} ) set_target_properties(${PROJECT_NAME}server PROPERTIES diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in index c5ca2c803..c3ca1e864 100644 --- a/src/cmake_config.h.in +++ b/src/cmake_config.h.in @@ -20,6 +20,7 @@ #cmakedefine01 USE_FREETYPE #cmakedefine01 USE_LEVELDB #cmakedefine01 USE_LUAJIT +#cmakedefine01 USE_SYSTEM_GMP #cmakedefine01 USE_REDIS #cmakedefine01 HAVE_ENDIAN_H diff --git a/src/gmp/CMakeLists.txt b/src/gmp/CMakeLists.txt new file mode 100644 index 000000000..b8a56543f --- /dev/null +++ b/src/gmp/CMakeLists.txt @@ -0,0 +1,4 @@ +add_library(gmp mini-gmp.c) + +target_link_libraries(gmp) + diff --git a/src/gmp/mini-gmp.c b/src/gmp/mini-gmp.c new file mode 100644 index 000000000..f3b43fbe8 --- /dev/null +++ b/src/gmp/mini-gmp.c @@ -0,0 +1,4130 @@ +/* mini-gmp, a minimalistic implementation of a GNU GMP subset. + + Contributed to the GNU project by Niels Möller + +Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 +Free Software Foundation, Inc. + +This file is part of the GNU MP Library. + +The GNU MP Library is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +The GNU MP Library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ + +/* NOTE: All functions in this file which are not declared in + mini-gmp.h are internal, and are not intended to be compatible + neither with GMP nor with future versions of mini-gmp. */ + +/* Much of the material copied from GMP files, including: gmp-impl.h, + longlong.h, mpn/generic/add_n.c, mpn/generic/addmul_1.c, + mpn/generic/lshift.c, mpn/generic/mul_1.c, + mpn/generic/mul_basecase.c, mpn/generic/rshift.c, + mpn/generic/sbpi1_div_qr.c, mpn/generic/sub_n.c, + mpn/generic/submul_1.c. */ + +#include +#include +#include +#include +#include +#include + +#include "mini-gmp.h" + + +/* Macros */ +#define GMP_LIMB_BITS (sizeof(mp_limb_t) * CHAR_BIT) + +#define GMP_LIMB_MAX (~ (mp_limb_t) 0) +#define GMP_LIMB_HIGHBIT ((mp_limb_t) 1 << (GMP_LIMB_BITS - 1)) + +#define GMP_HLIMB_BIT ((mp_limb_t) 1 << (GMP_LIMB_BITS / 2)) +#define GMP_LLIMB_MASK (GMP_HLIMB_BIT - 1) + +#define GMP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT) +#define GMP_ULONG_HIGHBIT ((unsigned long) 1 << (GMP_ULONG_BITS - 1)) + +#define GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) +#define GMP_NEG_CAST(T,x) (-((T)((x) + 1) - 1)) + +#define GMP_MIN(a, b) ((a) < (b) ? (a) : (b)) +#define GMP_MAX(a, b) ((a) > (b) ? (a) : (b)) + +#define gmp_assert_nocarry(x) do { \ + mp_limb_t __cy = x; \ + assert (__cy == 0); \ + } while (0) + +#define gmp_clz(count, x) do { \ + mp_limb_t __clz_x = (x); \ + unsigned __clz_c; \ + for (__clz_c = 0; \ + (__clz_x & ((mp_limb_t) 0xff << (GMP_LIMB_BITS - 8))) == 0; \ + __clz_c += 8) \ + __clz_x <<= 8; \ + for (; (__clz_x & GMP_LIMB_HIGHBIT) == 0; __clz_c++) \ + __clz_x <<= 1; \ + (count) = __clz_c; \ + } while (0) + +#define gmp_ctz(count, x) do { \ + mp_limb_t __ctz_x = (x); \ + unsigned __ctz_c = 0; \ + gmp_clz (__ctz_c, __ctz_x & - __ctz_x); \ + (count) = GMP_LIMB_BITS - 1 - __ctz_c; \ + } while (0) + +#define gmp_add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + mp_limb_t __x; \ + __x = (al) + (bl); \ + (sh) = (ah) + (bh) + (__x < (al)); \ + (sl) = __x; \ + } while (0) + +#define gmp_sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + mp_limb_t __x; \ + __x = (al) - (bl); \ + (sh) = (ah) - (bh) - ((al) < (bl)); \ + (sl) = __x; \ + } while (0) + +#define gmp_umul_ppmm(w1, w0, u, v) \ + do { \ + mp_limb_t __x0, __x1, __x2, __x3; \ + unsigned __ul, __vl, __uh, __vh; \ + mp_limb_t __u = (u), __v = (v); \ + \ + __ul = __u & GMP_LLIMB_MASK; \ + __uh = __u >> (GMP_LIMB_BITS / 2); \ + __vl = __v & GMP_LLIMB_MASK; \ + __vh = __v >> (GMP_LIMB_BITS / 2); \ + \ + __x0 = (mp_limb_t) __ul * __vl; \ + __x1 = (mp_limb_t) __ul * __vh; \ + __x2 = (mp_limb_t) __uh * __vl; \ + __x3 = (mp_limb_t) __uh * __vh; \ + \ + __x1 += __x0 >> (GMP_LIMB_BITS / 2);/* this can't give carry */ \ + __x1 += __x2; /* but this indeed can */ \ + if (__x1 < __x2) /* did we get it? */ \ + __x3 += GMP_HLIMB_BIT; /* yes, add it in the proper pos. */ \ + \ + (w1) = __x3 + (__x1 >> (GMP_LIMB_BITS / 2)); \ + (w0) = (__x1 << (GMP_LIMB_BITS / 2)) + (__x0 & GMP_LLIMB_MASK); \ + } while (0) + +#define gmp_udiv_qrnnd_preinv(q, r, nh, nl, d, di) \ + do { \ + mp_limb_t _qh, _ql, _r, _mask; \ + gmp_umul_ppmm (_qh, _ql, (nh), (di)); \ + gmp_add_ssaaaa (_qh, _ql, _qh, _ql, (nh) + 1, (nl)); \ + _r = (nl) - _qh * (d); \ + _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ + _qh += _mask; \ + _r += _mask & (d); \ + if (_r >= (d)) \ + { \ + _r -= (d); \ + _qh++; \ + } \ + \ + (r) = _r; \ + (q) = _qh; \ + } while (0) + +#define gmp_udiv_qr_3by2(q, r1, r0, n2, n1, n0, d1, d0, dinv) \ + do { \ + mp_limb_t _q0, _t1, _t0, _mask; \ + gmp_umul_ppmm ((q), _q0, (n2), (dinv)); \ + gmp_add_ssaaaa ((q), _q0, (q), _q0, (n2), (n1)); \ + \ + /* Compute the two most significant limbs of n - q'd */ \ + (r1) = (n1) - (d1) * (q); \ + gmp_sub_ddmmss ((r1), (r0), (r1), (n0), (d1), (d0)); \ + gmp_umul_ppmm (_t1, _t0, (d0), (q)); \ + gmp_sub_ddmmss ((r1), (r0), (r1), (r0), _t1, _t0); \ + (q)++; \ + \ + /* Conditionally adjust q and the remainders */ \ + _mask = - (mp_limb_t) ((r1) >= _q0); \ + (q) += _mask; \ + gmp_add_ssaaaa ((r1), (r0), (r1), (r0), _mask & (d1), _mask & (d0)); \ + if ((r1) >= (d1)) \ + { \ + if ((r1) > (d1) || (r0) >= (d0)) \ + { \ + (q)++; \ + gmp_sub_ddmmss ((r1), (r0), (r1), (r0), (d1), (d0)); \ + } \ + } \ + } while (0) + +/* Swap macros. */ +#define MP_LIMB_T_SWAP(x, y) \ + do { \ + mp_limb_t __mp_limb_t_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mp_limb_t_swap__tmp; \ + } while (0) +#define MP_SIZE_T_SWAP(x, y) \ + do { \ + mp_size_t __mp_size_t_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mp_size_t_swap__tmp; \ + } while (0) +#define MP_BITCNT_T_SWAP(x,y) \ + do { \ + mp_bitcnt_t __mp_bitcnt_t_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mp_bitcnt_t_swap__tmp; \ + } while (0) +#define MP_PTR_SWAP(x, y) \ + do { \ + mp_ptr __mp_ptr_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mp_ptr_swap__tmp; \ + } while (0) +#define MP_SRCPTR_SWAP(x, y) \ + do { \ + mp_srcptr __mp_srcptr_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mp_srcptr_swap__tmp; \ + } while (0) + +#define MPN_PTR_SWAP(xp,xs, yp,ys) \ + do { \ + MP_PTR_SWAP (xp, yp); \ + MP_SIZE_T_SWAP (xs, ys); \ + } while(0) +#define MPN_SRCPTR_SWAP(xp,xs, yp,ys) \ + do { \ + MP_SRCPTR_SWAP (xp, yp); \ + MP_SIZE_T_SWAP (xs, ys); \ + } while(0) + +#define MPZ_PTR_SWAP(x, y) \ + do { \ + mpz_ptr __mpz_ptr_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mpz_ptr_swap__tmp; \ + } while (0) +#define MPZ_SRCPTR_SWAP(x, y) \ + do { \ + mpz_srcptr __mpz_srcptr_swap__tmp = (x); \ + (x) = (y); \ + (y) = __mpz_srcptr_swap__tmp; \ + } while (0) + + +/* Memory allocation and other helper functions. */ +static void +gmp_die (const char *msg) +{ + fprintf (stderr, "%s\n", msg); + abort(); +} + +static void * +gmp_default_alloc (size_t size) +{ + void *p; + + assert (size > 0); + + p = malloc (size); + if (!p) + gmp_die("gmp_default_alloc: Virtual memory exhausted."); + + return p; +} + +static void * +gmp_default_realloc (void *old, size_t old_size, size_t new_size) +{ + mp_ptr p; + + p = realloc (old, new_size); + + if (!p) + gmp_die("gmp_default_realoc: Virtual memory exhausted."); + + return p; +} + +static void +gmp_default_free (void *p, size_t size) +{ + free (p); +} + +static void * (*gmp_allocate_func) (size_t) = gmp_default_alloc; +static void * (*gmp_reallocate_func) (void *, size_t, size_t) = gmp_default_realloc; +static void (*gmp_free_func) (void *, size_t) = gmp_default_free; + +void +mp_get_memory_functions (void *(**alloc_func) (size_t), + void *(**realloc_func) (void *, size_t, size_t), + void (**free_func) (void *, size_t)) +{ + if (alloc_func) + *alloc_func = gmp_allocate_func; + + if (realloc_func) + *realloc_func = gmp_reallocate_func; + + if (free_func) + *free_func = gmp_free_func; +} + +void +mp_set_memory_functions (void *(*alloc_func) (size_t), + void *(*realloc_func) (void *, size_t, size_t), + void (*free_func) (void *, size_t)) +{ + if (!alloc_func) + alloc_func = gmp_default_alloc; + if (!realloc_func) + realloc_func = gmp_default_realloc; + if (!free_func) + free_func = gmp_default_free; + + gmp_allocate_func = alloc_func; + gmp_reallocate_func = realloc_func; + gmp_free_func = free_func; +} + +#define gmp_xalloc(size) ((*gmp_allocate_func)((size))) +#define gmp_free(p) ((*gmp_free_func) ((p), 0)) + +static mp_ptr +gmp_xalloc_limbs (mp_size_t size) +{ + return gmp_xalloc (size * sizeof (mp_limb_t)); +} + +static mp_ptr +gmp_xrealloc_limbs (mp_ptr old, mp_size_t size) +{ + assert (size > 0); + return (*gmp_reallocate_func) (old, 0, size * sizeof (mp_limb_t)); +} + + +/* MPN interface */ + +void +mpn_copyi (mp_ptr d, mp_srcptr s, mp_size_t n) +{ + mp_size_t i; + for (i = 0; i < n; i++) + d[i] = s[i]; +} + +void +mpn_copyd (mp_ptr d, mp_srcptr s, mp_size_t n) +{ + while (n-- > 0) + d[n] = s[n]; +} + +int +mpn_cmp (mp_srcptr ap, mp_srcptr bp, mp_size_t n) +{ + for (; n > 0; n--) + { + if (ap[n-1] < bp[n-1]) + return -1; + else if (ap[n-1] > bp[n-1]) + return 1; + } + return 0; +} + +static int +mpn_cmp4 (mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) +{ + if (an > bn) + return 1; + else if (an < bn) + return -1; + else + return mpn_cmp (ap, bp, an); +} + +static mp_size_t +mpn_normalized_size (mp_srcptr xp, mp_size_t n) +{ + for (; n > 0 && xp[n-1] == 0; n--) + ; + return n; +} + +#define mpn_zero_p(xp, n) (mpn_normalized_size ((xp), (n)) == 0) + +mp_limb_t +mpn_add_1 (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t b) +{ + mp_size_t i; + + assert (n > 0); + + for (i = 0; i < n; i++) + { + mp_limb_t r = ap[i] + b; + /* Carry out */ + b = (r < b); + rp[i] = r; + } + return b; +} + +mp_limb_t +mpn_add_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) +{ + mp_size_t i; + mp_limb_t cy; + + for (i = 0, cy = 0; i < n; i++) + { + mp_limb_t a, b, r; + a = ap[i]; b = bp[i]; + r = a + cy; + cy = (r < cy); + r += b; + cy += (r < b); + rp[i] = r; + } + return cy; +} + +mp_limb_t +mpn_add (mp_ptr rp, mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) +{ + mp_limb_t cy; + + assert (an >= bn); + + cy = mpn_add_n (rp, ap, bp, bn); + if (an > bn) + cy = mpn_add_1 (rp + bn, ap + bn, an - bn, cy); + return cy; +} + +mp_limb_t +mpn_sub_1 (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t b) +{ + mp_size_t i; + + assert (n > 0); + + for (i = 0; i < n; i++) + { + mp_limb_t a = ap[i]; + /* Carry out */ + mp_limb_t cy = a < b;; + rp[i] = a - b; + b = cy; + } + return b; +} + +mp_limb_t +mpn_sub_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) +{ + mp_size_t i; + mp_limb_t cy; + + for (i = 0, cy = 0; i < n; i++) + { + mp_limb_t a, b; + a = ap[i]; b = bp[i]; + b += cy; + cy = (b < cy); + cy += (a < b); + rp[i] = a - b; + } + return cy; +} + +mp_limb_t +mpn_sub (mp_ptr rp, mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) +{ + mp_limb_t cy; + + assert (an >= bn); + + cy = mpn_sub_n (rp, ap, bp, bn); + if (an > bn) + cy = mpn_sub_1 (rp + bn, ap + bn, an - bn, cy); + return cy; +} + +mp_limb_t +mpn_mul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) +{ + mp_limb_t ul, cl, hpl, lpl; + + assert (n >= 1); + + cl = 0; + do + { + ul = *up++; + gmp_umul_ppmm (hpl, lpl, ul, vl); + + lpl += cl; + cl = (lpl < cl) + hpl; + + *rp++ = lpl; + } + while (--n != 0); + + return cl; +} + +mp_limb_t +mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) +{ + mp_limb_t ul, cl, hpl, lpl, rl; + + assert (n >= 1); + + cl = 0; + do + { + ul = *up++; + gmp_umul_ppmm (hpl, lpl, ul, vl); + + lpl += cl; + cl = (lpl < cl) + hpl; + + rl = *rp; + lpl = rl + lpl; + cl += lpl < rl; + *rp++ = lpl; + } + while (--n != 0); + + return cl; +} + +mp_limb_t +mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) +{ + mp_limb_t ul, cl, hpl, lpl, rl; + + assert (n >= 1); + + cl = 0; + do + { + ul = *up++; + gmp_umul_ppmm (hpl, lpl, ul, vl); + + lpl += cl; + cl = (lpl < cl) + hpl; + + rl = *rp; + lpl = rl - lpl; + cl += lpl > rl; + *rp++ = lpl; + } + while (--n != 0); + + return cl; +} + +mp_limb_t +mpn_mul (mp_ptr rp, mp_srcptr up, mp_size_t un, mp_srcptr vp, mp_size_t vn) +{ + assert (un >= vn); + assert (vn >= 1); + + /* We first multiply by the low order limb. This result can be + stored, not added, to rp. We also avoid a loop for zeroing this + way. */ + + rp[un] = mpn_mul_1 (rp, up, un, vp[0]); + rp += 1, vp += 1, vn -= 1; + + /* Now accumulate the product of up[] and the next higher limb from + vp[]. */ + + while (vn >= 1) + { + rp[un] = mpn_addmul_1 (rp, up, un, vp[0]); + rp += 1, vp += 1, vn -= 1; + } + return rp[un - 1]; +} + +void +mpn_mul_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) +{ + mpn_mul (rp, ap, n, bp, n); +} + +void +mpn_sqr (mp_ptr rp, mp_srcptr ap, mp_size_t n) +{ + mpn_mul (rp, ap, n, ap, n); +} + +mp_limb_t +mpn_lshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) +{ + mp_limb_t high_limb, low_limb; + unsigned int tnc; + mp_size_t i; + mp_limb_t retval; + + assert (n >= 1); + assert (cnt >= 1); + assert (cnt < GMP_LIMB_BITS); + + up += n; + rp += n; + + tnc = GMP_LIMB_BITS - cnt; + low_limb = *--up; + retval = low_limb >> tnc; + high_limb = (low_limb << cnt); + + for (i = n - 1; i != 0; i--) + { + low_limb = *--up; + *--rp = high_limb | (low_limb >> tnc); + high_limb = (low_limb << cnt); + } + *--rp = high_limb; + + return retval; +} + +mp_limb_t +mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) +{ + mp_limb_t high_limb, low_limb; + unsigned int tnc; + mp_size_t i; + mp_limb_t retval; + + assert (n >= 1); + assert (cnt >= 1); + assert (cnt < GMP_LIMB_BITS); + + tnc = GMP_LIMB_BITS - cnt; + high_limb = *up++; + retval = (high_limb << tnc); + low_limb = high_limb >> cnt; + + for (i = n - 1; i != 0; i--) + { + high_limb = *up++; + *rp++ = low_limb | (high_limb << tnc); + low_limb = high_limb >> cnt; + } + *rp = low_limb; + + return retval; +} + + +/* MPN division interface. */ +mp_limb_t +mpn_invert_3by2 (mp_limb_t u1, mp_limb_t u0) +{ + mp_limb_t r, p, m; + unsigned ul, uh; + unsigned ql, qh; + + /* First, do a 2/1 inverse. */ + /* The inverse m is defined as floor( (B^2 - 1 - u1)/u1 ), so that 0 < + * B^2 - (B + m) u1 <= u1 */ + assert (u1 >= GMP_LIMB_HIGHBIT); + + ul = u1 & GMP_LLIMB_MASK; + uh = u1 >> (GMP_LIMB_BITS / 2); + + qh = ~u1 / uh; + r = ((~u1 - (mp_limb_t) qh * uh) << (GMP_LIMB_BITS / 2)) | GMP_LLIMB_MASK; + + p = (mp_limb_t) qh * ul; + /* Adjustment steps taken from udiv_qrnnd_c */ + if (r < p) + { + qh--; + r += u1; + if (r >= u1) /* i.e. we didn't get carry when adding to r */ + if (r < p) + { + qh--; + r += u1; + } + } + r -= p; + + /* Do a 3/2 division (with half limb size) */ + p = (r >> (GMP_LIMB_BITS / 2)) * qh + r; + ql = (p >> (GMP_LIMB_BITS / 2)) + 1; + + /* By the 3/2 method, we don't need the high half limb. */ + r = (r << (GMP_LIMB_BITS / 2)) + GMP_LLIMB_MASK - ql * u1; + + if (r >= (p << (GMP_LIMB_BITS / 2))) + { + ql--; + r += u1; + } + m = ((mp_limb_t) qh << (GMP_LIMB_BITS / 2)) + ql; + if (r >= u1) + { + m++; + r -= u1; + } + + if (u0 > 0) + { + mp_limb_t th, tl; + r = ~r; + r += u0; + if (r < u0) + { + m--; + if (r >= u1) + { + m--; + r -= u1; + } + r -= u1; + } + gmp_umul_ppmm (th, tl, u0, m); + r += th; + if (r < th) + { + m--; + if (r > u1 || (r == u1 && tl > u0)) + m--; + } + } + + return m; +} + +struct gmp_div_inverse +{ + /* Normalization shift count. */ + unsigned shift; + /* Normalized divisor (d0 unused for mpn_div_qr_1) */ + mp_limb_t d1, d0; + /* Inverse, for 2/1 or 3/2. */ + mp_limb_t di; +}; + +static void +mpn_div_qr_1_invert (struct gmp_div_inverse *inv, mp_limb_t d) +{ + unsigned shift; + + assert (d > 0); + gmp_clz (shift, d); + inv->shift = shift; + inv->d1 = d << shift; + inv->di = mpn_invert_limb (inv->d1); +} + +static void +mpn_div_qr_2_invert (struct gmp_div_inverse *inv, + mp_limb_t d1, mp_limb_t d0) +{ + unsigned shift; + + assert (d1 > 0); + gmp_clz (shift, d1); + inv->shift = shift; + if (shift > 0) + { + d1 = (d1 << shift) | (d0 >> (GMP_LIMB_BITS - shift)); + d0 <<= shift; + } + inv->d1 = d1; + inv->d0 = d0; + inv->di = mpn_invert_3by2 (d1, d0); +} + +static void +mpn_div_qr_invert (struct gmp_div_inverse *inv, + mp_srcptr dp, mp_size_t dn) +{ + assert (dn > 0); + + if (dn == 1) + mpn_div_qr_1_invert (inv, dp[0]); + else if (dn == 2) + mpn_div_qr_2_invert (inv, dp[1], dp[0]); + else + { + unsigned shift; + mp_limb_t d1, d0; + + d1 = dp[dn-1]; + d0 = dp[dn-2]; + assert (d1 > 0); + gmp_clz (shift, d1); + inv->shift = shift; + if (shift > 0) + { + d1 = (d1 << shift) | (d0 >> (GMP_LIMB_BITS - shift)); + d0 = (d0 << shift) | (dp[dn-3] >> (GMP_LIMB_BITS - shift)); + } + inv->d1 = d1; + inv->d0 = d0; + inv->di = mpn_invert_3by2 (d1, d0); + } +} + +/* Not matching current public gmp interface, rather corresponding to + the sbpi1_div_* functions. */ +static mp_limb_t +mpn_div_qr_1_preinv (mp_ptr qp, mp_srcptr np, mp_size_t nn, + const struct gmp_div_inverse *inv) +{ + mp_limb_t d, di; + mp_limb_t r; + mp_ptr tp = NULL; + + if (inv->shift > 0) + { + tp = gmp_xalloc_limbs (nn); + r = mpn_lshift (tp, np, nn, inv->shift); + np = tp; + } + else + r = 0; + + d = inv->d1; + di = inv->di; + while (nn-- > 0) + { + mp_limb_t q; + + gmp_udiv_qrnnd_preinv (q, r, r, np[nn], d, di); + if (qp) + qp[nn] = q; + } + if (inv->shift > 0) + gmp_free (tp); + + return r >> inv->shift; +} + +static mp_limb_t +mpn_div_qr_1 (mp_ptr qp, mp_srcptr np, mp_size_t nn, mp_limb_t d) +{ + assert (d > 0); + + /* Special case for powers of two. */ + if (d > 1 && (d & (d-1)) == 0) + { + unsigned shift; + mp_limb_t r = np[0] & (d-1); + gmp_ctz (shift, d); + if (qp) + mpn_rshift (qp, np, nn, shift); + + return r; + } + else + { + struct gmp_div_inverse inv; + mpn_div_qr_1_invert (&inv, d); + return mpn_div_qr_1_preinv (qp, np, nn, &inv); + } +} + +static void +mpn_div_qr_2_preinv (mp_ptr qp, mp_ptr rp, mp_srcptr np, mp_size_t nn, + const struct gmp_div_inverse *inv) +{ + unsigned shift; + mp_size_t i; + mp_limb_t d1, d0, di, r1, r0; + mp_ptr tp; + + assert (nn >= 2); + shift = inv->shift; + d1 = inv->d1; + d0 = inv->d0; + di = inv->di; + + if (shift > 0) + { + tp = gmp_xalloc_limbs (nn); + r1 = mpn_lshift (tp, np, nn, shift); + np = tp; + } + else + r1 = 0; + + r0 = np[nn - 1]; + + for (i = nn - 2; i >= 0; i--) + { + mp_limb_t n0, q; + n0 = np[i]; + gmp_udiv_qr_3by2 (q, r1, r0, r1, r0, n0, d1, d0, di); + + if (qp) + qp[i] = q; + } + + if (shift > 0) + { + assert ((r0 << (GMP_LIMB_BITS - shift)) == 0); + r0 = (r0 >> shift) | (r1 << (GMP_LIMB_BITS - shift)); + r1 >>= shift; + + gmp_free (tp); + } + + rp[1] = r1; + rp[0] = r0; +} + +#if 0 +static void +mpn_div_qr_2 (mp_ptr qp, mp_ptr rp, mp_srcptr np, mp_size_t nn, + mp_limb_t d1, mp_limb_t d0) +{ + struct gmp_div_inverse inv; + assert (nn >= 2); + + mpn_div_qr_2_invert (&inv, d1, d0); + mpn_div_qr_2_preinv (qp, rp, np, nn, &inv); +} +#endif + +static void +mpn_div_qr_pi1 (mp_ptr qp, + mp_ptr np, mp_size_t nn, mp_limb_t n1, + mp_srcptr dp, mp_size_t dn, + mp_limb_t dinv) +{ + mp_size_t i; + + mp_limb_t d1, d0; + mp_limb_t cy, cy1; + mp_limb_t q; + + assert (dn > 2); + assert (nn >= dn); + + d1 = dp[dn - 1]; + d0 = dp[dn - 2]; + + assert ((d1 & GMP_LIMB_HIGHBIT) != 0); + /* Iteration variable is the index of the q limb. + * + * We divide + * by + */ + + for (i = nn - dn; i >= 0; i--) + { + mp_limb_t n0 = np[dn-1+i]; + + if (n1 == d1 && n0 == d0) + { + q = GMP_LIMB_MAX; + mpn_submul_1 (np+i, dp, dn, q); + n1 = np[dn-1+i]; /* update n1, last loop's value will now be invalid */ + } + else + { + gmp_udiv_qr_3by2 (q, n1, n0, n1, n0, np[dn-2+i], d1, d0, dinv); + + cy = mpn_submul_1 (np + i, dp, dn-2, q); + + cy1 = n0 < cy; + n0 = n0 - cy; + cy = n1 < cy1; + n1 = n1 - cy1; + np[dn-2+i] = n0; + + if (cy != 0) + { + n1 += d1 + mpn_add_n (np + i, np + i, dp, dn - 1); + q--; + } + } + + if (qp) + qp[i] = q; + } + + np[dn - 1] = n1; +} + +static void +mpn_div_qr_preinv (mp_ptr qp, mp_ptr np, mp_size_t nn, + mp_srcptr dp, mp_size_t dn, + const struct gmp_div_inverse *inv) +{ + assert (dn > 0); + assert (nn >= dn); + + if (dn == 1) + np[0] = mpn_div_qr_1_preinv (qp, np, nn, inv); + else if (dn == 2) + mpn_div_qr_2_preinv (qp, np, np, nn, inv); + else + { + mp_limb_t nh; + unsigned shift; + + assert (inv->d1 == dp[dn-1]); + assert (inv->d0 == dp[dn-2]); + assert ((inv->d1 & GMP_LIMB_HIGHBIT) != 0); + + shift = inv->shift; + if (shift > 0) + nh = mpn_lshift (np, np, nn, shift); + else + nh = 0; + + mpn_div_qr_pi1 (qp, np, nn, nh, dp, dn, inv->di); + + if (shift > 0) + gmp_assert_nocarry (mpn_rshift (np, np, dn, shift)); + } +} + +static void +mpn_div_qr (mp_ptr qp, mp_ptr np, mp_size_t nn, mp_srcptr dp, mp_size_t dn) +{ + struct gmp_div_inverse inv; + mp_ptr tp = NULL; + + assert (dn > 0); + assert (nn >= dn); + + mpn_div_qr_invert (&inv, dp, dn); + if (dn > 2 && inv.shift > 0) + { + tp = gmp_xalloc_limbs (dn); + gmp_assert_nocarry (mpn_lshift (tp, dp, dn, inv.shift)); + dp = tp; + } + mpn_div_qr_preinv (qp, np, nn, dp, dn, &inv); + if (tp) + gmp_free (tp); +} + + +/* MPN base conversion. */ +static unsigned +mpn_base_power_of_two_p (unsigned b) +{ + switch (b) + { + case 2: return 1; + case 4: return 2; + case 8: return 3; + case 16: return 4; + case 32: return 5; + case 64: return 6; + case 128: return 7; + case 256: return 8; + default: return 0; + } +} + +struct mpn_base_info +{ + /* bb is the largest power of the base which fits in one limb, and + exp is the corresponding exponent. */ + unsigned exp; + mp_limb_t bb; +}; + +static void +mpn_get_base_info (struct mpn_base_info *info, mp_limb_t b) +{ + mp_limb_t m; + mp_limb_t p; + unsigned exp; + + m = GMP_LIMB_MAX / b; + for (exp = 1, p = b; p <= m; exp++) + p *= b; + + info->exp = exp; + info->bb = p; +} + +static mp_bitcnt_t +mpn_limb_size_in_base_2 (mp_limb_t u) +{ + unsigned shift; + + assert (u > 0); + gmp_clz (shift, u); + return GMP_LIMB_BITS - shift; +} + +static size_t +mpn_get_str_bits (unsigned char *sp, unsigned bits, mp_srcptr up, mp_size_t un) +{ + unsigned char mask; + size_t sn, j; + mp_size_t i; + int shift; + + sn = ((un - 1) * GMP_LIMB_BITS + mpn_limb_size_in_base_2 (up[un-1]) + + bits - 1) / bits; + + mask = (1U << bits) - 1; + + for (i = 0, j = sn, shift = 0; j-- > 0;) + { + unsigned char digit = up[i] >> shift; + + shift += bits; + + if (shift >= GMP_LIMB_BITS && ++i < un) + { + shift -= GMP_LIMB_BITS; + digit |= up[i] << (bits - shift); + } + sp[j] = digit & mask; + } + return sn; +} + +/* We generate digits from the least significant end, and reverse at + the end. */ +static size_t +mpn_limb_get_str (unsigned char *sp, mp_limb_t w, + const struct gmp_div_inverse *binv) +{ + mp_size_t i; + for (i = 0; w > 0; i++) + { + mp_limb_t h, l, r; + + h = w >> (GMP_LIMB_BITS - binv->shift); + l = w << binv->shift; + + gmp_udiv_qrnnd_preinv (w, r, h, l, binv->d1, binv->di); + assert ( (r << (GMP_LIMB_BITS - binv->shift)) == 0); + r >>= binv->shift; + + sp[i] = r; + } + return i; +} + +static size_t +mpn_get_str_other (unsigned char *sp, + int base, const struct mpn_base_info *info, + mp_ptr up, mp_size_t un) +{ + struct gmp_div_inverse binv; + size_t sn; + size_t i; + + mpn_div_qr_1_invert (&binv, base); + + sn = 0; + + if (un > 1) + { + struct gmp_div_inverse bbinv; + mpn_div_qr_1_invert (&bbinv, info->bb); + + do + { + mp_limb_t w; + size_t done; + w = mpn_div_qr_1_preinv (up, up, un, &bbinv); + un -= (up[un-1] == 0); + done = mpn_limb_get_str (sp + sn, w, &binv); + + for (sn += done; done < info->exp; done++) + sp[sn++] = 0; + } + while (un > 1); + } + sn += mpn_limb_get_str (sp + sn, up[0], &binv); + + /* Reverse order */ + for (i = 0; 2*i + 1 < sn; i++) + { + unsigned char t = sp[i]; + sp[i] = sp[sn - i - 1]; + sp[sn - i - 1] = t; + } + + return sn; +} + +size_t +mpn_get_str (unsigned char *sp, int base, mp_ptr up, mp_size_t un) +{ + unsigned bits; + + assert (un > 0); + assert (up[un-1] > 0); + + bits = mpn_base_power_of_two_p (base); + if (bits) + return mpn_get_str_bits (sp, bits, up, un); + else + { + struct mpn_base_info info; + + mpn_get_base_info (&info, base); + return mpn_get_str_other (sp, base, &info, up, un); + } +} + +static mp_size_t +mpn_set_str_bits (mp_ptr rp, const unsigned char *sp, size_t sn, + unsigned bits) +{ + mp_size_t rn; + size_t j; + unsigned shift; + + for (j = sn, rn = 0, shift = 0; j-- > 0; ) + { + if (shift == 0) + { + rp[rn++] = sp[j]; + shift += bits; + } + else + { + rp[rn-1] |= (mp_limb_t) sp[j] << shift; + shift += bits; + if (shift >= GMP_LIMB_BITS) + { + shift -= GMP_LIMB_BITS; + if (shift > 0) + rp[rn++] = (mp_limb_t) sp[j] >> (bits - shift); + } + } + } + rn = mpn_normalized_size (rp, rn); + return rn; +} + +static mp_size_t +mpn_set_str_other (mp_ptr rp, const unsigned char *sp, size_t sn, + mp_limb_t b, const struct mpn_base_info *info) +{ + mp_size_t rn; + mp_limb_t w; + unsigned first; + unsigned k; + size_t j; + + first = 1 + (sn - 1) % info->exp; + + j = 0; + w = sp[j++]; + for (k = 1; k < first; k++) + w = w * b + sp[j++]; + + rp[0] = w; + + for (rn = (w > 0); j < sn;) + { + mp_limb_t cy; + + w = sp[j++]; + for (k = 1; k < info->exp; k++) + w = w * b + sp[j++]; + + cy = mpn_mul_1 (rp, rp, rn, info->bb); + cy += mpn_add_1 (rp, rp, rn, w); + if (cy > 0) + rp[rn++] = cy; + } + assert (j == sn); + + return rn; +} + +mp_size_t +mpn_set_str (mp_ptr rp, const unsigned char *sp, size_t sn, int base) +{ + unsigned bits; + + if (sn == 0) + return 0; + + bits = mpn_base_power_of_two_p (base); + if (bits) + return mpn_set_str_bits (rp, sp, sn, bits); + else + { + struct mpn_base_info info; + + mpn_get_base_info (&info, base); + return mpn_set_str_other (rp, sp, sn, base, &info); + } +} + + +/* MPZ interface */ +void +mpz_init (mpz_t r) +{ + r->_mp_alloc = 1; + r->_mp_size = 0; + r->_mp_d = gmp_xalloc_limbs (1); +} + +/* The utility of this function is a bit limited, since many functions + assings the result variable using mpz_swap. */ +void +mpz_init2 (mpz_t r, mp_bitcnt_t bits) +{ + mp_size_t rn; + + bits -= (bits != 0); /* Round down, except if 0 */ + rn = 1 + bits / GMP_LIMB_BITS; + + r->_mp_alloc = rn; + r->_mp_size = 0; + r->_mp_d = gmp_xalloc_limbs (rn); +} + +void +mpz_clear (mpz_t r) +{ + gmp_free (r->_mp_d); +} + +static void * +mpz_realloc (mpz_t r, mp_size_t size) +{ + size = GMP_MAX (size, 1); + + r->_mp_d = gmp_xrealloc_limbs (r->_mp_d, size); + r->_mp_alloc = size; + + if (GMP_ABS (r->_mp_size) > size) + r->_mp_size = 0; + + return r->_mp_d; +} + +/* Realloc for an mpz_t WHAT if it has less than NEEDED limbs. */ +#define MPZ_REALLOC(z,n) ((n) > (z)->_mp_alloc \ + ? mpz_realloc(z,n) \ + : (z)->_mp_d) + +/* MPZ assignment and basic conversions. */ +void +mpz_set_si (mpz_t r, signed long int x) +{ + if (x >= 0) + mpz_set_ui (r, x); + else /* (x < 0) */ + { + r->_mp_size = -1; + r->_mp_d[0] = GMP_NEG_CAST (unsigned long int, x); + } +} + +void +mpz_set_ui (mpz_t r, unsigned long int x) +{ + if (x > 0) + { + r->_mp_size = 1; + r->_mp_d[0] = x; + } + else + r->_mp_size = 0; +} + +void +mpz_set (mpz_t r, const mpz_t x) +{ + /* Allow the NOP r == x */ + if (r != x) + { + mp_size_t n; + mp_ptr rp; + + n = GMP_ABS (x->_mp_size); + rp = MPZ_REALLOC (r, n); + + mpn_copyi (rp, x->_mp_d, n); + r->_mp_size = x->_mp_size; + } +} + +void +mpz_init_set_si (mpz_t r, signed long int x) +{ + mpz_init (r); + mpz_set_si (r, x); +} + +void +mpz_init_set_ui (mpz_t r, unsigned long int x) +{ + mpz_init (r); + mpz_set_ui (r, x); +} + +void +mpz_init_set (mpz_t r, const mpz_t x) +{ + mpz_init (r); + mpz_set (r, x); +} + +int +mpz_fits_slong_p (const mpz_t u) +{ + mp_size_t us = u->_mp_size; + + if (us == 0) + return 1; + else if (us == 1) + return u->_mp_d[0] < GMP_LIMB_HIGHBIT; + else if (us == -1) + return u->_mp_d[0] <= GMP_LIMB_HIGHBIT; + else + return 0; +} + +int +mpz_fits_ulong_p (const mpz_t u) +{ + mp_size_t us = u->_mp_size; + + return us == 0 || us == 1; +} + +long int +mpz_get_si (const mpz_t u) +{ + mp_size_t us = u->_mp_size; + + if (us > 0) + return (long) (u->_mp_d[0] & ~GMP_LIMB_HIGHBIT); + else if (us < 0) + return (long) (- u->_mp_d[0] | GMP_LIMB_HIGHBIT); + else + return 0; +} + +unsigned long int +mpz_get_ui (const mpz_t u) +{ + return u->_mp_size == 0 ? 0 : u->_mp_d[0]; +} + +size_t +mpz_size (const mpz_t u) +{ + return GMP_ABS (u->_mp_size); +} + +mp_limb_t +mpz_getlimbn (const mpz_t u, mp_size_t n) +{ + if (n >= 0 && n < GMP_ABS (u->_mp_size)) + return u->_mp_d[n]; + else + return 0; +} + + +/* Conversions and comparison to double. */ +void +mpz_set_d (mpz_t r, double x) +{ + int sign; + mp_ptr rp; + mp_size_t rn, i; + double B; + double Bi; + mp_limb_t f; + + /* x != x is true when x is a NaN, and x == x * 0.5 is true when x is + zero or infinity. */ + if (x == 0.0 || x != x || x == x * 0.5) + { + r->_mp_size = 0; + return; + } + + if (x < 0.0) + { + x = - x; + sign = 1; + } + else + sign = 0; + + if (x < 1.0) + { + r->_mp_size = 0; + return; + } + B = 2.0 * (double) GMP_LIMB_HIGHBIT; + Bi = 1.0 / B; + for (rn = 1; x >= B; rn++) + x *= Bi; + + rp = MPZ_REALLOC (r, rn); + + f = (mp_limb_t) x; + x -= f; + assert (x < 1.0); + rp[rn-1] = f; + for (i = rn-1; i-- > 0; ) + { + x = B * x; + f = (mp_limb_t) x; + x -= f; + assert (x < 1.0); + rp[i] = f; + } + + r->_mp_size = sign ? - rn : rn; +} + +void +mpz_init_set_d (mpz_t r, double x) +{ + mpz_init (r); + mpz_set_d (r, x); +} + +double +mpz_get_d (const mpz_t u) +{ + mp_size_t un; + double x; + double B = 2.0 * (double) GMP_LIMB_HIGHBIT; + + un = GMP_ABS (u->_mp_size); + + if (un == 0) + return 0.0; + + x = u->_mp_d[--un]; + while (un > 0) + x = B*x + u->_mp_d[--un]; + + if (u->_mp_size < 0) + x = -x; + + return x; +} + +int +mpz_cmpabs_d (const mpz_t x, double d) +{ + mp_size_t xn; + double B, Bi; + mp_size_t i; + + xn = x->_mp_size; + d = GMP_ABS (d); + + if (xn != 0) + { + xn = GMP_ABS (xn); + + B = 2.0 * (double) GMP_LIMB_HIGHBIT; + Bi = 1.0 / B; + + /* Scale d so it can be compared with the top limb. */ + for (i = 1; i < xn; i++) + d *= Bi; + + if (d >= B) + return -1; + + /* Compare floor(d) to top limb, subtract and cancel when equal. */ + for (i = xn; i-- > 0;) + { + mp_limb_t f, xl; + + f = (mp_limb_t) d; + xl = x->_mp_d[i]; + if (xl > f) + return 1; + else if (xl < f) + return -1; + d = B * (d - f); + } + } + return - (d > 0.0); +} + +int +mpz_cmp_d (const mpz_t x, double d) +{ + if (x->_mp_size < 0) + { + if (d >= 0.0) + return -1; + else + return -mpz_cmpabs_d (x, d); + } + else + { + if (d < 0.0) + return 1; + else + return mpz_cmpabs_d (x, d); + } +} + + +/* MPZ comparisons and the like. */ +int +mpz_sgn (const mpz_t u) +{ + mp_size_t usize = u->_mp_size; + + if (usize > 0) + return 1; + else if (usize < 0) + return -1; + else + return 0; +} + +int +mpz_cmp_si (const mpz_t u, long v) +{ + mp_size_t usize = u->_mp_size; + + if (usize < -1) + return -1; + else if (v >= 0) + return mpz_cmp_ui (u, v); + else if (usize >= 0) + return 1; + else /* usize == -1 */ + { + mp_limb_t ul = u->_mp_d[0]; + if ((mp_limb_t)GMP_NEG_CAST (unsigned long int, v) < ul) + return -1; + else if ( (mp_limb_t)GMP_NEG_CAST (unsigned long int, v) > ul) + return 1; + } + return 0; +} + +int +mpz_cmp_ui (const mpz_t u, unsigned long v) +{ + mp_size_t usize = u->_mp_size; + + if (usize > 1) + return 1; + else if (usize < 0) + return -1; + else + { + mp_limb_t ul = (usize > 0) ? u->_mp_d[0] : 0; + if (ul > v) + return 1; + else if (ul < v) + return -1; + } + return 0; +} + +int +mpz_cmp (const mpz_t a, const mpz_t b) +{ + mp_size_t asize = a->_mp_size; + mp_size_t bsize = b->_mp_size; + + if (asize > bsize) + return 1; + else if (asize < bsize) + return -1; + else if (asize > 0) + return mpn_cmp (a->_mp_d, b->_mp_d, asize); + else if (asize < 0) + return -mpn_cmp (a->_mp_d, b->_mp_d, -asize); + else + return 0; +} + +int +mpz_cmpabs_ui (const mpz_t u, unsigned long v) +{ + mp_size_t un = GMP_ABS (u->_mp_size); + mp_limb_t ul; + + if (un > 1) + return 1; + + ul = (un == 1) ? u->_mp_d[0] : 0; + + if (ul > v) + return 1; + else if (ul < v) + return -1; + else + return 0; +} + +int +mpz_cmpabs (const mpz_t u, const mpz_t v) +{ + return mpn_cmp4 (u->_mp_d, GMP_ABS (u->_mp_size), + v->_mp_d, GMP_ABS (v->_mp_size)); +} + +void +mpz_abs (mpz_t r, const mpz_t u) +{ + if (r != u) + mpz_set (r, u); + + r->_mp_size = GMP_ABS (r->_mp_size); +} + +void +mpz_neg (mpz_t r, const mpz_t u) +{ + if (r != u) + mpz_set (r, u); + + r->_mp_size = -r->_mp_size; +} + +void +mpz_swap (mpz_t u, mpz_t v) +{ + MP_SIZE_T_SWAP (u->_mp_size, v->_mp_size); + MP_SIZE_T_SWAP (u->_mp_alloc, v->_mp_alloc); + MP_PTR_SWAP (u->_mp_d, v->_mp_d); +} + + +/* MPZ addition and subtraction */ + +/* Adds to the absolute value. Returns new size, but doesn't store it. */ +static mp_size_t +mpz_abs_add_ui (mpz_t r, const mpz_t a, unsigned long b) +{ + mp_size_t an; + mp_ptr rp; + mp_limb_t cy; + + an = GMP_ABS (a->_mp_size); + if (an == 0) + { + r->_mp_d[0] = b; + return b > 0; + } + + rp = MPZ_REALLOC (r, an + 1); + + cy = mpn_add_1 (rp, a->_mp_d, an, b); + rp[an] = cy; + an += (cy > 0); + + return an; +} + +/* Subtract from the absolute value. Returns new size, (or -1 on underflow), + but doesn't store it. */ +static mp_size_t +mpz_abs_sub_ui (mpz_t r, const mpz_t a, unsigned long b) +{ + mp_size_t an = GMP_ABS (a->_mp_size); + mp_ptr rp = MPZ_REALLOC (r, an); + + if (an == 0) + { + rp[0] = b; + return -(b > 0); + } + else if (an == 1 && a->_mp_d[0] < b) + { + rp[0] = b - a->_mp_d[0]; + return -1; + } + else + { + gmp_assert_nocarry (mpn_sub_1 (rp, a->_mp_d, an, b)); + return mpn_normalized_size (rp, an); + } +} + +void +mpz_add_ui (mpz_t r, const mpz_t a, unsigned long b) +{ + if (a->_mp_size >= 0) + r->_mp_size = mpz_abs_add_ui (r, a, b); + else + r->_mp_size = -mpz_abs_sub_ui (r, a, b); +} + +void +mpz_sub_ui (mpz_t r, const mpz_t a, unsigned long b) +{ + if (a->_mp_size < 0) + r->_mp_size = -mpz_abs_add_ui (r, a, b); + else + r->_mp_size = mpz_abs_sub_ui (r, a, b); +} + +void +mpz_ui_sub (mpz_t r, unsigned long a, const mpz_t b) +{ + if (b->_mp_size < 0) + r->_mp_size = mpz_abs_add_ui (r, b, a); + else + r->_mp_size = -mpz_abs_sub_ui (r, b, a); +} + +static mp_size_t +mpz_abs_add (mpz_t r, const mpz_t a, const mpz_t b) +{ + mp_size_t an = GMP_ABS (a->_mp_size); + mp_size_t bn = GMP_ABS (b->_mp_size); + mp_size_t rn; + mp_ptr rp; + mp_limb_t cy; + + rn = GMP_MAX (an, bn); + rp = MPZ_REALLOC (r, rn + 1); + if (an >= bn) + cy = mpn_add (rp, a->_mp_d, an, b->_mp_d, bn); + else + cy = mpn_add (rp, b->_mp_d, bn, a->_mp_d, an); + + rp[rn] = cy; + + return rn + (cy > 0); +} + +static mp_size_t +mpz_abs_sub (mpz_t r, const mpz_t a, const mpz_t b) +{ + mp_size_t an = GMP_ABS (a->_mp_size); + mp_size_t bn = GMP_ABS (b->_mp_size); + int cmp; + mp_ptr rp; + + cmp = mpn_cmp4 (a->_mp_d, an, b->_mp_d, bn); + if (cmp > 0) + { + rp = MPZ_REALLOC (r, an); + gmp_assert_nocarry (mpn_sub (rp, a->_mp_d, an, b->_mp_d, bn)); + return mpn_normalized_size (rp, an); + } + else if (cmp < 0) + { + rp = MPZ_REALLOC (r, bn); + gmp_assert_nocarry (mpn_sub (rp, b->_mp_d, bn, a->_mp_d, an)); + return -mpn_normalized_size (rp, bn); + } + else + return 0; +} + +void +mpz_add (mpz_t r, const mpz_t a, const mpz_t b) +{ + mp_size_t rn; + + if ( (a->_mp_size ^ b->_mp_size) >= 0) + rn = mpz_abs_add (r, a, b); + else + rn = mpz_abs_sub (r, a, b); + + r->_mp_size = a->_mp_size >= 0 ? rn : - rn; +} + +void +mpz_sub (mpz_t r, const mpz_t a, const mpz_t b) +{ + mp_size_t rn; + + if ( (a->_mp_size ^ b->_mp_size) >= 0) + rn = mpz_abs_sub (r, a, b); + else + rn = mpz_abs_add (r, a, b); + + r->_mp_size = a->_mp_size >= 0 ? rn : - rn; +} + + +/* MPZ multiplication */ +void +mpz_mul_si (mpz_t r, const mpz_t u, long int v) +{ + if (v < 0) + { + mpz_mul_ui (r, u, GMP_NEG_CAST (unsigned long int, v)); + mpz_neg (r, r); + } + else + mpz_mul_ui (r, u, (unsigned long int) v); +} + +void +mpz_mul_ui (mpz_t r, const mpz_t u, unsigned long int v) +{ + mp_size_t un; + mpz_t t; + mp_ptr tp; + mp_limb_t cy; + + un = GMP_ABS (u->_mp_size); + + if (un == 0 || v == 0) + { + r->_mp_size = 0; + return; + } + + mpz_init2 (t, (un + 1) * GMP_LIMB_BITS); + + tp = t->_mp_d; + cy = mpn_mul_1 (tp, u->_mp_d, un, v); + tp[un] = cy; + + t->_mp_size = un + (cy > 0); + if (u->_mp_size < 0) + t->_mp_size = - t->_mp_size; + + mpz_swap (r, t); + mpz_clear (t); +} + +void +mpz_mul (mpz_t r, const mpz_t u, const mpz_t v) +{ + int sign; + mp_size_t un, vn, rn; + mpz_t t; + mp_ptr tp; + + un = GMP_ABS (u->_mp_size); + vn = GMP_ABS (v->_mp_size); + + if (un == 0 || vn == 0) + { + r->_mp_size = 0; + return; + } + + sign = (u->_mp_size ^ v->_mp_size) < 0; + + mpz_init2 (t, (un + vn) * GMP_LIMB_BITS); + + tp = t->_mp_d; + if (un >= vn) + mpn_mul (tp, u->_mp_d, un, v->_mp_d, vn); + else + mpn_mul (tp, v->_mp_d, vn, u->_mp_d, un); + + rn = un + vn; + rn -= tp[rn-1] == 0; + + t->_mp_size = sign ? - rn : rn; + mpz_swap (r, t); + mpz_clear (t); +} + +void +mpz_mul_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t bits) +{ + mp_size_t un, rn; + mp_size_t limbs; + unsigned shift; + mp_ptr rp; + + un = GMP_ABS (u->_mp_size); + if (un == 0) + { + r->_mp_size = 0; + return; + } + + limbs = bits / GMP_LIMB_BITS; + shift = bits % GMP_LIMB_BITS; + + rn = un + limbs + (shift > 0); + rp = MPZ_REALLOC (r, rn); + if (shift > 0) + { + mp_limb_t cy = mpn_lshift (rp + limbs, u->_mp_d, un, shift); + rp[rn-1] = cy; + rn -= (cy == 0); + } + else + mpn_copyd (rp + limbs, u->_mp_d, un); + + while (limbs > 0) + rp[--limbs] = 0; + + r->_mp_size = (u->_mp_size < 0) ? - rn : rn; +} + + +/* MPZ division */ +enum mpz_div_round_mode { GMP_DIV_FLOOR, GMP_DIV_CEIL, GMP_DIV_TRUNC }; + +/* Allows q or r to be zero. Returns 1 iff remainder is non-zero. */ +static int +mpz_div_qr (mpz_t q, mpz_t r, + const mpz_t n, const mpz_t d, enum mpz_div_round_mode mode) +{ + mp_size_t ns, ds, nn, dn, qs; + ns = n->_mp_size; + ds = d->_mp_size; + + if (ds == 0) + gmp_die("mpz_div_qr: Divide by zero."); + + if (ns == 0) + { + if (q) + q->_mp_size = 0; + if (r) + r->_mp_size = 0; + return 0; + } + + nn = GMP_ABS (ns); + dn = GMP_ABS (ds); + + qs = ds ^ ns; + + if (nn < dn) + { + if (mode == GMP_DIV_CEIL && qs >= 0) + { + /* q = 1, r = n - d */ + if (r) + mpz_sub (r, n, d); + if (q) + mpz_set_ui (q, 1); + } + else if (mode == GMP_DIV_FLOOR && qs < 0) + { + /* q = -1, r = n + d */ + if (r) + mpz_add (r, n, d); + if (q) + mpz_set_si (q, -1); + } + else + { + /* q = 0, r = d */ + if (r) + mpz_set (r, n); + if (q) + q->_mp_size = 0; + } + return 1; + } + else + { + mp_ptr np, qp; + mp_size_t qn, rn; + mpz_t tq, tr; + + mpz_init (tr); + mpz_set (tr, n); + np = tr->_mp_d; + + qn = nn - dn + 1; + + if (q) + { + mpz_init2 (tq, qn * GMP_LIMB_BITS); + qp = tq->_mp_d; + } + else + qp = NULL; + + mpn_div_qr (qp, np, nn, d->_mp_d, dn); + + if (qp) + { + qn -= (qp[qn-1] == 0); + + tq->_mp_size = qs < 0 ? -qn : qn; + } + rn = mpn_normalized_size (np, dn); + tr->_mp_size = ns < 0 ? - rn : rn; + + if (mode == GMP_DIV_FLOOR && qs < 0 && rn != 0) + { + if (q) + mpz_sub_ui (tq, tq, 1); + if (r) + mpz_add (tr, tr, d); + } + else if (mode == GMP_DIV_CEIL && qs >= 0 && rn != 0) + { + if (q) + mpz_add_ui (tq, tq, 1); + if (r) + mpz_sub (tr, tr, d); + } + + if (q) + { + mpz_swap (tq, q); + mpz_clear (tq); + } + if (r) + mpz_swap (tr, r); + + mpz_clear (tr); + + return rn != 0; + } +} + +void +mpz_cdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (q, r, n, d, GMP_DIV_CEIL); +} + +void +mpz_fdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (q, r, n, d, GMP_DIV_FLOOR); +} + +void +mpz_tdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (q, r, n, d, GMP_DIV_TRUNC); +} + +void +mpz_cdiv_q (mpz_t q, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (q, NULL, n, d, GMP_DIV_CEIL); +} + +void +mpz_fdiv_q (mpz_t q, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (q, NULL, n, d, GMP_DIV_FLOOR); +} + +void +mpz_tdiv_q (mpz_t q, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (q, NULL, n, d, GMP_DIV_TRUNC); +} + +void +mpz_cdiv_r (mpz_t r, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (NULL, r, n, d, GMP_DIV_CEIL); +} + +void +mpz_fdiv_r (mpz_t r, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (NULL, r, n, d, GMP_DIV_FLOOR); +} + +void +mpz_tdiv_r (mpz_t r, const mpz_t n, const mpz_t d) +{ + mpz_div_qr (NULL, r, n, d, GMP_DIV_TRUNC); +} + +void +mpz_mod (mpz_t r, const mpz_t n, const mpz_t d) +{ + if (d->_mp_size >= 0) + mpz_div_qr (NULL, r, n, d, GMP_DIV_FLOOR); + else + mpz_div_qr (NULL, r, n, d, GMP_DIV_CEIL); +} + +static void +mpz_div_q_2exp (mpz_t q, const mpz_t u, mp_bitcnt_t bit_index, + enum mpz_div_round_mode mode) +{ + mp_size_t un, qn; + mp_size_t limb_cnt; + mp_ptr qp; + mp_limb_t adjust; + + un = u->_mp_size; + if (un == 0) + { + q->_mp_size = 0; + return; + } + limb_cnt = bit_index / GMP_LIMB_BITS; + qn = GMP_ABS (un) - limb_cnt; + bit_index %= GMP_LIMB_BITS; + + if (mode == ((un > 0) ? GMP_DIV_CEIL : GMP_DIV_FLOOR)) /* un != 0 here. */ + /* Note: Below, the final indexing at limb_cnt is valid because at + that point we have qn > 0. */ + adjust = (qn <= 0 + || !mpn_zero_p (u->_mp_d, limb_cnt) + || (u->_mp_d[limb_cnt] + & (((mp_limb_t) 1 << bit_index) - 1))); + else + adjust = 0; + + if (qn <= 0) + qn = 0; + + else + { + qp = MPZ_REALLOC (q, qn); + + if (bit_index != 0) + { + mpn_rshift (qp, u->_mp_d + limb_cnt, qn, bit_index); + qn -= qp[qn - 1] == 0; + } + else + { + mpn_copyi (qp, u->_mp_d + limb_cnt, qn); + } + } + + q->_mp_size = qn; + + mpz_add_ui (q, q, adjust); + if (un < 0) + mpz_neg (q, q); +} + +static void +mpz_div_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t bit_index, + enum mpz_div_round_mode mode) +{ + mp_size_t us, un, rn; + mp_ptr rp; + mp_limb_t mask; + + us = u->_mp_size; + if (us == 0 || bit_index == 0) + { + r->_mp_size = 0; + return; + } + rn = (bit_index + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + assert (rn > 0); + + rp = MPZ_REALLOC (r, rn); + un = GMP_ABS (us); + + mask = GMP_LIMB_MAX >> (rn * GMP_LIMB_BITS - bit_index); + + if (rn > un) + { + /* Quotient (with truncation) is zero, and remainder is + non-zero */ + if (mode == ((us > 0) ? GMP_DIV_CEIL : GMP_DIV_FLOOR)) /* us != 0 here. */ + { + /* Have to negate and sign extend. */ + mp_size_t i; + mp_limb_t cy; + + for (cy = 1, i = 0; i < un; i++) + { + mp_limb_t s = ~u->_mp_d[i] + cy; + cy = s < cy; + rp[i] = s; + } + assert (cy == 0); + for (; i < rn - 1; i++) + rp[i] = GMP_LIMB_MAX; + + rp[rn-1] = mask; + us = -us; + } + else + { + /* Just copy */ + if (r != u) + mpn_copyi (rp, u->_mp_d, un); + + rn = un; + } + } + else + { + if (r != u) + mpn_copyi (rp, u->_mp_d, rn - 1); + + rp[rn-1] = u->_mp_d[rn-1] & mask; + + if (mode == ((us > 0) ? GMP_DIV_CEIL : GMP_DIV_FLOOR)) /* us != 0 here. */ + { + /* If r != 0, compute 2^{bit_count} - r. */ + mp_size_t i; + + for (i = 0; i < rn && rp[i] == 0; i++) + ; + if (i < rn) + { + /* r > 0, need to flip sign. */ + rp[i] = ~rp[i] + 1; + for (i++; i < rn; i++) + rp[i] = ~rp[i]; + + rp[rn-1] &= mask; + + /* us is not used for anything else, so we can modify it + here to indicate flipped sign. */ + us = -us; + } + } + } + rn = mpn_normalized_size (rp, rn); + r->_mp_size = us < 0 ? -rn : rn; +} + +void +mpz_cdiv_q_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) +{ + mpz_div_q_2exp (r, u, cnt, GMP_DIV_CEIL); +} + +void +mpz_fdiv_q_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) +{ + mpz_div_q_2exp (r, u, cnt, GMP_DIV_FLOOR); +} + +void +mpz_tdiv_q_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) +{ + mpz_div_q_2exp (r, u, cnt, GMP_DIV_TRUNC); +} + +void +mpz_cdiv_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) +{ + mpz_div_r_2exp (r, u, cnt, GMP_DIV_CEIL); +} + +void +mpz_fdiv_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) +{ + mpz_div_r_2exp (r, u, cnt, GMP_DIV_FLOOR); +} + +void +mpz_tdiv_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) +{ + mpz_div_r_2exp (r, u, cnt, GMP_DIV_TRUNC); +} + +void +mpz_divexact (mpz_t q, const mpz_t n, const mpz_t d) +{ + gmp_assert_nocarry (mpz_div_qr (q, NULL, n, d, GMP_DIV_TRUNC)); +} + +int +mpz_divisible_p (const mpz_t n, const mpz_t d) +{ + return mpz_div_qr (NULL, NULL, n, d, GMP_DIV_TRUNC) == 0; +} + +static unsigned long +mpz_div_qr_ui (mpz_t q, mpz_t r, + const mpz_t n, unsigned long d, enum mpz_div_round_mode mode) +{ + mp_size_t ns, qn; + mp_ptr qp; + mp_limb_t rl; + mp_size_t rs; + + ns = n->_mp_size; + if (ns == 0) + { + if (q) + q->_mp_size = 0; + if (r) + r->_mp_size = 0; + return 0; + } + + qn = GMP_ABS (ns); + if (q) + qp = MPZ_REALLOC (q, qn); + else + qp = NULL; + + rl = mpn_div_qr_1 (qp, n->_mp_d, qn, d); + assert (rl < d); + + rs = rl > 0; + rs = (ns < 0) ? -rs : rs; + + if (rl > 0 && ( (mode == GMP_DIV_FLOOR && ns < 0) + || (mode == GMP_DIV_CEIL && ns >= 0))) + { + if (q) + gmp_assert_nocarry (mpn_add_1 (qp, qp, qn, 1)); + rl = d - rl; + rs = -rs; + } + + if (r) + { + r->_mp_d[0] = rl; + r->_mp_size = rs; + } + if (q) + { + qn -= (qp[qn-1] == 0); + assert (qn == 0 || qp[qn-1] > 0); + + q->_mp_size = (ns < 0) ? - qn : qn; + } + + return rl; +} + +unsigned long +mpz_cdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (q, r, n, d, GMP_DIV_CEIL); +} + +unsigned long +mpz_fdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (q, r, n, d, GMP_DIV_FLOOR); +} + +unsigned long +mpz_tdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (q, r, n, d, GMP_DIV_TRUNC); +} + +unsigned long +mpz_cdiv_q_ui (mpz_t q, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_CEIL); +} + +unsigned long +mpz_fdiv_q_ui (mpz_t q, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_FLOOR); +} + +unsigned long +mpz_tdiv_q_ui (mpz_t q, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_TRUNC); +} + +unsigned long +mpz_cdiv_r_ui (mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_CEIL); +} +unsigned long +mpz_fdiv_r_ui (mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_FLOOR); +} +unsigned long +mpz_tdiv_r_ui (mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_TRUNC); +} + +unsigned long +mpz_cdiv_ui (const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_CEIL); +} + +unsigned long +mpz_fdiv_ui (const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_FLOOR); +} + +unsigned long +mpz_tdiv_ui (const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_TRUNC); +} + +unsigned long +mpz_mod_ui (mpz_t r, const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_FLOOR); +} + +void +mpz_divexact_ui (mpz_t q, const mpz_t n, unsigned long d) +{ + gmp_assert_nocarry (mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_TRUNC)); +} + +int +mpz_divisible_ui_p (const mpz_t n, unsigned long d) +{ + return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_TRUNC) == 0; +} + + +/* GCD */ +static mp_limb_t +mpn_gcd_11 (mp_limb_t u, mp_limb_t v) +{ + unsigned shift; + + assert ( (u | v) > 0); + + if (u == 0) + return v; + else if (v == 0) + return u; + + gmp_ctz (shift, u | v); + + u >>= shift; + v >>= shift; + + if ( (u & 1) == 0) + MP_LIMB_T_SWAP (u, v); + + while ( (v & 1) == 0) + v >>= 1; + + while (u != v) + { + if (u > v) + { + u -= v; + do + u >>= 1; + while ( (u & 1) == 0); + } + else + { + v -= u; + do + v >>= 1; + while ( (v & 1) == 0); + } + } + return u << shift; +} + +unsigned long +mpz_gcd_ui (mpz_t g, const mpz_t u, unsigned long v) +{ + mp_size_t un; + + if (v == 0) + { + if (g) + mpz_abs (g, u); + } + else + { + un = GMP_ABS (u->_mp_size); + if (un != 0) + v = mpn_gcd_11 (mpn_div_qr_1 (NULL, u->_mp_d, un, v), v); + + if (g) + mpz_set_ui (g, v); + } + + return v; +} + +static mp_bitcnt_t +mpz_make_odd (mpz_t r, const mpz_t u) +{ + mp_size_t un, rn, i; + mp_ptr rp; + unsigned shift; + + un = GMP_ABS (u->_mp_size); + assert (un > 0); + + for (i = 0; u->_mp_d[i] == 0; i++) + ; + + gmp_ctz (shift, u->_mp_d[i]); + + rn = un - i; + rp = MPZ_REALLOC (r, rn); + if (shift > 0) + { + mpn_rshift (rp, u->_mp_d + i, rn, shift); + rn -= (rp[rn-1] == 0); + } + else + mpn_copyi (rp, u->_mp_d + i, rn); + + r->_mp_size = rn; + return i * GMP_LIMB_BITS + shift; +} + +void +mpz_gcd (mpz_t g, const mpz_t u, const mpz_t v) +{ + mpz_t tu, tv; + mp_bitcnt_t uz, vz, gz; + + if (u->_mp_size == 0) + { + mpz_abs (g, v); + return; + } + if (v->_mp_size == 0) + { + mpz_abs (g, u); + return; + } + + mpz_init (tu); + mpz_init (tv); + + uz = mpz_make_odd (tu, u); + vz = mpz_make_odd (tv, v); + gz = GMP_MIN (uz, vz); + + if (tu->_mp_size < tv->_mp_size) + mpz_swap (tu, tv); + + mpz_tdiv_r (tu, tu, tv); + if (tu->_mp_size == 0) + { + mpz_swap (g, tv); + } + else + for (;;) + { + int c; + + mpz_make_odd (tu, tu); + c = mpz_cmp (tu, tv); + if (c == 0) + { + mpz_swap (g, tu); + break; + } + if (c < 0) + mpz_swap (tu, tv); + + if (tv->_mp_size == 1) + { + mp_limb_t vl = tv->_mp_d[0]; + mp_limb_t ul = mpz_tdiv_ui (tu, vl); + mpz_set_ui (g, mpn_gcd_11 (ul, vl)); + break; + } + mpz_sub (tu, tu, tv); + } + mpz_clear (tu); + mpz_clear (tv); + mpz_mul_2exp (g, g, gz); +} + +void +mpz_gcdext (mpz_t g, mpz_t s, mpz_t t, const mpz_t u, const mpz_t v) +{ + mpz_t tu, tv, s0, s1, t0, t1; + mp_bitcnt_t uz, vz, gz; + mp_bitcnt_t power; + + if (u->_mp_size == 0) + { + /* g = 0 u + sgn(v) v */ + signed long sign = mpz_sgn (v); + mpz_abs (g, v); + if (s) + mpz_set_ui (s, 0); + if (t) + mpz_set_si (t, sign); + return; + } + + if (v->_mp_size == 0) + { + /* g = sgn(u) u + 0 v */ + signed long sign = mpz_sgn (u); + mpz_abs (g, u); + if (s) + mpz_set_si (s, sign); + if (t) + mpz_set_ui (t, 0); + return; + } + + mpz_init (tu); + mpz_init (tv); + mpz_init (s0); + mpz_init (s1); + mpz_init (t0); + mpz_init (t1); + + uz = mpz_make_odd (tu, u); + vz = mpz_make_odd (tv, v); + gz = GMP_MIN (uz, vz); + + uz -= gz; + vz -= gz; + + /* Cofactors corresponding to odd gcd. gz handled later. */ + if (tu->_mp_size < tv->_mp_size) + { + mpz_swap (tu, tv); + MPZ_SRCPTR_SWAP (u, v); + MPZ_PTR_SWAP (s, t); + MP_BITCNT_T_SWAP (uz, vz); + } + + /* Maintain + * + * u = t0 tu + t1 tv + * v = s0 tu + s1 tv + * + * where u and v denote the inputs with common factors of two + * eliminated, and det (s0, t0; s1, t1) = 2^p. Then + * + * 2^p tu = s1 u - t1 v + * 2^p tv = -s0 u + t0 v + */ + + /* After initial division, tu = q tv + tu', we have + * + * u = 2^uz (tu' + q tv) + * v = 2^vz tv + * + * or + * + * t0 = 2^uz, t1 = 2^uz q + * s0 = 0, s1 = 2^vz + */ + + mpz_setbit (t0, uz); + mpz_tdiv_qr (t1, tu, tu, tv); + mpz_mul_2exp (t1, t1, uz); + + mpz_setbit (s1, vz); + power = uz + vz; + + if (tu->_mp_size > 0) + { + mp_bitcnt_t shift; + shift = mpz_make_odd (tu, tu); + mpz_mul_2exp (t0, t0, shift); + mpz_mul_2exp (s0, s0, shift); + power += shift; + + for (;;) + { + int c; + c = mpz_cmp (tu, tv); + if (c == 0) + break; + + if (c < 0) + { + /* tv = tv' + tu + * + * u = t0 tu + t1 (tv' + tu) = (t0 + t1) tu + t1 tv' + * v = s0 tu + s1 (tv' + tu) = (s0 + s1) tu + s1 tv' */ + + mpz_sub (tv, tv, tu); + mpz_add (t0, t0, t1); + mpz_add (s0, s0, s1); + + shift = mpz_make_odd (tv, tv); + mpz_mul_2exp (t1, t1, shift); + mpz_mul_2exp (s1, s1, shift); + } + else + { + mpz_sub (tu, tu, tv); + mpz_add (t1, t0, t1); + mpz_add (s1, s0, s1); + + shift = mpz_make_odd (tu, tu); + mpz_mul_2exp (t0, t0, shift); + mpz_mul_2exp (s0, s0, shift); + } + power += shift; + } + } + + /* Now tv = odd part of gcd, and -s0 and t0 are corresponding + cofactors. */ + + mpz_mul_2exp (tv, tv, gz); + mpz_neg (s0, s0); + + /* 2^p g = s0 u + t0 v. Eliminate one factor of two at a time. To + adjust cofactors, we need u / g and v / g */ + + mpz_divexact (s1, v, tv); + mpz_abs (s1, s1); + mpz_divexact (t1, u, tv); + mpz_abs (t1, t1); + + while (power-- > 0) + { + /* s0 u + t0 v = (s0 - v/g) u - (t0 + u/g) v */ + if (mpz_odd_p (s0) || mpz_odd_p (t0)) + { + mpz_sub (s0, s0, s1); + mpz_add (t0, t0, t1); + } + mpz_divexact_ui (s0, s0, 2); + mpz_divexact_ui (t0, t0, 2); + } + + /* Arrange so that |s| < |u| / 2g */ + mpz_add (s1, s0, s1); + if (mpz_cmpabs (s0, s1) > 0) + { + mpz_swap (s0, s1); + mpz_sub (t0, t0, t1); + } + if (u->_mp_size < 0) + mpz_neg (s0, s0); + if (v->_mp_size < 0) + mpz_neg (t0, t0); + + mpz_swap (g, tv); + if (s) + mpz_swap (s, s0); + if (t) + mpz_swap (t, t0); + + mpz_clear (tu); + mpz_clear (tv); + mpz_clear (s0); + mpz_clear (s1); + mpz_clear (t0); + mpz_clear (t1); +} + +void +mpz_lcm (mpz_t r, const mpz_t u, const mpz_t v) +{ + mpz_t g; + + if (u->_mp_size == 0 || v->_mp_size == 0) + { + r->_mp_size = 0; + return; + } + + mpz_init (g); + + mpz_gcd (g, u, v); + mpz_divexact (g, u, g); + mpz_mul (r, g, v); + + mpz_clear (g); + mpz_abs (r, r); +} + +void +mpz_lcm_ui (mpz_t r, const mpz_t u, unsigned long v) +{ + if (v == 0 || u->_mp_size == 0) + { + r->_mp_size = 0; + return; + } + + v /= mpz_gcd_ui (NULL, u, v); + mpz_mul_ui (r, u, v); + + mpz_abs (r, r); +} + +int +mpz_invert (mpz_t r, const mpz_t u, const mpz_t m) +{ + mpz_t g, tr; + int invertible; + + if (u->_mp_size == 0 || mpz_cmpabs_ui (m, 1) <= 0) + return 0; + + mpz_init (g); + mpz_init (tr); + + mpz_gcdext (g, tr, NULL, u, m); + invertible = (mpz_cmp_ui (g, 1) == 0); + + if (invertible) + { + if (tr->_mp_size < 0) + { + if (m->_mp_size >= 0) + mpz_add (tr, tr, m); + else + mpz_sub (tr, tr, m); + } + mpz_swap (r, tr); + } + + mpz_clear (g); + mpz_clear (tr); + return invertible; +} + + +/* Higher level operations (sqrt, pow and root) */ + +void +mpz_pow_ui (mpz_t r, const mpz_t b, unsigned long e) +{ + unsigned long bit; + mpz_t tr; + mpz_init_set_ui (tr, 1); + + for (bit = GMP_ULONG_HIGHBIT; bit > 0; bit >>= 1) + { + mpz_mul (tr, tr, tr); + if (e & bit) + mpz_mul (tr, tr, b); + } + mpz_swap (r, tr); + mpz_clear (tr); +} + +void +mpz_ui_pow_ui (mpz_t r, unsigned long blimb, unsigned long e) +{ + mpz_t b; + mpz_init_set_ui (b, blimb); + mpz_pow_ui (r, b, e); + mpz_clear (b); +} + +void +mpz_powm (mpz_t r, const mpz_t b, const mpz_t e, const mpz_t m) +{ + mpz_t tr; + mpz_t base; + mp_size_t en, mn; + mp_srcptr mp; + struct gmp_div_inverse minv; + unsigned shift; + mp_ptr tp = NULL; + + en = GMP_ABS (e->_mp_size); + mn = GMP_ABS (m->_mp_size); + if (mn == 0) + gmp_die ("mpz_powm: Zero modulo."); + + if (en == 0) + { + mpz_set_ui (r, 1); + return; + } + + mp = m->_mp_d; + mpn_div_qr_invert (&minv, mp, mn); + shift = minv.shift; + + if (shift > 0) + { + /* To avoid shifts, we do all our reductions, except the final + one, using a *normalized* m. */ + minv.shift = 0; + + tp = gmp_xalloc_limbs (mn); + gmp_assert_nocarry (mpn_lshift (tp, mp, mn, shift)); + mp = tp; + } + + mpz_init (base); + + if (e->_mp_size < 0) + { + if (!mpz_invert (base, b, m)) + gmp_die ("mpz_powm: Negative exponent and non-invertibe base."); + } + else + { + mp_size_t bn; + mpz_abs (base, b); + + bn = base->_mp_size; + if (bn >= mn) + { + mpn_div_qr_preinv (NULL, base->_mp_d, base->_mp_size, mp, mn, &minv); + bn = mn; + } + + /* We have reduced the absolute value. Now take care of the + sign. Note that we get zero represented non-canonically as + m. */ + if (b->_mp_size < 0) + { + mp_ptr bp = MPZ_REALLOC (base, mn); + gmp_assert_nocarry (mpn_sub (bp, mp, mn, bp, bn)); + bn = mn; + } + base->_mp_size = mpn_normalized_size (base->_mp_d, bn); + } + mpz_init_set_ui (tr, 1); + + while (en-- > 0) + { + mp_limb_t w = e->_mp_d[en]; + mp_limb_t bit; + + for (bit = GMP_LIMB_HIGHBIT; bit > 0; bit >>= 1) + { + mpz_mul (tr, tr, tr); + if (w & bit) + mpz_mul (tr, tr, base); + if (tr->_mp_size > mn) + { + mpn_div_qr_preinv (NULL, tr->_mp_d, tr->_mp_size, mp, mn, &minv); + tr->_mp_size = mpn_normalized_size (tr->_mp_d, mn); + } + } + } + + /* Final reduction */ + if (tr->_mp_size >= mn) + { + minv.shift = shift; + mpn_div_qr_preinv (NULL, tr->_mp_d, tr->_mp_size, mp, mn, &minv); + tr->_mp_size = mpn_normalized_size (tr->_mp_d, mn); + } + if (tp) + gmp_free (tp); + + mpz_swap (r, tr); + mpz_clear (tr); + mpz_clear (base); +} + +void +mpz_powm_ui (mpz_t r, const mpz_t b, unsigned long elimb, const mpz_t m) +{ + mpz_t e; + mpz_init_set_ui (e, elimb); + mpz_powm (r, b, e, m); + mpz_clear (e); +} + +/* x=trunc(y^(1/z)), r=y-x^z */ +void +mpz_rootrem (mpz_t x, mpz_t r, const mpz_t y, unsigned long z) +{ + int sgn; + mpz_t t, u; + + sgn = y->_mp_size < 0; + if (sgn && (z & 1) == 0) + gmp_die ("mpz_rootrem: Negative argument, with even root."); + if (z == 0) + gmp_die ("mpz_rootrem: Zeroth root."); + + if (mpz_cmpabs_ui (y, 1) <= 0) { + mpz_set (x, y); + if (r) + r->_mp_size = 0; + return; + } + + mpz_init (t); + mpz_init (u); + mpz_setbit (t, mpz_sizeinbase (y, 2) / z + 1); + + if (z == 2) /* simplify sqrt loop: z-1 == 1 */ + do { + mpz_swap (u, t); /* u = x */ + mpz_tdiv_q (t, y, u); /* t = y/x */ + mpz_add (t, t, u); /* t = y/x + x */ + mpz_tdiv_q_2exp (t, t, 1); /* x'= (y/x + x)/2 */ + } while (mpz_cmpabs (t, u) < 0); /* |x'| < |x| */ + else /* z != 2 */ { + mpz_t v; + + mpz_init (v); + if (sgn) + mpz_neg (t, t); + + do { + mpz_swap (u, t); /* u = x */ + mpz_pow_ui (t, u, z - 1); /* t = x^(z-1) */ + mpz_tdiv_q (t, y, t); /* t = y/x^(z-1) */ + mpz_mul_ui (v, u, z - 1); /* v = x*(z-1) */ + mpz_add (t, t, v); /* t = y/x^(z-1) + x*(z-1) */ + mpz_tdiv_q_ui (t, t, z); /* x'=(y/x^(z-1) + x*(z-1))/z */ + } while (mpz_cmpabs (t, u) < 0); /* |x'| < |x| */ + + mpz_clear (v); + } + + if (r) { + mpz_pow_ui (t, u, z); + mpz_sub (r, y, t); + } + mpz_swap (x, u); + mpz_clear (u); + mpz_clear (t); +} + +int +mpz_root (mpz_t x, const mpz_t y, unsigned long z) +{ + int res; + mpz_t r; + + mpz_init (r); + mpz_rootrem (x, r, y, z); + res = r->_mp_size == 0; + mpz_clear (r); + + return res; +} + +/* Compute s = floor(sqrt(u)) and r = u - s^2. Allows r == NULL */ +void +mpz_sqrtrem (mpz_t s, mpz_t r, const mpz_t u) +{ + mpz_rootrem (s, r, u, 2); +} + +void +mpz_sqrt (mpz_t s, const mpz_t u) +{ + mpz_rootrem (s, NULL, u, 2); +} + + +/* Combinatorics */ + +void +mpz_fac_ui (mpz_t x, unsigned long n) +{ + if (n < 2) { + mpz_set_ui (x, 1); + return; + } + mpz_set_ui (x, n); + for (;--n > 1;) + mpz_mul_ui (x, x, n); +} + +void +mpz_bin_uiui (mpz_t r, unsigned long n, unsigned long k) +{ + mpz_t t; + + if (k > n) { + r->_mp_size = 0; + return; + } + mpz_fac_ui (r, n); + mpz_init (t); + mpz_fac_ui (t, k); + mpz_divexact (r, r, t); + mpz_fac_ui (t, n - k); + mpz_divexact (r, r, t); + mpz_clear (t); +} + + +/* Logical operations and bit manipulation. */ + +/* Numbers are treated as if represented in two's complement (and + infinitely sign extended). For a negative values we get the two's + complement from -x = ~x + 1, where ~ is bitwise complementt. + Negation transforms + + xxxx10...0 + + into + + yyyy10...0 + + where yyyy is the bitwise complement of xxxx. So least significant + bits, up to and including the first one bit, are unchanged, and + the more significant bits are all complemented. + + To change a bit from zero to one in a negative number, subtract the + corresponding power of two from the absolute value. This can never + underflow. To change a bit from one to zero, add the corresponding + power of two, and this might overflow. E.g., if x = -001111, the + two's complement is 110001. Clearing the least significant bit, we + get two's complement 110000, and -010000. */ + +int +mpz_tstbit (const mpz_t d, mp_bitcnt_t bit_index) +{ + mp_size_t limb_index; + unsigned shift; + mp_size_t ds; + mp_size_t dn; + mp_limb_t w; + int bit; + + ds = d->_mp_size; + dn = GMP_ABS (ds); + limb_index = bit_index / GMP_LIMB_BITS; + if (limb_index >= dn) + return ds < 0; + + shift = bit_index % GMP_LIMB_BITS; + w = d->_mp_d[limb_index]; + bit = (w >> shift) & 1; + + if (ds < 0) + { + /* d < 0. Check if any of the bits below is set: If so, our bit + must be complemented. */ + if (shift > 0 && (w << (GMP_LIMB_BITS - shift)) > 0) + return bit ^ 1; + while (limb_index-- > 0) + if (d->_mp_d[limb_index] > 0) + return bit ^ 1; + } + return bit; +} + +static void +mpz_abs_add_bit (mpz_t d, mp_bitcnt_t bit_index) +{ + mp_size_t dn, limb_index; + mp_limb_t bit; + mp_ptr dp; + + dn = GMP_ABS (d->_mp_size); + + limb_index = bit_index / GMP_LIMB_BITS; + bit = (mp_limb_t) 1 << (bit_index % GMP_LIMB_BITS); + + if (limb_index >= dn) + { + mp_size_t i; + /* The bit should be set outside of the end of the number. + We have to increase the size of the number. */ + dp = MPZ_REALLOC (d, limb_index + 1); + + dp[limb_index] = bit; + for (i = dn; i < limb_index; i++) + dp[i] = 0; + dn = limb_index + 1; + } + else + { + mp_limb_t cy; + + dp = d->_mp_d; + + cy = mpn_add_1 (dp + limb_index, dp + limb_index, dn - limb_index, bit); + if (cy > 0) + { + dp = MPZ_REALLOC (d, dn + 1); + dp[dn++] = cy; + } + } + + d->_mp_size = (d->_mp_size < 0) ? - dn : dn; +} + +static void +mpz_abs_sub_bit (mpz_t d, mp_bitcnt_t bit_index) +{ + mp_size_t dn, limb_index; + mp_ptr dp; + mp_limb_t bit; + + dn = GMP_ABS (d->_mp_size); + dp = d->_mp_d; + + limb_index = bit_index / GMP_LIMB_BITS; + bit = (mp_limb_t) 1 << (bit_index % GMP_LIMB_BITS); + + assert (limb_index < dn); + + gmp_assert_nocarry (mpn_sub_1 (dp + limb_index, dp + limb_index, + dn - limb_index, bit)); + dn -= (dp[dn-1] == 0); + d->_mp_size = (d->_mp_size < 0) ? - dn : dn; +} + +void +mpz_setbit (mpz_t d, mp_bitcnt_t bit_index) +{ + if (!mpz_tstbit (d, bit_index)) + { + if (d->_mp_size >= 0) + mpz_abs_add_bit (d, bit_index); + else + mpz_abs_sub_bit (d, bit_index); + } +} + +void +mpz_clrbit (mpz_t d, mp_bitcnt_t bit_index) +{ + if (mpz_tstbit (d, bit_index)) + { + if (d->_mp_size >= 0) + mpz_abs_sub_bit (d, bit_index); + else + mpz_abs_add_bit (d, bit_index); + } +} + +void +mpz_combit (mpz_t d, mp_bitcnt_t bit_index) +{ + if (mpz_tstbit (d, bit_index) ^ (d->_mp_size < 0)) + mpz_abs_sub_bit (d, bit_index); + else + mpz_abs_add_bit (d, bit_index); +} + +void +mpz_com (mpz_t r, const mpz_t u) +{ + mpz_neg (r, u); + mpz_sub_ui (r, r, 1); +} + +void +mpz_and (mpz_t r, const mpz_t u, const mpz_t v) +{ + mp_size_t un, vn, rn, i; + mp_ptr up, vp, rp; + + mp_limb_t ux, vx, rx; + mp_limb_t uc, vc, rc; + mp_limb_t ul, vl, rl; + + un = GMP_ABS (u->_mp_size); + vn = GMP_ABS (v->_mp_size); + if (un < vn) + { + MPZ_SRCPTR_SWAP (u, v); + MP_SIZE_T_SWAP (un, vn); + } + if (vn == 0) + { + r->_mp_size = 0; + return; + } + + uc = u->_mp_size < 0; + vc = v->_mp_size < 0; + rc = uc & vc; + + ux = -uc; + vx = -vc; + rx = -rc; + + /* If the smaller input is positive, higher limbs don't matter. */ + rn = vx ? un : vn; + + rp = MPZ_REALLOC (r, rn + rc); + + up = u->_mp_d; + vp = v->_mp_d; + + for (i = 0; i < vn; i++) + { + ul = (up[i] ^ ux) + uc; + uc = ul < uc; + + vl = (vp[i] ^ vx) + vc; + vc = vl < vc; + + rl = ( (ul & vl) ^ rx) + rc; + rc = rl < rc; + rp[i] = rl; + } + assert (vc == 0); + + for (; i < rn; i++) + { + ul = (up[i] ^ ux) + uc; + uc = ul < uc; + + rl = ( (ul & vx) ^ rx) + rc; + rc = rl < rc; + rp[i] = rl; + } + if (rc) + rp[rn++] = rc; + else + rn = mpn_normalized_size (rp, rn); + + r->_mp_size = rx ? -rn : rn; +} + +void +mpz_ior (mpz_t r, const mpz_t u, const mpz_t v) +{ + mp_size_t un, vn, rn, i; + mp_ptr up, vp, rp; + + mp_limb_t ux, vx, rx; + mp_limb_t uc, vc, rc; + mp_limb_t ul, vl, rl; + + un = GMP_ABS (u->_mp_size); + vn = GMP_ABS (v->_mp_size); + if (un < vn) + { + MPZ_SRCPTR_SWAP (u, v); + MP_SIZE_T_SWAP (un, vn); + } + if (vn == 0) + { + mpz_set (r, u); + return; + } + + uc = u->_mp_size < 0; + vc = v->_mp_size < 0; + rc = uc | vc; + + ux = -uc; + vx = -vc; + rx = -rc; + + /* If the smaller input is negative, by sign extension higher limbs + don't matter. */ + rn = vx ? vn : un; + + rp = MPZ_REALLOC (r, rn + rc); + + up = u->_mp_d; + vp = v->_mp_d; + + for (i = 0; i < vn; i++) + { + ul = (up[i] ^ ux) + uc; + uc = ul < uc; + + vl = (vp[i] ^ vx) + vc; + vc = vl < vc; + + rl = ( (ul | vl) ^ rx) + rc; + rc = rl < rc; + rp[i] = rl; + } + assert (vc == 0); + + for (; i < rn; i++) + { + ul = (up[i] ^ ux) + uc; + uc = ul < uc; + + rl = ( (ul | vx) ^ rx) + rc; + rc = rl < rc; + rp[i] = rl; + } + if (rc) + rp[rn++] = rc; + else + rn = mpn_normalized_size (rp, rn); + + r->_mp_size = rx ? -rn : rn; +} + +void +mpz_xor (mpz_t r, const mpz_t u, const mpz_t v) +{ + mp_size_t un, vn, i; + mp_ptr up, vp, rp; + + mp_limb_t ux, vx, rx; + mp_limb_t uc, vc, rc; + mp_limb_t ul, vl, rl; + + un = GMP_ABS (u->_mp_size); + vn = GMP_ABS (v->_mp_size); + if (un < vn) + { + MPZ_SRCPTR_SWAP (u, v); + MP_SIZE_T_SWAP (un, vn); + } + if (vn == 0) + { + mpz_set (r, u); + return; + } + + uc = u->_mp_size < 0; + vc = v->_mp_size < 0; + rc = uc ^ vc; + + ux = -uc; + vx = -vc; + rx = -rc; + + rp = MPZ_REALLOC (r, un + rc); + + up = u->_mp_d; + vp = v->_mp_d; + + for (i = 0; i < vn; i++) + { + ul = (up[i] ^ ux) + uc; + uc = ul < uc; + + vl = (vp[i] ^ vx) + vc; + vc = vl < vc; + + rl = (ul ^ vl ^ rx) + rc; + rc = rl < rc; + rp[i] = rl; + } + assert (vc == 0); + + for (; i < un; i++) + { + ul = (up[i] ^ ux) + uc; + uc = ul < uc; + + rl = (ul ^ ux) + rc; + rc = rl < rc; + rp[i] = rl; + } + if (rc) + rp[un++] = rc; + else + un = mpn_normalized_size (rp, un); + + r->_mp_size = rx ? -un : un; +} + +static unsigned +gmp_popcount_limb (mp_limb_t x) +{ + unsigned c; + + /* Do 16 bits at a time, to avoid limb-sized constants. */ + for (c = 0; x > 0; x >>= 16) + { + unsigned w = ((x >> 1) & 0x5555) + (x & 0x5555); + w = ((w >> 2) & 0x3333) + (w & 0x3333); + w = ((w >> 4) & 0x0f0f) + (w & 0x0f0f); + w = (w >> 8) + (w & 0x00ff); + c += w; + } + return c; +} + +mp_bitcnt_t +mpz_popcount (const mpz_t u) +{ + mp_size_t un, i; + mp_bitcnt_t c; + + un = u->_mp_size; + + if (un < 0) + return ~(mp_bitcnt_t) 0; + + for (c = 0, i = 0; i < un; i++) + c += gmp_popcount_limb (u->_mp_d[i]); + + return c; +} + +mp_bitcnt_t +mpz_hamdist (const mpz_t u, const mpz_t v) +{ + mp_size_t un, vn, i; + mp_limb_t uc, vc, ul, vl, comp; + mp_srcptr up, vp; + mp_bitcnt_t c; + + un = u->_mp_size; + vn = v->_mp_size; + + if ( (un ^ vn) < 0) + return ~(mp_bitcnt_t) 0; + + if (un < 0) + { + assert (vn < 0); + un = -un; + vn = -vn; + uc = vc = 1; + comp = - (mp_limb_t) 1; + } + else + uc = vc = comp = 0; + + up = u->_mp_d; + vp = v->_mp_d; + + if (un < vn) + MPN_SRCPTR_SWAP (up, un, vp, vn); + + for (i = 0, c = 0; i < vn; i++) + { + ul = (up[i] ^ comp) + uc; + uc = ul < uc; + + vl = (vp[i] ^ comp) + vc; + vc = vl < vc; + + c += gmp_popcount_limb (ul ^ vl); + } + assert (vc == 0); + + for (; i < un; i++) + { + ul = (up[i] ^ comp) + uc; + uc = ul < uc; + + c += gmp_popcount_limb (ul ^ comp); + } + + return c; +} + +mp_bitcnt_t +mpz_scan1 (const mpz_t u, mp_bitcnt_t starting_bit) +{ + mp_ptr up; + mp_size_t us, un, i; + mp_limb_t limb, ux, uc; + unsigned cnt; + + up = u->_mp_d; + us = u->_mp_size; + un = GMP_ABS (us); + i = starting_bit / GMP_LIMB_BITS; + + /* Past the end there's no 1 bits for u>=0, or an immediate 1 bit + for u<0. Notice this test picks up any u==0 too. */ + if (i >= un) + return (us >= 0 ? ~(mp_bitcnt_t) 0 : starting_bit); + + if (us < 0) + { + ux = GMP_LIMB_MAX; + uc = mpn_zero_p (up, i); + } + else + ux = uc = 0; + + limb = (ux ^ up[i]) + uc; + uc = limb < uc; + + /* Mask to 0 all bits before starting_bit, thus ignoring them. */ + limb &= (GMP_LIMB_MAX << (starting_bit % GMP_LIMB_BITS)); + + while (limb == 0) + { + i++; + if (i == un) + { + assert (uc == 0); + /* For the u > 0 case, this can happen only for the first + masked limb. For the u < 0 case, it happens when the + highest limbs of the absolute value are all ones. */ + return (us >= 0 ? ~(mp_bitcnt_t) 0 : un * GMP_LIMB_BITS); + } + limb = (ux ^ up[i]) + uc; + uc = limb < uc; + } + gmp_ctz (cnt, limb); + return (mp_bitcnt_t) i * GMP_LIMB_BITS + cnt; +} + +mp_bitcnt_t +mpz_scan0 (const mpz_t u, mp_bitcnt_t starting_bit) +{ + mp_ptr up; + mp_size_t us, un, i; + mp_limb_t limb, ux, uc; + unsigned cnt; + + up = u->_mp_d; + us = u->_mp_size; + un = GMP_ABS (us); + i = starting_bit / GMP_LIMB_BITS; + + /* When past end, there's an immediate 0 bit for u>=0, or no 0 bits for + u<0. Notice this test picks up all cases of u==0 too. */ + if (i >= un) + return (us >= 0 ? starting_bit : ~(mp_bitcnt_t) 0); + + if (us < 0) + { + ux = GMP_LIMB_MAX; + uc = mpn_zero_p (up, i); + } + else + ux = uc = 0; + + limb = (ux ^ up[i]) + uc; + uc = limb < uc; + + /* Mask to 1 all bits before starting_bit, thus ignoring them. */ + limb |= ((mp_limb_t) 1 << (starting_bit % GMP_LIMB_BITS)) - 1; + + while (limb == GMP_LIMB_MAX) + { + i++; + if (i == un) + { + assert (uc == 0); + return (us >= 0 ? un * GMP_LIMB_BITS : ~(mp_bitcnt_t) 0); + } + limb = (ux ^ up[i]) + uc; + uc = limb < uc; + } + gmp_ctz (cnt, ~limb); + return (mp_bitcnt_t) i * GMP_LIMB_BITS + cnt; +} + + +/* MPZ base conversion. */ + +size_t +mpz_sizeinbase (const mpz_t u, int base) +{ + mp_size_t un; + mp_srcptr up; + mp_ptr tp; + mp_bitcnt_t bits; + struct gmp_div_inverse bi; + size_t ndigits; + + assert (base >= 2); + assert (base <= 36); + + un = GMP_ABS (u->_mp_size); + if (un == 0) + return 1; + + up = u->_mp_d; + + bits = (un - 1) * GMP_LIMB_BITS + mpn_limb_size_in_base_2 (up[un-1]); + switch (base) + { + case 2: + return bits; + case 4: + return (bits + 1) / 2; + case 8: + return (bits + 2) / 3; + case 16: + return (bits + 3) / 4; + case 32: + return (bits + 4) / 5; + /* FIXME: Do something more clever for the common case of base + 10. */ + } + + tp = gmp_xalloc_limbs (un); + mpn_copyi (tp, up, un); + mpn_div_qr_1_invert (&bi, base); + + for (ndigits = 0; un > 0; ndigits++) + { + mpn_div_qr_1_preinv (tp, tp, un, &bi); + un -= (tp[un-1] == 0); + } + gmp_free (tp); + return ndigits; +} + +char * +mpz_get_str (char *sp, int base, const mpz_t u) +{ + unsigned bits; + const char *digits; + mp_size_t un; + size_t i, sn; + + if (base >= 0) + { + digits = "0123456789abcdefghijklmnopqrstuvwxyz"; + } + else + { + base = -base; + digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + } + if (base <= 1) + base = 10; + if (base > 36) + return NULL; + + sn = 1 + mpz_sizeinbase (u, base); + if (!sp) + sp = gmp_xalloc (1 + sn); + + un = GMP_ABS (u->_mp_size); + + if (un == 0) + { + sp[0] = '0'; + sp[1] = '\0'; + return sp; + } + + i = 0; + + if (u->_mp_size < 0) + sp[i++] = '-'; + + bits = mpn_base_power_of_two_p (base); + + if (bits) + /* Not modified in this case. */ + sn = i + mpn_get_str_bits ((unsigned char *) sp + i, bits, u->_mp_d, un); + else + { + struct mpn_base_info info; + mp_ptr tp; + + mpn_get_base_info (&info, base); + tp = gmp_xalloc_limbs (un); + mpn_copyi (tp, u->_mp_d, un); + + sn = i + mpn_get_str_other ((unsigned char *) sp + i, base, &info, tp, un); + gmp_free (tp); + } + + for (; i < sn; i++) + sp[i] = digits[(unsigned char) sp[i]]; + + sp[sn] = '\0'; + return sp; +} + +int +mpz_set_str (mpz_t r, const char *sp, int base) +{ + unsigned bits; + mp_size_t rn, alloc; + mp_ptr rp; + size_t sn; + size_t dn; + int sign; + unsigned char *dp; + + assert (base == 0 || (base >= 2 && base <= 36)); + + while (isspace( (unsigned char) *sp)) + sp++; + + if (*sp == '-') + { + sign = 1; + sp++; + } + else + sign = 0; + + if (base == 0) + { + if (*sp == '0') + { + sp++; + if (*sp == 'x' || *sp == 'X') + { + base = 16; + sp++; + } + else if (*sp == 'b' || *sp == 'B') + { + base = 2; + sp++; + } + else + base = 8; + } + else + base = 10; + } + + sn = strlen (sp); + dp = gmp_xalloc (sn + (sn == 0)); + + for (dn = 0; *sp; sp++) + { + unsigned digit; + + if (isspace ((unsigned char) *sp)) + continue; + if (*sp >= '0' && *sp <= '9') + digit = *sp - '0'; + else if (*sp >= 'a' && *sp <= 'z') + digit = *sp - 'a' + 10; + else if (*sp >= 'A' && *sp <= 'Z') + digit = *sp - 'A' + 10; + else + digit = base; /* fail */ + + if (digit >= base) + { + gmp_free (dp); + r->_mp_size = 0; + return -1; + } + + dp[dn++] = digit; + } + + bits = mpn_base_power_of_two_p (base); + + if (bits > 0) + { + alloc = (sn * bits + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + rp = MPZ_REALLOC (r, alloc); + rn = mpn_set_str_bits (rp, dp, dn, bits); + } + else + { + struct mpn_base_info info; + mpn_get_base_info (&info, base); + alloc = (sn + info.exp - 1) / info.exp; + rp = MPZ_REALLOC (r, alloc); + rn = mpn_set_str_other (rp, dp, dn, base, &info); + } + assert (rn <= alloc); + gmp_free (dp); + + r->_mp_size = sign ? - rn : rn; + + return 0; +} + +int +mpz_init_set_str (mpz_t r, const char *sp, int base) +{ + mpz_init (r); + return mpz_set_str (r, sp, base); +} + +size_t +mpz_out_str (FILE *stream, int base, const mpz_t x) +{ + char *str; + size_t len; + + str = mpz_get_str (NULL, base, x); + len = strlen (str); + len = fwrite (str, 1, len, stream); + gmp_free (str); + return len; +} + + +static int +gmp_detect_endian (void) +{ + static const int i = 1; + const unsigned char *p = (const unsigned char *) &i; + if (*p == 1) + /* Little endian */ + return -1; + else + /* Big endian */ + return 1; +} + +/* Import and export. Does not support nails. */ +void +mpz_import (mpz_t r, size_t count, int order, size_t size, int endian, + size_t nails, const void *src) +{ + const unsigned char *p; + ptrdiff_t word_step; + mp_ptr rp; + mp_size_t rn; + + /* The current (partial) limb. */ + mp_limb_t limb; + /* The number of bytes already copied to this limb (starting from + the low end). */ + size_t bytes; + /* The index where the limb should be stored, when completed. */ + mp_size_t i; + + if (nails != 0) + gmp_die ("mpz_import: Nails not supported."); + + assert (order == 1 || order == -1); + assert (endian >= -1 && endian <= 1); + + if (endian == 0) + endian = gmp_detect_endian (); + + p = (unsigned char *) src; + + word_step = (order != endian) ? 2 * size : 0; + + /* Process bytes from the least significant end, so point p at the + least significant word. */ + if (order == 1) + { + p += size * (count - 1); + word_step = - word_step; + } + + /* And at least significant byte of that word. */ + if (endian == 1) + p += (size - 1); + + rn = (size * count + sizeof(mp_limb_t) - 1) / sizeof(mp_limb_t); + rp = MPZ_REALLOC (r, rn); + + for (limb = 0, bytes = 0, i = 0; count > 0; count--, p += word_step) + { + size_t j; + for (j = 0; j < size; j++, p -= (ptrdiff_t) endian) + { + limb |= (mp_limb_t) *p << (bytes++ * CHAR_BIT); + if (bytes == sizeof(mp_limb_t)) + { + rp[i++] = limb; + bytes = 0; + limb = 0; + } + } + } + if (bytes > 0) + rp[i++] = limb; + assert (i == rn); + + r->_mp_size = mpn_normalized_size (rp, i); +} + +void * +mpz_export (void *r, size_t *countp, int order, size_t size, int endian, + size_t nails, const mpz_t u) +{ + unsigned char *p; + ptrdiff_t word_step; + size_t count, k; + mp_size_t un; + + /* The current (partial) limb. */ + mp_limb_t limb; + /* The number of bytes left to to in this limb. */ + size_t bytes; + /* The index where the limb was read. */ + mp_size_t i; + + if (nails != 0) + gmp_die ("mpz_import: Nails not supported."); + + assert (order == 1 || order == -1); + assert (endian >= -1 && endian <= 1); + assert (size > 0 || u->_mp_size == 0); + + un = GMP_ABS (u->_mp_size); + if (un == 0) + { + if (countp) + *countp = 0; + return r; + } + + /* Count bytes in top limb. */ + for (limb = u->_mp_d[un-1], k = 0; limb > 0; k++, limb >>= CHAR_BIT) + ; + + assert (k > 0); + + count = (k + (un-1) * sizeof (mp_limb_t) + size - 1) / size; + + if (!r) + r = gmp_xalloc (count * size); + + if (endian == 0) + endian = gmp_detect_endian (); + + p = (unsigned char *) r; + + word_step = (order != endian) ? 2 * size : 0; + + /* Process bytes from the least significant end, so point p at the + least significant word. */ + if (order == 1) + { + p += size * (count - 1); + word_step = - word_step; + } + + /* And at least significant byte of that word. */ + if (endian == 1) + p += (size - 1); + + for (bytes = 0, i = 0, k = 0; k < count; k++, p += word_step) + { + size_t j; + for (j = 0; j < size; j++, p -= (ptrdiff_t) endian) + { + if (bytes == 0) + { + if (i < un) + limb = u->_mp_d[i++]; + bytes = sizeof (mp_limb_t); + } + *p = limb; + limb >>= CHAR_BIT; + bytes--; + } + } + assert (i == un); + assert (k == count); + + if (countp) + *countp = count; + + return r; +} diff --git a/src/gmp/mini-gmp.h b/src/gmp/mini-gmp.h new file mode 100644 index 000000000..8c94ca2ed --- /dev/null +++ b/src/gmp/mini-gmp.h @@ -0,0 +1,256 @@ +/* mini-gmp, a minimalistic implementation of a GNU GMP subset. + +Copyright 2011, 2012, 2013 Free Software Foundation, Inc. + +This file is part of the GNU MP Library. + +The GNU MP Library is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +The GNU MP Library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ + +/* About mini-gmp: This is a minimal implementation of a subset of the + GMP interface. It is intended for inclusion into applications which + have modest bignums needs, as a fallback when the real GMP library + is not installed. + + This file defines the public interface. */ + +#ifndef __MINI_GMP_H__ +#define __MINI_GMP_H__ + +/* For size_t */ +#include + +#if defined (__cplusplus) +extern "C" { +#endif + +void mp_set_memory_functions (void *(*) (size_t), + void *(*) (void *, size_t, size_t), + void (*) (void *, size_t)); + +void mp_get_memory_functions (void *(**) (size_t), + void *(**) (void *, size_t, size_t), + void (**) (void *, size_t)); + +typedef unsigned long mp_limb_t; +typedef long mp_size_t; +typedef unsigned long mp_bitcnt_t; + +typedef mp_limb_t *mp_ptr; +typedef const mp_limb_t *mp_srcptr; + +typedef struct +{ + int _mp_alloc; /* Number of *limbs* allocated and pointed + to by the _mp_d field. */ + int _mp_size; /* abs(_mp_size) is the number of limbs the + last field points to. If _mp_size is + negative this is a negative number. */ + mp_limb_t *_mp_d; /* Pointer to the limbs. */ +} __mpz_struct; + +typedef __mpz_struct mpz_t[1]; + +typedef __mpz_struct *mpz_ptr; +typedef const __mpz_struct *mpz_srcptr; + +void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t); +void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t); + +int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t); + +mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); + +mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); + +mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); +mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); +void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t); + +mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); +mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); + +mp_limb_t mpn_invert_3by2 (mp_limb_t, mp_limb_t); +#define mpn_invert_limb(x) mpn_invert_3by2 ((x), 0) + +size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); +mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int); + +void mpz_init (mpz_t); +void mpz_init2 (mpz_t, mp_bitcnt_t); +void mpz_clear (mpz_t); + +#define mpz_odd_p(z) (((z)->_mp_size != 0) & (int) (z)->_mp_d[0]) +#define mpz_even_p(z) (! mpz_odd_p (z)) + +int mpz_sgn (const mpz_t); +int mpz_cmp_si (const mpz_t, long); +int mpz_cmp_ui (const mpz_t, unsigned long); +int mpz_cmp (const mpz_t, const mpz_t); +int mpz_cmpabs_ui (const mpz_t, unsigned long); +int mpz_cmpabs (const mpz_t, const mpz_t); +int mpz_cmp_d (const mpz_t, double); +int mpz_cmpabs_d (const mpz_t, double); + +void mpz_abs (mpz_t, const mpz_t); +void mpz_neg (mpz_t, const mpz_t); +void mpz_swap (mpz_t, mpz_t); + +void mpz_add_ui (mpz_t, const mpz_t, unsigned long); +void mpz_add (mpz_t, const mpz_t, const mpz_t); +void mpz_sub_ui (mpz_t, const mpz_t, unsigned long); +void mpz_ui_sub (mpz_t, unsigned long, const mpz_t); +void mpz_sub (mpz_t, const mpz_t, const mpz_t); + +void mpz_mul_si (mpz_t, const mpz_t, long int); +void mpz_mul_ui (mpz_t, const mpz_t, unsigned long int); +void mpz_mul (mpz_t, const mpz_t, const mpz_t); +void mpz_mul_2exp (mpz_t, const mpz_t, mp_bitcnt_t); + +void mpz_cdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_fdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_tdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_cdiv_q (mpz_t, const mpz_t, const mpz_t); +void mpz_fdiv_q (mpz_t, const mpz_t, const mpz_t); +void mpz_tdiv_q (mpz_t, const mpz_t, const mpz_t); +void mpz_cdiv_r (mpz_t, const mpz_t, const mpz_t); +void mpz_fdiv_r (mpz_t, const mpz_t, const mpz_t); +void mpz_tdiv_r (mpz_t, const mpz_t, const mpz_t); + +void mpz_cdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_fdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_tdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_cdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_fdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); +void mpz_tdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); + +void mpz_mod (mpz_t, const mpz_t, const mpz_t); + +void mpz_divexact (mpz_t, const mpz_t, const mpz_t); + +int mpz_divisible_p (const mpz_t, const mpz_t); + +unsigned long mpz_cdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); +unsigned long mpz_fdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); +unsigned long mpz_tdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); +unsigned long mpz_cdiv_q_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_fdiv_q_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_tdiv_q_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_cdiv_r_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_fdiv_r_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_tdiv_r_ui (mpz_t, const mpz_t, unsigned long); +unsigned long mpz_cdiv_ui (const mpz_t, unsigned long); +unsigned long mpz_fdiv_ui (const mpz_t, unsigned long); +unsigned long mpz_tdiv_ui (const mpz_t, unsigned long); + +unsigned long mpz_mod_ui (mpz_t, const mpz_t, unsigned long); + +void mpz_divexact_ui (mpz_t, const mpz_t, unsigned long); + +int mpz_divisible_ui_p (const mpz_t, unsigned long); + +unsigned long mpz_gcd_ui (mpz_t, const mpz_t, unsigned long); +void mpz_gcd (mpz_t, const mpz_t, const mpz_t); +void mpz_gcdext (mpz_t, mpz_t, mpz_t, const mpz_t, const mpz_t); +void mpz_lcm_ui (mpz_t, const mpz_t, unsigned long); +void mpz_lcm (mpz_t, const mpz_t, const mpz_t); +int mpz_invert (mpz_t, const mpz_t, const mpz_t); + +void mpz_sqrtrem (mpz_t, mpz_t, const mpz_t); +void mpz_sqrt (mpz_t, const mpz_t); + +void mpz_pow_ui (mpz_t, const mpz_t, unsigned long); +void mpz_ui_pow_ui (mpz_t, unsigned long, unsigned long); +void mpz_powm (mpz_t, const mpz_t, const mpz_t, const mpz_t); +void mpz_powm_ui (mpz_t, const mpz_t, unsigned long, const mpz_t); + +void mpz_rootrem (mpz_t, mpz_t, const mpz_t, unsigned long); +int mpz_root (mpz_t, const mpz_t, unsigned long); + +void mpz_fac_ui (mpz_t, unsigned long); +void mpz_bin_uiui (mpz_t, unsigned long, unsigned long); + +int mpz_tstbit (const mpz_t, mp_bitcnt_t); +void mpz_setbit (mpz_t, mp_bitcnt_t); +void mpz_clrbit (mpz_t, mp_bitcnt_t); +void mpz_combit (mpz_t, mp_bitcnt_t); + +void mpz_com (mpz_t, const mpz_t); +void mpz_and (mpz_t, const mpz_t, const mpz_t); +void mpz_ior (mpz_t, const mpz_t, const mpz_t); +void mpz_xor (mpz_t, const mpz_t, const mpz_t); + +mp_bitcnt_t mpz_popcount (const mpz_t); +mp_bitcnt_t mpz_hamdist (const mpz_t, const mpz_t); +mp_bitcnt_t mpz_scan0 (const mpz_t, mp_bitcnt_t); +mp_bitcnt_t mpz_scan1 (const mpz_t, mp_bitcnt_t); + +int mpz_fits_slong_p (const mpz_t); +int mpz_fits_ulong_p (const mpz_t); +long int mpz_get_si (const mpz_t); +unsigned long int mpz_get_ui (const mpz_t); +double mpz_get_d (const mpz_t); +size_t mpz_size (const mpz_t); +mp_limb_t mpz_getlimbn (const mpz_t, mp_size_t); + +void mpz_set_si (mpz_t, signed long int); +void mpz_set_ui (mpz_t, unsigned long int); +void mpz_set (mpz_t, const mpz_t); +void mpz_set_d (mpz_t, double); + +void mpz_init_set_si (mpz_t, signed long int); +void mpz_init_set_ui (mpz_t, unsigned long int); +void mpz_init_set (mpz_t, const mpz_t); +void mpz_init_set_d (mpz_t, double); + +size_t mpz_sizeinbase (const mpz_t, int); +char *mpz_get_str (char *, int, const mpz_t); +int mpz_set_str (mpz_t, const char *, int); +int mpz_init_set_str (mpz_t, const char *, int); + +/* This long list taken from gmp.h. */ +/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, + defines EOF but not FILE. */ +#if defined (FILE) \ + || defined (H_STDIO) \ + || defined (_H_STDIO) /* AIX */ \ + || defined (_STDIO_H) /* glibc, Sun, SCO */ \ + || defined (_STDIO_H_) /* BSD, OSF */ \ + || defined (__STDIO_H) /* Borland */ \ + || defined (__STDIO_H__) /* IRIX */ \ + || defined (_STDIO_INCLUDED) /* HPUX */ \ + || defined (__dj_include_stdio_h_) /* DJGPP */ \ + || defined (_FILE_DEFINED) /* Microsoft */ \ + || defined (__STDIO__) /* Apple MPW MrC */ \ + || defined (_MSL_STDIO_H) /* Metrowerks */ \ + || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ + || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ \ + || defined (__STDIO_LOADED) /* VMS */ +size_t mpz_out_str (FILE *, int, const mpz_t); +#endif + +void mpz_import (mpz_t, size_t, int, size_t, int, size_t, const void *); +void *mpz_export (void *, size_t *, int, size_t, int, size_t, const mpz_t); + +#if defined (__cplusplus) +} +#endif +#endif /* __MINI_GMP_H__ */ diff --git a/util/travis/before_install.sh b/util/travis/before_install.sh index 023f98070..b61118044 100755 --- a/util/travis/before_install.sh +++ b/util/travis/before_install.sh @@ -12,7 +12,7 @@ sudo apt-get install p7zip-full if [[ $PLATFORM == "Linux" ]]; then sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \ libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \ - libhiredis-dev libogg-dev libvorbis-dev libopenal-dev gettext + libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev gettext # Linking to LevelDB is broken, use a custom build wget http://sfan5.pf-control.de/libleveldb-1.18-ubuntu12.04.7z sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z From 82e35edff52d88dcd64a9bfc9d2c4c93f1341b78 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 12 Apr 2015 04:49:13 +0200 Subject: [PATCH 039/670] Make early protocol auth mechanism generic, and add SRP Adds everything needed for SRP (and everything works too), but still deactivated, as protocol v25 init packets aren't final yet. Can be activated by changing the LATEST_PROTOCOL_VERSION header to 25 inside networkprotocol.h. --- build/android/jni/Android.mk | 4 + src/client.cpp | 136 +++- src/client.h | 29 + src/client/clientlauncher.cpp | 2 +- src/clientiface.cpp | 63 +- src/clientiface.h | 230 +++--- src/network/clientopcodes.cpp | 38 +- src/network/clientpackethandler.cpp | 99 ++- src/network/networkpacket.h | 4 +- src/network/networkprotocol.h | 122 +++- src/network/serveropcodes.cpp | 40 +- src/network/serverpackethandler.cpp | 470 ++++++++---- src/script/lua_api/l_util.cpp | 1 + src/server.cpp | 38 + src/server.h | 6 +- src/util/CMakeLists.txt | 3 + src/util/auth.cpp | 126 ++++ src/util/auth.h | 37 + src/util/md32_common.h | 428 +++++++++++ src/util/sha2.h | 154 ++++ src/util/sha256.c | 404 +++++++++++ src/util/srp.cpp | 1029 +++++++++++++++++++++++++++ src/util/srp.h | 171 +++++ src/util/string.cpp | 23 - src/util/string.h | 3 +- 25 files changed, 3351 insertions(+), 309 deletions(-) create mode 100644 src/util/auth.cpp create mode 100644 src/util/auth.h create mode 100644 src/util/md32_common.h create mode 100644 src/util/sha2.h create mode 100644 src/util/sha256.c create mode 100644 src/util/srp.cpp create mode 100644 src/util/srp.h diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 2b582051e..206c30ccf 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -208,6 +208,7 @@ LOCAL_SRC_FILES := \ jni/src/version.cpp \ jni/src/voxel.cpp \ jni/src/voxelalgorithms.cpp \ + jni/src/util/auth.cpp \ jni/src/util/base64.cpp \ jni/src/util/directiontables.cpp \ jni/src/util/numeric.cpp \ @@ -215,6 +216,7 @@ LOCAL_SRC_FILES := \ jni/src/util/serialize.cpp \ jni/src/util/sha1.cpp \ jni/src/util/string.cpp \ + jni/src/util/srp.cpp \ jni/src/util/timetaker.cpp \ jni/src/unittest/test.cpp \ jni/src/unittest/test_collision.cpp \ @@ -243,6 +245,8 @@ LOCAL_SRC_FILES := \ jni/src/client/clientlauncher.cpp \ jni/src/client/tile.cpp +# intentionally kept out (we already build openssl itself): jni/src/util/sha256.c + # Network LOCAL_SRC_FILES += \ jni/src/network/connection.cpp \ diff --git a/src/client.cpp b/src/client.cpp index ceea56ba0..8cfcc85a7 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -22,10 +22,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "jthread/jmutexautolock.h" +#include "util/auth.h" #include "util/directiontables.h" #include "util/pointedthing.h" #include "util/serialize.h" #include "util/string.h" +#include "util/srp.h" #include "client.h" #include "network/clientopcodes.h" #include "filesys.h" @@ -255,6 +257,8 @@ Client::Client( m_highlighted_pos(0,0,0), m_map_seed(0), m_password(password), + m_chosen_auth_mech(AUTH_MECHANISM_NONE), + m_auth_data(NULL), m_access_denied(false), m_itemdef_received(false), m_nodedef_received(false), @@ -404,10 +408,13 @@ void Client::step(float dtime) memset(pName, 0, PLAYERNAME_SIZE * sizeof(char)); memset(pPassword, 0, PASSWORD_SIZE * sizeof(char)); + std::string hashed_password = translatePassword(myplayer->getName(), m_password); snprintf(pName, PLAYERNAME_SIZE, "%s", myplayer->getName()); - snprintf(pPassword, PASSWORD_SIZE, "%s", m_password.c_str()); + snprintf(pPassword, PASSWORD_SIZE, "%s", hashed_password.c_str()); sendLegacyInit(pName, pPassword); + if (LATEST_PROTOCOL_VERSION >= 25) + sendInit(myplayer->getName()); } // Not connected, return @@ -943,6 +950,39 @@ void Client::interact(u8 action, const PointedThing& pointed) Send(&pkt); } +void Client::deleteAuthData() +{ + if (!m_auth_data) + return; + + switch (m_chosen_auth_mech) { + case AUTH_MECHANISM_FIRST_SRP: + break; + case AUTH_MECHANISM_SRP: + case AUTH_MECHANISM_LEGACY_PASSWORD: + srp_user_delete((SRPUser *) m_auth_data); + m_auth_data = NULL; + break; + case AUTH_MECHANISM_NONE: + break; + } +} + + +AuthMechanism Client::choseAuthMech(const u32 mechs) +{ + if (mechs & AUTH_MECHANISM_SRP) + return AUTH_MECHANISM_SRP; + + if (mechs & AUTH_MECHANISM_FIRST_SRP) + return AUTH_MECHANISM_FIRST_SRP; + + if (mechs & AUTH_MECHANISM_LEGACY_PASSWORD) + return AUTH_MECHANISM_LEGACY_PASSWORD; + + return AUTH_MECHANISM_NONE; +} + void Client::sendLegacyInit(const char* playerName, const char* playerPassword) { NetworkPacket pkt(TOSERVER_INIT_LEGACY, @@ -956,6 +996,70 @@ void Client::sendLegacyInit(const char* playerName, const char* playerPassword) Send(&pkt); } +void Client::sendInit(const std::string &playerName) +{ + NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size())); + + // TODO (later) actually send supported compression modes + pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u8) 42; + pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX; + pkt << playerName; + + Send(&pkt); +} + +void Client::startAuth(AuthMechanism chosen_auth_mechanism) +{ + m_chosen_auth_mech = chosen_auth_mechanism; + + switch (chosen_auth_mechanism) { + case AUTH_MECHANISM_FIRST_SRP: { + // send srp verifier to server + NetworkPacket resp_pkt(TOSERVER_FIRST_SRP, 0); + char *salt, *bytes_v; + std::size_t len_salt, len_v; + salt = NULL; + getSRPVerifier(getPlayerName(), m_password, + &salt, &len_salt, &bytes_v, &len_v); + resp_pkt + << std::string((char*)salt, len_salt) + << std::string((char*)bytes_v, len_v) + << (u8)((m_password == "") ? 1 : 0); + free(salt); + free(bytes_v); + Send(&resp_pkt); + break; + } + case AUTH_MECHANISM_SRP: + case AUTH_MECHANISM_LEGACY_PASSWORD: { + u8 based_on = 1; + + if (chosen_auth_mechanism == AUTH_MECHANISM_LEGACY_PASSWORD) { + m_password = translatePassword(getPlayerName(), m_password); + based_on = 0; + } + + std::string playername_u = lowercase(getPlayerName()); + m_auth_data = srp_user_new(SRP_SHA256, SRP_NG_2048, + getPlayerName().c_str(), playername_u.c_str(), + (const unsigned char *) m_password.c_str(), + m_password.length(), NULL, NULL); + char *bytes_A = 0; + size_t len_A = 0; + srp_user_start_authentication((struct SRPUser *) m_auth_data, + NULL, NULL, 0, (unsigned char **) &bytes_A, &len_A); + + NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_A, 0); + resp_pkt << std::string(bytes_A, len_A) << based_on; + free(bytes_A); + Send(&resp_pkt); + break; + } + case AUTH_MECHANISM_NONE: + break; // not handled in this method + } +} + void Client::sendDeletedBlocks(std::vector &blocks) { NetworkPacket pkt(TOSERVER_DELETEDBLOCKS, 1 + sizeof(v3s16) * blocks.size()); @@ -1066,24 +1170,30 @@ void Client::sendChangePassword(const std::string &oldpassword, const std::string &newpassword) { Player *player = m_env.getLocalPlayer(); - if(player == NULL) + if (player == NULL) return; std::string playername = player->getName(); - std::string oldpwd = translatePassword(playername, oldpassword); - std::string newpwd = translatePassword(playername, newpassword); + if (m_proto_ver >= 25) { + // get into sudo mode and then send new password to server + m_password = oldpassword; + m_new_password = newpassword; + startAuth(choseAuthMech(m_sudo_auth_methods)); + } else { + std::string oldpwd = translatePassword(playername, oldpassword); + std::string newpwd = translatePassword(playername, newpassword); - NetworkPacket pkt(TOSERVER_PASSWORD_LEGACY, 2 * PASSWORD_SIZE); + NetworkPacket pkt(TOSERVER_PASSWORD_LEGACY, 2 * PASSWORD_SIZE); - for(u8 i = 0; i < PASSWORD_SIZE; i++) { - pkt << (u8) (i < oldpwd.length() ? oldpwd[i] : 0); + for (u8 i = 0; i < PASSWORD_SIZE; i++) { + pkt << (u8) (i < oldpwd.length() ? oldpwd[i] : 0); + } + + for (u8 i = 0; i < PASSWORD_SIZE; i++) { + pkt << (u8) (i < newpwd.length() ? newpwd[i] : 0); + } + Send(&pkt); } - - for(u8 i = 0; i < PASSWORD_SIZE; i++) { - pkt << (u8) (i < newpwd.length() ? newpwd[i] : 0); - } - - Send(&pkt); } diff --git a/src/client.h b/src/client.h index 082b3d6dd..87cf8ce45 100644 --- a/src/client.h +++ b/src/client.h @@ -351,6 +351,8 @@ public: void handleCommand_Deprecated(NetworkPacket* pkt); void handleCommand_Hello(NetworkPacket* pkt); void handleCommand_AuthAccept(NetworkPacket* pkt); + void handleCommand_AcceptSudoMode(NetworkPacket* pkt); + void handleCommand_DenySudoMode(NetworkPacket* pkt); void handleCommand_InitLegacy(NetworkPacket* pkt); void handleCommand_AccessDenied(NetworkPacket* pkt); void handleCommand_RemoveNode(NetworkPacket* pkt); @@ -391,6 +393,7 @@ public: void handleCommand_OverrideDayNightRatio(NetworkPacket* pkt); void handleCommand_LocalPlayerAnimations(NetworkPacket* pkt); void handleCommand_EyeOffset(NetworkPacket* pkt); + void handleCommand_SrpBytesSandB(NetworkPacket* pkt); void ProcessData(NetworkPacket *pkt); @@ -542,11 +545,21 @@ private: // Send the item number 'item' as player item to the server void sendPlayerItem(u16 item); + void deleteAuthData(); + // helper method shared with clientpackethandler + static AuthMechanism choseAuthMech(const u32 mechs); + void sendLegacyInit(const char* playerName, const char* playerPassword); + void sendInit(const std::string &playerName); + void startAuth(AuthMechanism chosen_auth_mechanism); void sendDeletedBlocks(std::vector &blocks); void sendGotBlocks(v3s16 block); void sendRemovedSounds(std::vector &soundList); + // Helper function + inline std::string getPlayerName() + { return m_env.getLocalPlayer()->getName(); } + float m_packetcounter_timer; float m_connection_reinit_timer; float m_avg_rtt_timer; @@ -569,6 +582,8 @@ private: IrrlichtDevice *m_device; // Server serialization version u8 m_server_ser_ver; + // Used version of the protocol with server + u8 m_proto_ver; u16 m_playeritem; bool m_inventory_updated; Inventory *m_inventory_from_server; @@ -584,9 +599,23 @@ private: //s32 m_daynight_i; //u32 m_daynight_ratio; std::queue m_chat_queue; + + // The authentication methods we can use to enter sudo mode (=change password) + u32 m_sudo_auth_methods; + // The seed returned by the server in TOCLIENT_INIT is stored here u64 m_map_seed; + + // Auth data + std::string m_playername; std::string m_password; + // If set, this will be sent (and cleared) upon a TOCLIENT_ACCEPT_SUDO_MODE + std::string m_new_password; + // Usable by auth mechanisms. + AuthMechanism m_chosen_auth_mech; + void * m_auth_data; + + bool m_access_denied; std::string m_access_denied_reason; std::queue m_client_event_queue; diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index d6327e259..41ba4f307 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -392,7 +392,7 @@ bool ClientLauncher::launch_game(std::string &error_message, else playername = menudata.name; - password = translatePassword(playername, menudata.password); + password = menudata.password; g_settings->set("name", playername); diff --git a/src/clientiface.cpp b/src/clientiface.cpp index 7649be29e..6944e56db 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "emerge.h" #include "serverobject.h" // TODO this is used for cleanup of only #include "log.h" +#include "util/srp.h" const char *ClientInterface::statenames[] = { "Invalid", @@ -427,10 +428,12 @@ void RemoteClient::notifyEvent(ClientStateEvent event) //intentionally do nothing break; case CS_Created: - switch(event) - { - case CSE_Init: - m_state = CS_InitSent; + switch (event) { + case CSE_Hello: + m_state = CS_HelloSent; + break; + case CSE_InitLegacy: + m_state = CS_AwaitingInit2; break; case CSE_Disconnect: m_state = CS_Disconnecting; @@ -447,7 +450,32 @@ void RemoteClient::notifyEvent(ClientStateEvent event) case CS_Denied: /* don't do anything if in denied state */ break; - case CS_InitSent: + case CS_HelloSent: + switch(event) + { + case CSE_AuthAccept: + m_state = CS_AwaitingInit2; + if ((chosen_mech == AUTH_MECHANISM_SRP) + || (chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD)) + srp_verifier_delete((SRPVerifier *) auth_data); + chosen_mech = AUTH_MECHANISM_NONE; + break; + case CSE_Disconnect: + m_state = CS_Disconnecting; + break; + case CSE_SetDenied: + m_state = CS_Denied; + if ((chosen_mech == AUTH_MECHANISM_SRP) + || (chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD)) + srp_verifier_delete((SRPVerifier *) auth_data); + chosen_mech = AUTH_MECHANISM_NONE; + break; + default: + myerror << "HelloSent: Invalid client state transition! " << event; + throw ClientStateError(myerror.str()); + } + break; + case CS_AwaitingInit2: switch(event) { case CSE_GotInit2: @@ -514,6 +542,13 @@ void RemoteClient::notifyEvent(ClientStateEvent event) case CSE_Disconnect: m_state = CS_Disconnecting; break; + case CSE_SudoSuccess: + m_state = CS_SudoMode; + if ((chosen_mech == AUTH_MECHANISM_SRP) + || (chosen_mech == AUTH_MECHANISM_LEGACY_PASSWORD)) + srp_verifier_delete((SRPVerifier *) auth_data); + chosen_mech = AUTH_MECHANISM_NONE; + break; /* Init GotInit2 SetDefinitionsSent SetMediaSent SetDenied */ default: myerror << "Active: Invalid client state transition! " << event; @@ -521,6 +556,24 @@ void RemoteClient::notifyEvent(ClientStateEvent event) break; } break; + case CS_SudoMode: + switch(event) + { + case CSE_SetDenied: + m_state = CS_Denied; + break; + case CSE_Disconnect: + m_state = CS_Disconnecting; + break; + case CSE_SudoLeave: + m_state = CS_Active; + break; + default: + myerror << "Active: Invalid client state transition! " << event; + throw ClientStateError(myerror.str()); + break; + } + break; case CS_Disconnecting: /* we are already disconnecting */ break; diff --git a/src/clientiface.h b/src/clientiface.h index 54b250265..070559c3a 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -47,96 +47,119 @@ class EmergeManager; | Created | | | \-----------------/ - | - | -+-----------------------------+ invalid playername, password -|IN: | or denied by mod -| TOSERVER_INIT |------------------------------ -+-----------------------------+ | - | | - | Auth ok | - | | -+-----------------------------+ | -|OUT: | | -| TOCLIENT_INIT | | -+-----------------------------+ | - | | - v | - /-----------------\ | - | | | - | InitSent | | - | | | - \-----------------/ +------------------ - | | | -+-----------------------------+ +-----------------------------+ | -|IN: | |OUT: | | -| TOSERVER_INIT2 | | TOCLIENT_ACCESS_DENIED | | -+-----------------------------+ +-----------------------------+ | - | | | - v v | - /-----------------\ /-----------------\ | - | | | | | - | InitDone | | Denied | | - | | | | | - \-----------------/ \-----------------/ | - | | -+-----------------------------+ | -|OUT: | | -| TOCLIENT_MOVEMENT | | -| TOCLIENT_ITEMDEF | | -| TOCLIENT_NODEDEF | | -| TOCLIENT_ANNOUNCE_MEDIA | | -| TOCLIENT_DETACHED_INVENTORY | | -| TOCLIENT_TIME_OF_DAY | | -+-----------------------------+ | - | | - | | - | ----------------------------------- | - v | | | - /-----------------\ v | - | | +-----------------------------+ | - | DefinitionsSent | |IN: | | - | | | TOSERVER_REQUEST_MEDIA | | - \-----------------/ | TOSERVER_RECEIVED_MEDIA | | - | +-----------------------------+ | - | ^ | | - | ----------------------------------- | - | | -+-----------------------------+ | -|IN: | | -| TOSERVER_CLIENT_READY | | -+-----------------------------+ | - | async | - v mod action | -+-----------------------------+ (ban,kick) | -|OUT: | | -| TOCLIENT_MOVE_PLAYER | | -| TOCLIENT_PRIVILEGES | | -| TOCLIENT_INVENTORY_FORMSPEC | | -| UpdateCrafting | | -| TOCLIENT_INVENTORY | | -| TOCLIENT_HP (opt) | | -| TOCLIENT_BREATH | | -| TOCLIENT_DEATHSCREEN | | -+-----------------------------+ | - | | - v | - /-----------------\ | - | |------------------------------------------------------ - | Active | - | |---------------------------------- - \-----------------/ timeout | - | +-----------------------------+ - | |OUT: | - | | TOCLIENT_DISCONNECT | - | +-----------------------------+ - | | - | v -+-----------------------------+ /-----------------\ -|IN: | | | -| TOSERVER_DISCONNECT |------------------->| Disconnecting | -+-----------------------------+ | | - \-----------------/ + | depending of the incoming packet + +--------------------------------------- + v | ++-----------------------------+ +-----------------------------+ +|IN: | |IN: | +| TOSERVER_INIT_LEGACY |----- | TOSERVER_INIT | invalid playername, ++-----------------------------+ | +-----------------------------+ password (for _LEGACY), + | | | or denied by mod + | Auth ok -------------------+--------------------------------- + | | | ++-----------------------------+ +-----------------------------+ | +|OUT: | |OUT: | | +| TOCLIENT_INIT_LEGACY | | TOCLIENT_HELLO | | ++-----------------------------+ +-----------------------------+ | + | | | + | | | + v v | + /-----------------\ /-----------------\ | + | | | | | + | AwaitingInit2 |<--------- | HelloSent | | + | | | | | | + \-----------------/ | \-----------------/ | + | | | | ++-----------------------------+ | *-----------------------------* Auth fails | +|IN: | | |Authentication, depending on |-----------------+ +| TOSERVER_INIT2 | | | packet sent by client | | ++-----------------------------+ | *-----------------------------* | + | | | | + | | | Authentication | + v | | successful | + /-----------------\ | v | + | | | +-----------------------------+ | + | InitDone | | |OUT: | | + | | | | TOCLIENT_AUTH_ACCEPT | | + \-----------------/ | +-----------------------------+ | + | | | | ++-----------------------------+ --------------------- | +|OUT: | | +| TOCLIENT_MOVEMENT | | +| TOCLIENT_ITEMDEF | | +| TOCLIENT_NODEDEF | | +| TOCLIENT_ANNOUNCE_MEDIA | | +| TOCLIENT_DETACHED_INVENTORY | | +| TOCLIENT_TIME_OF_DAY | | ++-----------------------------+ | + | | + | | + | ----------------------------- | + v | | | + /-----------------\ v | + | | +-----------------------------+ | + | DefinitionsSent | |IN: | | + | | | TOSERVER_REQUEST_MEDIA | | + \-----------------/ | TOSERVER_RECEIVED_MEDIA | | + | +-----------------------------+ | + | ^ | | + | ----------------------------- | + | | ++-----------------------------+ --------------------------------+ +|IN: | | | +| TOSERVER_CLIENT_READY | v | ++-----------------------------+ +-------------------------------+ | + | |OUT: | | + v | TOCLIENT_ACCESS_DENIED_LEGAGY | | ++-----------------------------+ +-------------------------------+ | +|OUT: | | | +| TOCLIENT_MOVE_PLAYER | v | +| TOCLIENT_PRIVILEGES | /-----------------\ | +| TOCLIENT_INVENTORY_FORMSPEC | | | | +| UpdateCrafting | | Denied | | +| TOCLIENT_INVENTORY | | | | +| TOCLIENT_HP (opt) | \-----------------/ | +| TOCLIENT_BREATH | | +| TOCLIENT_DEATHSCREEN | | ++-----------------------------+ | + | | + v | + /-----------------\ async mod action (ban, kick) | + | |--------------------------------------------------------------- + ---->| Active | + | | |---------------------------------------------- + | \-----------------/ timeout | + | | | +-----------------------------+ + | | | |OUT: | + | | | | TOCLIENT_DISCONNECT | + | | | +-----------------------------+ + | | | | + | | | v + | | +-----------------------------+ /-----------------\ + | | |IN: | | | + | | | TOSERVER_DISCONNECT |------------------->| Disconnecting | + | | +-----------------------------+ | | + | | \-----------------/ + | | any auth packet which was + | | allowed in TOCLIENT_AUTH_ACCEPT + | v + | *-----------------------------* Auth +-------------------------------+ + | |Authentication, depending on | succeeds |OUT: | + | | packet sent by client |---------->| TOCLIENT_ACCEPT_SUDO_MODE | + | *-----------------------------* +-------------------------------+ + | | | + | | Auth fails /-----------------\ + | v | | + | +-------------------------------+ | SudoMode | + | |OUT: | | | + | | TOCLIENT_DENY_SUDO_MODE | \-----------------/ + | +-------------------------------+ | + | | v + | | +-----------------------------+ + | | sets password accordingly |IN: | + -------------------+-------------------------------| TOSERVER_FIRST_SRP | + +-----------------------------+ + */ namespace con { class Connection; @@ -150,19 +173,25 @@ enum ClientState CS_Disconnecting, CS_Denied, CS_Created, - CS_InitSent, + CS_AwaitingInit2, + CS_HelloSent, CS_InitDone, CS_DefinitionsSent, - CS_Active + CS_Active, + CS_SudoMode }; enum ClientStateEvent { - CSE_Init, + CSE_Hello, + CSE_AuthAccept, + CSE_InitLegacy, CSE_GotInit2, CSE_SetDenied, CSE_SetDefinitionsSent, CSE_SetClientReady, + CSE_SudoSuccess, + CSE_SudoLeave, CSE_Disconnect }; @@ -201,10 +230,24 @@ public: // u16 net_proto_version; + /* Authentication information */ + std::string enc_pwd; + AuthMechanism chosen_mech; + void * auth_data; + u32 allowed_auth_mechs; + u32 allowed_sudo_mechs; + + bool isSudoMechAllowed(AuthMechanism mech) + { return allowed_sudo_mechs & mech; } + bool isMechAllowed(AuthMechanism mech) + { return allowed_auth_mechs & mech; } + RemoteClient(): peer_id(PEER_ID_INEXISTENT), serialization_version(SER_FMT_VER_INVALID), net_proto_version(0), + chosen_mech(AUTH_MECHANISM_NONE), + auth_data(NULL), m_time_from_building(9999), m_pending_serialization_version(SER_FMT_VER_INVALID), m_state(CS_Created), @@ -303,7 +346,6 @@ public: /* get uptime */ u32 uptime(); - /* set version information */ void setVersionInfo(u8 major, u8 minor, u8 patch, std::string full) { m_version_major = major; diff --git a/src/network/clientopcodes.cpp b/src/network/clientopcodes.cpp index 556e8d0c0..3364de8c5 100644 --- a/src/network/clientopcodes.cpp +++ b/src/network/clientopcodes.cpp @@ -28,8 +28,8 @@ const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] = null_command_handler, // 0x01 { "TOCLIENT_HELLO", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_Hello }, // 0x02 { "TOCLIENT_AUTH_ACCEPT", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_AuthAccept }, // 0x03 - null_command_handler, // 0x04 - null_command_handler, // 0x05 + { "TOCLIENT_ACCEPT_SUDO_MODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_AcceptSudoMode}, // 0x04 + { "TOCLIENT_DENY_SUDO_MODE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DenySudoMode}, // 0x05 null_command_handler, // 0x06 null_command_handler, // 0x07 null_command_handler, // 0x08 @@ -108,6 +108,19 @@ const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] = { "TOCLIENT_LOCAL_PLAYER_ANIMATIONS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_LocalPlayerAnimations }, // 0x51 { "TOCLIENT_EYE_OFFSET", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_EyeOffset }, // 0x52 { "TOCLIENT_DELETE_PARTICLESPAWNER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeleteParticleSpawner }, // 0x53 + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + null_command_handler, + { "TOCLIENT_SRP_BYTES_S_B", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_SrpBytesSandB }, // 0x60 }; const static ServerCommandFactory null_command_factory = { "TOSERVER_NULL", 0, false }; @@ -116,7 +129,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] = { null_command_factory, // 0x00 null_command_factory, // 0x01 - null_command_factory, // 0x02 + { "TOSERVER_INIT", 1, false }, // 0x02 null_command_factory, // 0x03 null_command_factory, // 0x04 null_command_factory, // 0x05 @@ -129,7 +142,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] = null_command_factory, // 0x0c null_command_factory, // 0x0d null_command_factory, // 0x0e - { "TOSERVER_INIT", 1, false }, // 0x0F + null_command_factory, // 0x0F { "TOSERVER_INIT_LEGACY", 1, false }, // 0x10 { "TOSERVER_INIT2", 1, true }, // 0x11 null_command_factory, // 0x12 @@ -175,11 +188,26 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] = { "TOSERVER_REMOVED_SOUNDS", 1, true }, // 0x3a { "TOSERVER_NODEMETA_FIELDS", 0, true }, // 0x3b { "TOSERVER_INVENTORY_FIELDS", 0, true }, // 0x3c - { "TOSERVER_PASSWORD", 0, true }, // 0x3d + null_command_factory, // 0x3d null_command_factory, // 0x3e null_command_factory, // 0x3f { "TOSERVER_REQUEST_MEDIA", 1, true }, // 0x40 { "TOSERVER_RECEIVED_MEDIA", 1, true }, // 0x41 { "TOSERVER_BREATH", 0, true }, // 0x42 { "TOSERVER_CLIENT_READY", 0, true }, // 0x43 + null_command_factory, // 0x44 + null_command_factory, // 0x45 + null_command_factory, // 0x46 + null_command_factory, // 0x47 + null_command_factory, // 0x48 + null_command_factory, // 0x49 + null_command_factory, // 0x4a + null_command_factory, // 0x4b + null_command_factory, // 0x4c + null_command_factory, // 0x4d + null_command_factory, // 0x4e + null_command_factory, // 0x4f + { "TOSERVER_FIRST_SRP", 1, true }, // 0x50 + { "TOSERVER_SRP_BYTES_A", 1, true }, // 0x51 + { "TOSERVER_SRP_BYTES_M", 1, true }, // 0x52 }; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index bddf8f6fd..2106e4368 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "strfnd.h" #include "network/clientopcodes.h" #include "util/serialize.h" +#include "util/srp.h" void Client::handleCommand_Deprecated(NetworkPacket* pkt) { @@ -44,10 +45,16 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) return; u8 deployed; - *pkt >> deployed; + u32 auth_mechs; + std::string username_legacy; // for case insensitivity + *pkt >> deployed >> auth_mechs >> username_legacy; + + // Chose an auth method we support + AuthMechanism chosen_auth_mechanism = choseAuthMech(auth_mechs); infostream << "Client: TOCLIENT_HELLO received with " - "deployed=" << ((int)deployed & 0xff) << std::endl; + "deployed=" << ((int)deployed & 0xff) << ", auth_mechs=" + << auth_mechs << ", chosen=" << chosen_auth_mechanism << std::endl; if (!ser_ver_supported(deployed)) { infostream << "Client: TOCLIENT_HELLO: Server sent " @@ -56,14 +63,43 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) } m_server_ser_ver = deployed; + m_proto_ver = deployed; + + //TODO verify that username_legacy matches sent username, only + // differs in casing (make both uppercase and compare) + // This is only neccessary though when we actually want to add casing support + + if (m_chosen_auth_mech != AUTH_MECHANISM_NONE) { + // we recieved a TOCLIENT_HELLO while auth was already going on + errorstream << "Client: TOCLIENT_HELLO while auth was already going on" + << "(chosen_mech=" << m_chosen_auth_mech << ")." << std::endl; + if ((m_chosen_auth_mech == AUTH_MECHANISM_SRP) + || (m_chosen_auth_mech == AUTH_MECHANISM_LEGACY_PASSWORD)) { + srp_user_delete((SRPUser *) m_auth_data); + m_auth_data = 0; + } + } + + // Authenticate using that method, or abort if there wasn't any method found + if (chosen_auth_mechanism != AUTH_MECHANISM_NONE) { + startAuth(chosen_auth_mechanism); + } else { + m_chosen_auth_mech = AUTH_MECHANISM_NONE; + m_access_denied = true; + m_access_denied_reason = "Unknown"; + m_con.Disconnect(); + } - // @ TODO auth to server } void Client::handleCommand_AuthAccept(NetworkPacket* pkt) { + m_chosen_auth_mech = AUTH_MECHANISM_NONE; + deleteAuthData(); + v3f playerpos; - *pkt >> playerpos >> m_map_seed >> m_recommended_send_interval; + *pkt >> playerpos >> m_map_seed >> m_recommended_send_interval + >> m_sudo_auth_methods; playerpos -= v3f(0, BS / 2, 0); @@ -82,7 +118,28 @@ void Client::handleCommand_AuthAccept(NetworkPacket* pkt) m_state = LC_Init; } +void Client::handleCommand_AcceptSudoMode(NetworkPacket* pkt) +{ + m_chosen_auth_mech = AUTH_MECHANISM_NONE; + deleteAuthData(); + m_password = m_new_password; + + verbosestream << "Client: Recieved TOCLIENT_ACCEPT_SUDO_MODE." << std::endl; + + // send packet to actually set the password + startAuth(AUTH_MECHANISM_FIRST_SRP); + + // reset again + m_chosen_auth_mech = AUTH_MECHANISM_NONE; +} +void Client::handleCommand_DenySudoMode(NetworkPacket* pkt) +{ + m_chat_queue.push(L"Password change denied. Password NOT changed."); + // reset everything and be sad + deleteAuthData(); + m_chosen_auth_mech = AUTH_MECHANISM_NONE; +} void Client::handleCommand_InitLegacy(NetworkPacket* pkt) { if (pkt->getSize() < 1) @@ -101,6 +158,7 @@ void Client::handleCommand_InitLegacy(NetworkPacket* pkt) } m_server_ser_ver = deployed; + m_proto_ver = deployed; // Get player position v3s16 playerpos_s16(0, BS * 2 + BS * 20, 0); @@ -1105,3 +1163,36 @@ void Client::handleCommand_EyeOffset(NetworkPacket* pkt) *pkt >> player->eye_offset_first >> player->eye_offset_third; } + +void Client::handleCommand_SrpBytesSandB(NetworkPacket* pkt) +{ + if ((m_chosen_auth_mech != AUTH_MECHANISM_LEGACY_PASSWORD) + && (m_chosen_auth_mech != AUTH_MECHANISM_SRP)) { + errorstream << "Client: Recieved SRP S_B login message," + << " but wasn't supposed to (chosen_mech=" + << m_chosen_auth_mech << ")." << std::endl; + return; + } + + char *bytes_M = 0; + size_t len_M = 0; + SRPUser *usr = (SRPUser *) m_auth_data; + std::string s; + std::string B; + *pkt >> s >> B; + + infostream << "Client: Recieved TOCLIENT_SRP_BYTES_S_B." << std::endl; + + srp_user_process_challenge(usr, (const unsigned char *) s.c_str(), s.size(), + (const unsigned char *) B.c_str(), B.size(), + (unsigned char **) &bytes_M, &len_M); + + if ( !bytes_M ) { + errorstream << "Client: SRP-6a S_B safety check violation!" << std::endl; + return; + } + + NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_M, 0); + resp_pkt << std::string(bytes_M, len_M); + Send(&resp_pkt); +} diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 0d2015e7f..0408b9cac 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -41,8 +41,10 @@ public: u16 getPeerId() { return m_peer_id; } u16 getCommand() { return m_command; } - // Data extractors + // Returns a c-string without copying. + // A better name for this would be getRawString() char* getString(u32 from_offset); + // major difference to putCString(): doesn't write len into the buffer void putRawString(const char* src, u32 len); NetworkPacket& operator>>(std::string& dst); diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index ba934957d..ba12a206e 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -120,11 +120,15 @@ with this program; if not, write to the Free Software Foundation, Inc., permit translation Add TOCLIENT_DELETE_PARTICLESPAWNER (0x53), fixing the u16 read and reading u32 - Add TOSERVER_INIT new opcode (0x02) for client presentation to server - Add TOSERVER_AUTH new opcode (0x03) for client authentication + Add new opcode TOSERVER_INIT for client presentation to server + Add new opcodes TOSERVER_FIRST_SRP, TOSERVER_SRP_BYTES_A, + TOSERVER_SRP_BYTES_M, TOCLIENT_SRP_BYTES_S_B + for the three supported auth mechanisms around srp + Add new opcodes TOCLIENT_ACCEPT_SUDO_MODE and TOCLIENT_DENY_SUDO_MODE + for sudo mode handling (auth mech generic way of changing password). Add TOCLIENT_HELLO for presenting server to client after client presentation - Add TOCLIENT_AUTH_ACCEPT to accept connexion from client + Add TOCLIENT_AUTH_ACCEPT to accept connection from client */ #define LATEST_PROTOCOL_VERSION 24 @@ -151,14 +155,31 @@ with this program; if not, write to the Free Software Foundation, Inc., enum ToClientCommand { TOCLIENT_HELLO = 0x02, - TOCLIENT_AUTH_ACCEPT = 0x03, - TOCLIENT_ACCESS_DENIED = 0x0A, /* - u16 command - u16 reason_length - wstring reason - */ + Sent after TOSERVER_INIT. + u8 deployed version + u32 supported auth methods + std::string username that should be used for legacy hash (for proper casing) + */ + TOCLIENT_AUTH_ACCEPT = 0x03, + /* + Message from server to accept auth. + + v3s16 player's position + v3f(0,BS/2,0) floatToInt'd + u64 map seed + f1000 recommended send interval + u32 : supported auth methods for sudo mode + (where the user can change their password) + */ + TOCLIENT_ACCEPT_SUDO_MODE = 0x04, + /* + Sent to client to show it is in sudo mode now. + */ + TOCLIENT_DENY_SUDO_MODE = 0x05, + /* + Signals client that sudo mode auth failed. + */ TOCLIENT_INIT_LEGACY = 0x10, /* Server's reply to TOSERVER_INIT. @@ -173,7 +194,11 @@ enum ToClientCommand NOTE: The position in here is deprecated; position is explicitly sent afterwards */ - + TOCLIENT_ACCESS_DENIED = 0x0A, + /* + u8 reason + std::string custom reason (if reason == SERVER_ACCESSDENIED_CUSTOM_STRING) + */ TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks TOCLIENT_ADDNODE = 0x21, /* @@ -589,7 +614,16 @@ enum ToClientCommand u32 id */ - TOCLIENT_NUM_MSG_TYPES = 0x54, + TOCLIENT_SRP_BYTES_S_B = 0x60, + /* + Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP. + + u16 command + std::string bytes_s + std::string bytes_B + */ + + TOCLIENT_NUM_MSG_TYPES = 0x61, }; enum ToServerCommand @@ -598,18 +632,11 @@ enum ToServerCommand /* Sent first after connected. - [0] u16 TOSERVER_INIT [2] u8 SER_FMT_VER_HIGHEST_READ [3] u8 compression_modes - */ - - TOSERVER_AUTH = 0x03, - /* - Sent first after presentation (INIT). - [0] std::string player_name - [0+*] std::string password (new in some version) - [0+*+*] u16 minimum supported network protocol version (added sometime) - [0+*+*+2] u16 maximum supported network protocol version (added later than the previous one) + [4] u16 minimum supported network protocol version + [6] u16 maximum supported network protocol version + [8] std::string player name */ TOSERVER_INIT_LEGACY = 0x10, @@ -817,15 +844,6 @@ enum ToServerCommand u8[len] field value */ - TOSERVER_PASSWORD = 0x3d, - /* - Sent to change password. - - [0] u16 TOSERVER_PASSWORD - [2] std::string old password - [2+*] std::string new password - */ - TOSERVER_REQUEST_MEDIA = 0x40, /* u16 command @@ -857,7 +875,49 @@ enum ToServerCommand u8[len] full_version_string */ - TOSERVER_NUM_MSG_TYPES = 0x44, + TOSERVER_FIRST_SRP = 0x50, + /* + Belonging to AUTH_MECHANISM_FIRST_SRP. + + std::string srp salt + std::string srp verification key + u8 is_empty (=1 if password is empty, 0 otherwise) + */ + + TOSERVER_SRP_BYTES_A = 0x51, + /* + Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP, + depending on current_login_based_on. + + std::string bytes_A + u8 current_login_based_on : on which version of the password's + hash this login is based on (0 legacy hash, + or 1 directly the password) + */ + + TOSERVER_SRP_BYTES_M = 0x52, + /* + Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP. + + std::string bytes_M + */ + + TOSERVER_NUM_MSG_TYPES = 0x53, +}; + +enum AuthMechanism +{ + // reserved + AUTH_MECHANISM_NONE = 0, + + // SRP based on the legacy hash + AUTH_MECHANISM_LEGACY_PASSWORD = 1 << 0, + + // SRP based on the srp verification key + AUTH_MECHANISM_SRP = 1 << 1, + + // Establishes a srp verification key, for first login and password changing + AUTH_MECHANISM_FIRST_SRP = 1 << 2, }; enum AccessDeniedCode { diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp index 9c1da9ad1..92d24fe40 100644 --- a/src/network/serveropcodes.cpp +++ b/src/network/serveropcodes.cpp @@ -26,8 +26,8 @@ const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] = { null_command_handler, // 0x00 (never use this) null_command_handler, // 0x01 - { "TOSERVER_INIT", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Init }, // 0x02 - { "TOSERVER_AUTH", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Auth }, // 0x03 + { "TOSERVER_INIT", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Init }, // 0x02 + null_command_handler, // 0x03 null_command_handler, // 0x04 null_command_handler, // 0x05 null_command_handler, // 0x06 @@ -85,13 +85,28 @@ const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] = { "TOSERVER_REMOVED_SOUNDS", TOSERVER_STATE_INGAME, &Server::handleCommand_RemovedSounds }, // 0x3a { "TOSERVER_NODEMETA_FIELDS", TOSERVER_STATE_INGAME, &Server::handleCommand_NodeMetaFields }, // 0x3b { "TOSERVER_INVENTORY_FIELDS", TOSERVER_STATE_INGAME, &Server::handleCommand_InventoryFields }, // 0x3c - { "TOSERVER_PASSWORD", TOSERVER_STATE_INGAME, &Server::handleCommand_Password }, // 0x3d + null_command_handler, // 0x3d null_command_handler, // 0x3e null_command_handler, // 0x3f { "TOSERVER_REQUEST_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_RequestMedia }, // 0x40 { "TOSERVER_RECEIVED_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_ReceivedMedia }, // 0x41 { "TOSERVER_BREATH", TOSERVER_STATE_INGAME, &Server::handleCommand_Breath }, // 0x42 { "TOSERVER_CLIENT_READY", TOSERVER_STATE_STARTUP, &Server::handleCommand_ClientReady }, // 0x43 + null_command_handler, // 0x44 + null_command_handler, // 0x45 + null_command_handler, // 0x46 + null_command_handler, // 0x47 + null_command_handler, // 0x48 + null_command_handler, // 0x49 + null_command_handler, // 0x4a + null_command_handler, // 0x4b + null_command_handler, // 0x4c + null_command_handler, // 0x4d + null_command_handler, // 0x4e + null_command_handler, // 0x4f + { "TOSERVER_FIRST_SRP", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_FirstSrp }, // 0x50 + { "TOSERVER_SRP_BYTES_A", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_SrpBytesA }, // 0x51 + { "TOSERVER_SRP_BYTES_M", TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_SrpBytesM }, // 0x52 }; const static ClientCommandFactory null_command_factory = { "TOCLIENT_NULL", 0, false }; @@ -100,10 +115,10 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] = { null_command_factory, // 0x00 null_command_factory, // 0x01 - { "TOCLIENT_HELLO", 0, true }, // 0x02 + null_command_factory, // 0x02 { "TOCLIENT_AUTH_ACCEPT", 0, true }, // 0x03 - null_command_factory, // 0x04 - null_command_factory, // 0x05 + { "TOCLIENT_ACCEPT_SUDO_MODE", 0, true }, // 0x04 + { "TOCLIENT_DENY_SUDO_MODE", 0, true }, // 0x05 null_command_factory, // 0x06 null_command_factory, // 0x07 null_command_factory, // 0x08 @@ -182,4 +197,17 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] = { "TOCLIENT_LOCAL_PLAYER_ANIMATIONS", 0, true }, // 0x51 { "TOCLIENT_EYE_OFFSET", 0, true }, // 0x52 { "TOCLIENT_DELETE_PARTICLESPAWNER", 0, true }, // 0x53 + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + null_command_factory, + { "TOSERVER_SRP_BYTES_S_B", 0, true }, // 0x60 }; diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 6b1d5bc02..a6f5ffca1 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -32,9 +32,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "version.h" #include "network/networkprotocol.h" #include "network/serveropcodes.h" +#include "util/auth.h" #include "util/base64.h" #include "util/pointedthing.h" #include "util/serialize.h" +#include "util/srp.h" void Server::handleCommand_Deprecated(NetworkPacket* pkt) { @@ -92,13 +94,14 @@ void Server::handleCommand_Init(NetworkPacket* pkt) u8 compression_modes; u16 min_net_proto_version = 0; u16 max_net_proto_version; + std::string playerName; *pkt >> client_max >> compression_modes >> min_net_proto_version - >> max_net_proto_version; + >> max_net_proto_version >> playerName; u8 our_max = SER_FMT_VER_HIGHEST_READ; // Use the highest version supported by both - int deployed = std::min(client_max, our_max); + u8 deployed = std::min(client_max, our_max); // If it's lower than the lowest supported, give up. if (deployed < SER_FMT_VER_LOWEST) deployed = SER_FMT_VER_INVALID; @@ -137,7 +140,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) client->net_proto_version = net_proto_version; - // On this handler protocol version 25 is required + // On this handler at least protocol version 25 is required if (net_proto_version < 25 || net_proto_version < SERVER_PROTOCOL_VERSION_MIN || net_proto_version > SERVER_PROTOCOL_VERSION_MAX) { @@ -156,36 +159,9 @@ void Server::handleCommand_Init(NetworkPacket* pkt) } } - // @TODO: check if we support same modes, but not required now - - client->setSupportedCompressionModes(compression_modes); - - m_clients.event(pkt->getPeerId(), CSE_Init); -} - -void Server::handleCommand_Auth(NetworkPacket* pkt) -{ - std::string addr_s; - try { - Address address = getPeerAddress(pkt->getPeerId()); - addr_s = address.serializeString(); - } - catch (con::PeerNotFoundException &e) { - /* - * no peer for this packet found - * most common reason is peer timeout, e.g. peer didn't - * respond for some time, your server was overloaded or - * things like that. - */ - infostream << "Server::ProcessData(): Canceling: peer " - << pkt->getPeerId() << " not found" << std::endl; - return; - } - - std::string playerName, playerPassword; - - *pkt >> playerName >> playerPassword; - + /* + Validate player name + */ const char* playername = playerName.c_str(); if (playerName.size() > PLAYERNAME_SIZE) { @@ -202,6 +178,11 @@ void Server::handleCommand_Auth(NetworkPacket* pkt) return; } + m_clients.setPlayerName(pkt->getPeerId(), 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; @@ -222,23 +203,9 @@ void Server::handleCommand_Auth(NetworkPacket* pkt) } } - if (playerPassword.size() > PASSWORD_SIZE) { - actionstream << "Server: Player with an too long password " - << "tried to connect from " << addr_s << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); - return; - } - infostream << "Server: New connection: \"" << playerName << "\" from " << addr_s << " (peer_id=" << pkt->getPeerId() << ")" << std::endl; - if(!base64_is_valid(playerPassword)){ - actionstream << "Server: " << playerName - << " supplied invalid password hash" << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); - return; - } - // Enforce user limit. // Don't enforce for users that have some admin right if (m_clients.getClientIDs(CS_Created).size() >= g_settings->getU16("max_users") && @@ -247,76 +214,74 @@ void Server::handleCommand_Auth(NetworkPacket* pkt) !checkPriv(playername, "privs") && !checkPriv(playername, "password") && playername != g_settings->get("name")) { - actionstream << "Server: " << playername << " tried to join, but there" - << " are already max_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(pkt->getPeerId(), SERVER_ACCESSDENIED_TOO_MANY_USERS); return; } - std::string checkpwd; // Password hash to check against - bool has_auth = m_script->getAuth(playername, &checkpwd, NULL); + /* + Compose auth methods for answer + */ + std::string encpwd; // encrypted Password field for the user + bool has_auth = m_script->getAuth(playername, &encpwd, NULL); + u32 auth_mechs = 0; - // If no authentication info exists for user, create it - if (!has_auth) { - if (!isSingleplayer() && - g_settings->getBool("disallow_empty_password") && - playerPassword.empty()) { - actionstream << "Server: " << playerName - << " supplied empty password" << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_EMPTY_PASSWORD); + client->chosen_mech = AUTH_MECHANISM_NONE; + + if (has_auth) { + std::vector pwd_components = str_split(encpwd, '#'); + if (pwd_components.size() == 4) { + if (pwd_components[1] == "1") { // 1 means srp + 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); + 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); return; } - std::string raw_default_password = - g_settings->get("default_password"); - std::string initial_password = - translatePassword(playername, raw_default_password); - - // If default_password is empty, allow any initial password - if (raw_default_password.length() == 0) - initial_password = playerPassword.c_str(); - - m_script->createAuth(playername, initial_password); + } else { + std::string default_password = g_settings->get("default_password"); + if (default_password.length() == 0) { + auth_mechs |= AUTH_MECHANISM_FIRST_SRP; + } else { + // Take care of default passwords. + client->enc_pwd = getSRPVerifier(playerName, default_password); + auth_mechs |= AUTH_MECHANISM_SRP; + } } - has_auth = m_script->getAuth(playername, &checkpwd, NULL); - - if(!has_auth) { - actionstream << "Server: " << playerName << " cannot be authenticated" - << " (auth handler does not work?)" << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); - return; - } - - if(playerPassword.c_str() != checkpwd) { - actionstream << "Server: " << playerName << " supplied wrong password" - << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); - return; - } - - RemotePlayer *player = - static_cast(m_env->getPlayer(playername)); - - if (player && player->peer_id != 0) { - errorstream << "Server: " << playername << ": Failed to emerge player" - << " (player allocated to an another client)" << std::endl; - DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_ALREADY_CONNECTED); - } - - m_clients.setPlayerName(pkt->getPeerId(), playername); - /* - Answer with a TOCLIENT_INIT + Answer with a TOCLIENT_HELLO */ - NetworkPacket resp_pkt(TOCLIENT_AUTH_ACCEPT, 1 + 6 + 8 + 4, pkt->getPeerId()); + verbosestream << "Sending TOCLIENT_HELLO with auth method field: " + << auth_mechs << std::endl; - resp_pkt << v3f(0,0,0) << (u64) m_env->getServerMap().getSeed() - << g_settings->getFloat("dedicated_server_step"); + NetworkPacket resp_pkt(TOCLIENT_HELLO, 1 + 4 + + legacyPlayerNameCasing.size(), pkt->getPeerId()); + + resp_pkt << deployed << auth_mechs << legacyPlayerNameCasing; Send(&resp_pkt); - m_clients.event(pkt->getPeerId(), CSE_Init); + + client->allowed_auth_mechs = auth_mechs; + client->setSupportedCompressionModes(compression_modes); + + m_clients.event(pkt->getPeerId(), CSE_Hello); } void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) @@ -354,7 +319,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) return; } - verbosestream << "Server: Got TOSERVER_INIT from " << addr_s << " (peer_id=" + verbosestream << "Server: Got TOSERVER_INIT_LEGACY from " << addr_s << " (peer_id=" << pkt->getPeerId() << ")" << std::endl; // Do not allow multiple players in simple singleplayer mode. @@ -422,6 +387,10 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) net_proto_version = max_net_proto_version; } + // The client will send up to date init packet, ignore this one + if (net_proto_version >= 25) + return; + verbosestream << "Server: " << addr_s << ": Protocol version: min: " << min_net_proto_version << ", max: " << max_net_proto_version << ", chosen: " << net_proto_version << std::endl; @@ -624,7 +593,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) << g_settings->getFloat("dedicated_server_step"); Send(&resp_pkt); - m_clients.event(pkt->getPeerId(), CSE_Init); + m_clients.event(pkt->getPeerId(), CSE_InitLegacy); } void Server::handleCommand_Init2(NetworkPacket* pkt) @@ -1223,33 +1192,33 @@ void Server::handleCommand_Breath(NetworkPacket* pkt) void Server::handleCommand_Password(NetworkPacket* pkt) { - if ((pkt->getCommand() == TOSERVER_PASSWORD && pkt->getSize() < 4) || - pkt->getSize() != PASSWORD_SIZE * 2) + if (pkt->getSize() != PASSWORD_SIZE * 2) return; std::string oldpwd; std::string newpwd; - if (pkt->getCommand() == TOSERVER_PASSWORD) { - *pkt >> oldpwd >> 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; } - // 13/03/15 - // Protocol v24 compat. Please remove in 1 year after - // client convergence to 0.4.13/0.5.x - else { - 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; - } + 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; } Player *player = m_env->getPlayer(pkt->getPeerId()); @@ -1848,3 +1817,258 @@ void Server::handleCommand_InventoryFields(NetworkPacket* pkt) m_script->on_playerReceiveFields(playersao, formname, fields); } + +void Server::handleCommand_FirstSrp(NetworkPacket* pkt) +{ + RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid); + ClientState cstate = client->getState(); + + std::string playername = client->getName(); + + std::string salt; + std::string verification_key; + + std::string addr_s = getPeerAddress(pkt->getPeerId()).serializeString(); + u8 is_empty; + + *pkt >> salt >> verification_key >> is_empty; + + verbosestream << "Server: Got TOSERVER_FIRST_SRP from " << addr_s + << ", with is_empty= " << is_empty << std::endl; + + // Either this packet is sent because the user is new or to change the password + if (cstate == CS_HelloSent) { + if (!client->isMechAllowed(AUTH_MECHANISM_FIRST_SRP)) { + 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); + return; + } + + if (!isSingleplayer() && + g_settings->getBool("disallow_empty_password") && + is_empty == 1) { + actionstream << "Server: " << playername + << " supplied empty password from " << addr_s << std::endl; + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_EMPTY_PASSWORD); + return; + } + + std::string initial_ver_key; + std::string raw_default_password = g_settings->get("default_password"); + // If default_password is empty, allow any initial password + if (raw_default_password.length() == 0) { + initial_ver_key = encodeSRPVerifier(verification_key, salt); + } else { + initial_ver_key = getSRPVerifier(playername, raw_default_password); + } + + m_script->createAuth(playername, initial_ver_key); + + acceptAuth(pkt->getPeerId(), false); + } else { + if (cstate < CS_SudoMode) { + infostream << "Server::ProcessData(): Ignoring TOSERVER_FIRST_SRP from " + << addr_s << ": " << "Client has wrong state " << cstate << "." + << std::endl; + return; + } + m_clients.event(pkt->getPeerId(), CSE_SudoLeave); + std::string pw_db_field = encodeSRPVerifier(verification_key, salt); + bool success = m_script->setPassword(playername, pw_db_field); + if (success) { + actionstream << playername << " changes password" << std::endl; + SendChatMessage(pkt->getPeerId(), L"Password change successful."); + } else { + actionstream << playername << " tries to change password but " + << "it fails" << std::endl; + SendChatMessage(pkt->getPeerId(), L"Password change failed or unavailable."); + } + } +} + +void Server::handleCommand_SrpBytesA(NetworkPacket* pkt) +{ + RemoteClient* client = getClient(pkt->getPeerId(), 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; + 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; + if (wantSudo) { + DenySudoAccess(pkt->getPeerId()); + return; + } else { + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + return; + } + } + + std::string bytes_A; + u8 based_on; + *pkt >> bytes_A >> based_on; + + infostream << "Server: TOSERVER_SRP_BYTES_A received with " + << "based_on=" << int(based_on) << " and len_A=" + << bytes_A.length() << "." << std::endl; + + AuthMechanism chosen = (based_on == 0) ? + AUTH_MECHANISM_LEGACY_PASSWORD : AUTH_MECHANISM_SRP; + + 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()); + 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); + return; + } + } + + client->chosen_mech = chosen; + + std::string bytes_s; + std::string bytes_v; + + if (based_on == 0) { + char *p_bytes_s = 0; + size_t len_s = 0; + char *p_bytes_v = 0; + size_t len_v = 0; + getSRPVerifier(client->getName(), client->enc_pwd, + &p_bytes_s, &len_s, + &p_bytes_v, &len_v); + bytes_s = std::string(p_bytes_s, len_s); + bytes_v = std::string(p_bytes_v, len_v); + free(p_bytes_s); + free(p_bytes_v); + } else if (!decodeSRPVerifier(client->enc_pwd, &bytes_s, &bytes_v)) { + // 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); + return; + } + + char *bytes_B = 0; + size_t len_B = 0; + + client->auth_data = srp_verifier_new(SRP_SHA256, SRP_NG_2048, + client->getName().c_str(), + (const unsigned char *) bytes_s.c_str(), bytes_s.size(), + (const unsigned char *) bytes_v.c_str(), bytes_v.size(), + (const unsigned char *) bytes_A.c_str(), bytes_A.size(), + NULL, 0, + (unsigned char **) &bytes_B, &len_B, NULL, NULL); + + if (!bytes_B) { + actionstream << "Server: User " << client->getName() + << " tried to log in, SRP-6a safety check violated in _A handler." + << std::endl; + if (wantSudo) { + DenySudoAccess(pkt->getPeerId()); + return; + } else { + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + return; + } + } + + NetworkPacket resp_pkt(TOCLIENT_SRP_BYTES_S_B, 0, pkt->getPeerId()); + resp_pkt << bytes_s << std::string(bytes_B, len_B); + Send(&resp_pkt); +} + +void Server::handleCommand_SrpBytesM(NetworkPacket* pkt) +{ + RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid); + ClientState cstate = client->getState(); + + bool wantSudo = (cstate == CS_Active); + + verbosestream << "Server: Recieved TOCLIENT_SRP_BYTES_M." << std::endl; + + if (!((cstate == CS_HelloSent) || (cstate == CS_Active))) { + actionstream << "Server: got SRP _M packet in wrong state " + << cstate << " from " + << getPeerAddress(pkt->getPeerId()).serializeString() + << ". Ignoring." << std::endl; + return; + } + + 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; + if (wantSudo) { + DenySudoAccess(pkt->getPeerId()); + return; + } else { + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + return; + } + } + + std::string bytes_M; + *pkt >> bytes_M; + + if (srp_verifier_get_session_key_length((SRPVerifier *) client->auth_data) + != bytes_M.size()) { + actionstream << "Server: User " << client->getName() + << " at " << getPeerAddress(pkt->getPeerId()).serializeString() + << " sent bytes_M with invalid length " << bytes_M.size() << std::endl; + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA); + return; + } + + unsigned char *bytes_HAMK = 0; + + srp_verifier_verify_session((SRPVerifier *) client->auth_data, + (unsigned char *)bytes_M.c_str(), &bytes_HAMK); + + if (!bytes_HAMK) { + if (wantSudo) { + actionstream << "Server: User " << client->getName() + << " at " << getPeerAddress(pkt->getPeerId()).serializeString() + << " tried to change their password, but supplied wrong" + << " (SRP) password for authentication." << std::endl; + DenySudoAccess(pkt->getPeerId()); + return; + } else { + actionstream << "Server: User " << client->getName() + << " at " << getPeerAddress(pkt->getPeerId()).serializeString() + << " supplied wrong (SRP) password from address " + << getPeerAddress(pkt->getPeerId()).serializeString() + << "." << std::endl; + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); + return; + } + } + + acceptAuth(pkt->getPeerId(), wantSudo); +} diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 0464f46d9..283cca01f 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "tool.h" #include "filesys.h" #include "settings.h" +#include "util/auth.h" // debug(...) // Writes a line to dstream diff --git a/src/server.cpp b/src/server.cpp index 7289dc905..f032da406 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2537,6 +2537,13 @@ void Server::RespawnPlayer(u16 peer_id) playersao->setPos(pos); } } +void Server::DenySudoAccess(u16 peer_id) +{ + DSTACK(__FUNCTION_NAME); + + NetworkPacket pkt(TOCLIENT_DENY_SUDO_MODE, 0, peer_id); + Send(&pkt); +} void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason) { @@ -2558,6 +2565,37 @@ void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason) m_con.DisconnectPeer(peer_id); } +void Server::acceptAuth(u16 peer_id, bool forSudoMode) +{ + DSTACK(__FUNCTION_NAME); + + if (!forSudoMode) { + RemoteClient* client = getClient(peer_id, CS_Invalid); + + NetworkPacket resp_pkt(TOCLIENT_AUTH_ACCEPT, 1 + 6 + 8 + 4, peer_id); + + // Right now, the auth mechs don't change between login and sudo mode. + u32 sudo_auth_mechs = client->allowed_auth_mechs; + client->allowed_sudo_mechs = sudo_auth_mechs; + + resp_pkt << v3f(0,0,0) << (u64) m_env->getServerMap().getSeed() + << g_settings->getFloat("dedicated_server_step") + << sudo_auth_mechs; + + Send(&resp_pkt); + m_clients.event(peer_id, CSE_AuthAccept); + } else { + NetworkPacket resp_pkt(TOCLIENT_ACCEPT_SUDO_MODE, 1 + 6 + 8 + 4, peer_id); + + // We only support SRP right now + u32 sudo_auth_mechs = AUTH_MECHANISM_FIRST_SRP; + + resp_pkt << sudo_auth_mechs; + Send(&resp_pkt); + m_clients.event(peer_id, CSE_SudoSuccess); + } +} + void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) { DSTACK(__FUNCTION_NAME); diff --git a/src/server.h b/src/server.h index 25ffb7fc6..f53e23a3a 100644 --- a/src/server.h +++ b/src/server.h @@ -193,7 +193,6 @@ public: void handleCommand_Null(NetworkPacket* pkt) {}; void handleCommand_Deprecated(NetworkPacket* pkt); void handleCommand_Init(NetworkPacket* pkt); - void handleCommand_Auth(NetworkPacket* pkt); void handleCommand_Init_Legacy(NetworkPacket* pkt); void handleCommand_Init2(NetworkPacket* pkt); void handleCommand_RequestMedia(NetworkPacket* pkt); @@ -213,6 +212,9 @@ public: void handleCommand_RemovedSounds(NetworkPacket* pkt); void handleCommand_NodeMetaFields(NetworkPacket* pkt); void handleCommand_InventoryFields(NetworkPacket* pkt); + void handleCommand_FirstSrp(NetworkPacket* pkt); + void handleCommand_SrpBytesA(NetworkPacket* pkt); + void handleCommand_SrpBytesM(NetworkPacket* pkt); void ProcessData(NetworkPacket *pkt); @@ -360,7 +362,9 @@ public: void peerAdded(con::Peer *peer); void deletingPeer(con::Peer *peer, bool timeout); + void DenySudoAccess(u16 peer_id); void DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason=""); + void acceptAuth(u16 peer_id, bool forSudoMode); void DenyAccess_Legacy(u16 peer_id, const std::wstring &reason); bool getClientConInfo(u16 peer_id, con::rtt_stat_type type,float* retval); bool getClientInfo(u16 peer_id,ClientState* state, u32* uptime, diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 112f09bb9..33900a43a 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,11 +1,14 @@ set(UTIL_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/auth.cpp ${CMAKE_CURRENT_SOURCE_DIR}/base64.cpp ${CMAKE_CURRENT_SOURCE_DIR}/directiontables.cpp ${CMAKE_CURRENT_SOURCE_DIR}/numeric.cpp ${CMAKE_CURRENT_SOURCE_DIR}/pointedthing.cpp ${CMAKE_CURRENT_SOURCE_DIR}/serialize.cpp ${CMAKE_CURRENT_SOURCE_DIR}/sha1.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/sha256.c ${CMAKE_CURRENT_SOURCE_DIR}/string.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/srp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/timetaker.cpp PARENT_SCOPE) diff --git a/src/util/auth.cpp b/src/util/auth.cpp new file mode 100644 index 000000000..ac5139535 --- /dev/null +++ b/src/util/auth.cpp @@ -0,0 +1,126 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include "auth.h" +#include "base64.h" +#include "sha1.h" +#include "srp.h" +#include "string.h" + +// Get an sha-1 hash of the player's name combined with +// the password entered. That's what the server uses as +// their password. (Exception : if the password field is +// blank, we send a blank password - this is for backwards +// compatibility with password-less players). +std::string translatePassword(const std::string &name, + const std::string &password) +{ + if (password.length() == 0) + return ""; + + std::string slt = name + password; + SHA1 sha1; + sha1.addBytes(slt.c_str(), slt.length()); + unsigned char *digest = sha1.getDigest(); + std::string pwd = base64_encode(digest, 20); + free(digest); + return pwd; +} + +void getSRPVerifier(const std::string &name, + const std::string &password, char **salt, size_t *salt_len, + char **bytes_v, size_t *len_v) +{ + std::string n_name = lowercase(name); + srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048, + n_name.c_str(), (const unsigned char *)password.c_str(), + password.size(), (unsigned char **)salt, salt_len, + (unsigned char **)bytes_v, len_v, NULL, NULL); +} + +// Get a db-ready SRP verifier +// The salt param is only modifyable by this method so that you can free it +// if it was allocated. You shouldn't use it for other purposes, as you will +// need the contents of salt_len too. +inline static std::string getSRPVerifier(const std::string &name, + const std::string &password, char ** salt, size_t salt_len) +{ + char * bytes_v = NULL; + size_t len_v; + getSRPVerifier(name, password, salt, &salt_len, + &bytes_v, &len_v); + std::string ret_val = encodeSRPVerifier(std::string(bytes_v, len_v), + std::string(*salt, salt_len)); + free(bytes_v); + return ret_val; +} + +// Get a db-ready SRP verifier +std::string getSRPVerifier(const std::string &name, + const std::string &password) +{ + char * salt = NULL; + std::string ret_val = getSRPVerifier(name, + password, &salt, 0); + free(salt); + return ret_val; +} + +// Get a db-ready SRP verifier +std::string getSRPVerifier(const std::string &name, + const std::string &password, const std::string &salt) +{ + // The implementation won't change the salt if its set, + // therefore we can cast. + char *salt_cstr = (char *)salt.c_str(); + return getSRPVerifier(name, password, + &salt_cstr, salt.size()); +} + +// Make a SRP verifier db-ready +std::string encodeSRPVerifier(const std::string &verifier, + const std::string &salt) +{ + std::ostringstream ret_str; + ret_str << "#1#" + << base64_encode((unsigned char*) salt.c_str(), salt.size()) << "#" + << base64_encode((unsigned char*) verifier.c_str(), verifier.size()); + return ret_str.str(); +} + +bool decodeSRPVerifier(const std::string &enc_pwd, + std::string *salt, std::string *bytes_v) +{ + std::vector pwd_components = str_split(enc_pwd, '#'); + + if ((pwd_components.size() != 4) + || (pwd_components[1] != "1") // 1 means srp + || !base64_is_valid(pwd_components[2]) + || !base64_is_valid(pwd_components[3])) + return false; + + std::string salt_str = base64_decode(pwd_components[2]); + std::string bytes_v_str = base64_decode(pwd_components[3]); + *salt = salt_str; + *bytes_v = bytes_v_str; + return true; + +} diff --git a/src/util/auth.h b/src/util/auth.h new file mode 100644 index 000000000..36d8c20a4 --- /dev/null +++ b/src/util/auth.h @@ -0,0 +1,37 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef AUTH_H +#define AUTH_H + +std::string translatePassword(const std::string &name, + const std::string &password); +void getSRPVerifier(const std::string &name, + const std::string &password, char **salt, size_t *salt_len, + char **bytes_v, size_t *len_v); +std::string getSRPVerifier(const std::string &name, + const std::string &password); +std::string getSRPVerifier(const std::string &name, + const std::string &password, const std::string &salt); +std::string encodeSRPVerifier(const std::string &verifier, + const std::string &salt); +bool decodeSRPVerifier(const std::string &enc_pwd, + std::string *salt, std::string *bytes_v); + +#endif \ No newline at end of file diff --git a/src/util/md32_common.h b/src/util/md32_common.h new file mode 100644 index 000000000..085d1d7a5 --- /dev/null +++ b/src/util/md32_common.h @@ -0,0 +1,428 @@ +/* md32_common.h file used by sha256 implementation */ +/* ==================================================================== + * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + */ + +/*- + * This is a generic 32 bit "collector" for message digest algorithms. + * Whenever needed it collects input character stream into chunks of + * 32 bit values and invokes a block function that performs actual hash + * calculations. + * + * Porting guide. + * + * Obligatory macros: + * + * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN + * this macro defines byte order of input stream. + * HASH_CBLOCK + * size of a unit chunk HASH_BLOCK operates on. + * HASH_LONG + * has to be at lest 32 bit wide, if it's wider, then + * HASH_LONG_LOG2 *has to* be defined along + * HASH_CTX + * context structure that at least contains following + * members: + * typedef struct { + * ... + * HASH_LONG Nl,Nh; + * either { + * HASH_LONG data[HASH_LBLOCK]; + * unsigned char data[HASH_CBLOCK]; + * }; + * unsigned int num; + * ... + * } HASH_CTX; + * data[] vector is expected to be zeroed upon first call to + * HASH_UPDATE. + * HASH_UPDATE + * name of "Update" function, implemented here. + * HASH_TRANSFORM + * name of "Transform" function, implemented here. + * HASH_FINAL + * name of "Final" function, implemented here. + * HASH_BLOCK_DATA_ORDER + * name of "block" function capable of treating *unaligned* input + * message in original (data) byte order, implemented externally. + * HASH_MAKE_STRING + * macro convering context variables to an ASCII hash string. + * + * MD5 example: + * + * #define DATA_ORDER_IS_LITTLE_ENDIAN + * + * #define HASH_LONG MD5_LONG + * #define HASH_LONG_LOG2 MD5_LONG_LOG2 + * #define HASH_CTX MD5_CTX + * #define HASH_CBLOCK MD5_CBLOCK + * #define HASH_UPDATE MD5_Update + * #define HASH_TRANSFORM MD5_Transform + * #define HASH_FINAL MD5_Final + * #define HASH_BLOCK_DATA_ORDER md5_block_data_order + * + * + */ + +#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) +# error "DATA_ORDER must be defined!" +#endif + +#ifndef HASH_CBLOCK +# error "HASH_CBLOCK must be defined!" +#endif +#ifndef HASH_LONG +# error "HASH_LONG must be defined!" +#endif +#ifndef HASH_CTX +# error "HASH_CTX must be defined!" +#endif + +#ifndef HASH_UPDATE +# error "HASH_UPDATE must be defined!" +#endif +#ifndef HASH_TRANSFORM +# error "HASH_TRANSFORM must be defined!" +#endif +#ifndef HASH_FINAL +# error "HASH_FINAL must be defined!" +#endif + +#ifndef HASH_BLOCK_DATA_ORDER +# error "HASH_BLOCK_DATA_ORDER must be defined!" +#endif + +/* + * Engage compiler specific rotate intrinsic function if available. + */ +#undef ROTATE +#ifndef PEDANTIC +# if defined(_MSC_VER) +# define ROTATE(a,n) _lrotl(a,n) +# elif defined(__ICC) +# define ROTATE(a,n) _rotl(a,n) +# elif defined(__MWERKS__) +# if defined(__POWERPC__) +# define ROTATE(a,n) __rlwinm(a,n,0,31) +# elif defined(__MC68K__) + /* Motorola specific tweak. */ +# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) ) +# else +# define ROTATE(a,n) __rol(a,n) +# endif +# elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) + /* + * Some GNU C inline assembler templates. Note that these are + * rotates by *constant* number of bits! But that's exactly + * what we need here... + * + */ +# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) +# define ROTATE(a,n) ({ register unsigned int ret; \ + asm ( \ + "roll %1,%0" \ + : "=r"(ret) \ + : "I"(n), "0"((unsigned int)(a)) \ + : "cc"); \ + ret; \ + }) +# elif defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \ + defined(__powerpc) || defined(__ppc__) || defined(__powerpc64__) +# define ROTATE(a,n) ({ register unsigned int ret; \ + asm ( \ + "rlwinm %0,%1,%2,0,31" \ + : "=r"(ret) \ + : "r"(a), "I"(n)); \ + ret; \ + }) +# elif defined(__s390x__) +# define ROTATE(a,n) ({ register unsigned int ret; \ + asm ("rll %0,%1,%2" \ + : "=r"(ret) \ + : "r"(a), "I"(n)); \ + ret; \ + }) +# endif +# endif +#endif /* PEDANTIC */ + +#ifndef ROTATE +# define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +#endif + +#if defined(DATA_ORDER_IS_BIG_ENDIAN) + +# ifndef PEDANTIC +# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if ((defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)) || \ + (defined(__x86_64) || defined(__x86_64__)) +# if !defined(B_ENDIAN) + /* + * This gives ~30-40% performance improvement in SHA-256 compiled + * with gcc [on P4]. Well, first macro to be frank. We can pull + * this trick on x86* platforms only, because these CPUs can fetch + * unaligned data without raising an exception. + */ +# define HOST_c2l(c,l) ({ unsigned int r=*((const unsigned int *)(c)); \ + asm ("bswapl %0":"=r"(r):"0"(r)); \ + (c)+=4; (l)=r; }) +# define HOST_l2c(l,c) ({ unsigned int r=(l); \ + asm ("bswapl %0":"=r"(r):"0"(r)); \ + *((unsigned int *)(c))=r; (c)+=4; r; }) +# endif +# elif defined(__aarch64__) +# if defined(__BYTE_ORDER__) +# if defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define HOST_c2l(c,l) ({ unsigned int r; \ + asm ("rev %w0,%w1" \ + :"=r"(r) \ + :"r"(*((const unsigned int *)(c))));\ + (c)+=4; (l)=r; }) +# define HOST_l2c(l,c) ({ unsigned int r; \ + asm ("rev %w0,%w1" \ + :"=r"(r) \ + :"r"((unsigned int)(l)));\ + *((unsigned int *)(c))=r; (c)+=4; r; }) +# elif defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ +# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l)) +# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l)) +# endif +# endif +# endif +# endif +# if defined(__s390__) || defined(__s390x__) +# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l)) +# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l)) +# endif +# endif + +# ifndef HOST_c2l +# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ + l|=(((unsigned long)(*((c)++)))<<16), \ + l|=(((unsigned long)(*((c)++)))<< 8), \ + l|=(((unsigned long)(*((c)++))) ) ) +# endif +# ifndef HOST_l2c +# define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \ + *((c)++)=(unsigned char)(((l)>>16)&0xff), \ + *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ + *((c)++)=(unsigned char)(((l) )&0xff), \ + l) +# endif + +#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) + +# ifndef PEDANTIC +# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__s390x__) +# define HOST_c2l(c,l) ({ asm ("lrv %0,%1" \ + :"=d"(l) :"m"(*(const unsigned int *)(c)));\ + (c)+=4; (l); }) +# define HOST_l2c(l,c) ({ asm ("strv %1,%0" \ + :"=m"(*(unsigned int *)(c)) :"d"(l));\ + (c)+=4; (l); }) +# endif +# endif +# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) +# ifndef B_ENDIAN + /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */ +# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l) +# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l) +# endif +# endif +# endif + +# ifndef HOST_c2l +# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ + l|=(((unsigned long)(*((c)++)))<< 8), \ + l|=(((unsigned long)(*((c)++)))<<16), \ + l|=(((unsigned long)(*((c)++)))<<24) ) +# endif +# ifndef HOST_l2c +# define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ + *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ + *((c)++)=(unsigned char)(((l)>>16)&0xff), \ + *((c)++)=(unsigned char)(((l)>>24)&0xff), \ + l) +# endif + +#endif + +/* + * Time for some action:-) + */ + +int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) +{ + const unsigned char *data = data_; + unsigned char *p; + HASH_LONG l; + size_t n; + + if (len == 0) + return 1; + + l = (c->Nl + (((HASH_LONG) len) << 3)) & 0xffffffffUL; + /* + * 95-05-24 eay Fixed a bug with the overflow handling, thanks to Wei Dai + * for pointing it out. + */ + if (l < c->Nl) /* overflow */ + c->Nh++; + c->Nh += (HASH_LONG) (len >> 29); /* might cause compiler warning on + * 16-bit */ + c->Nl = l; + + n = c->num; + if (n != 0) { + p = (unsigned char *)c->data; + + if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { + memcpy(p + n, data, HASH_CBLOCK - n); + HASH_BLOCK_DATA_ORDER(c, p, 1); + n = HASH_CBLOCK - n; + data += n; + len -= n; + c->num = 0; + memset(p, 0, HASH_CBLOCK); /* keep it zeroed */ + } else { + memcpy(p + n, data, len); + c->num += (unsigned int)len; + return 1; + } + } + + n = len / HASH_CBLOCK; + if (n > 0) { + HASH_BLOCK_DATA_ORDER(c, data, n); + n *= HASH_CBLOCK; + data += n; + len -= n; + } + + if (len != 0) { + p = (unsigned char *)c->data; + c->num = (unsigned int)len; + memcpy(p, data, len); + } + return 1; +} + +void HASH_TRANSFORM(HASH_CTX *c, const unsigned char *data) +{ + HASH_BLOCK_DATA_ORDER(c, data, 1); +} + +int HASH_FINAL(unsigned char *md, HASH_CTX *c) +{ + unsigned char *p = (unsigned char *)c->data; + size_t n = c->num; + + p[n] = 0x80; /* there is always room for one */ + n++; + + if (n > (HASH_CBLOCK - 8)) { + memset(p + n, 0, HASH_CBLOCK - n); + n = 0; + HASH_BLOCK_DATA_ORDER(c, p, 1); + } + memset(p + n, 0, HASH_CBLOCK - 8 - n); + + p += HASH_CBLOCK - 8; +#if defined(DATA_ORDER_IS_BIG_ENDIAN) + (void)HOST_l2c(c->Nh, p); + (void)HOST_l2c(c->Nl, p); +#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) + (void)HOST_l2c(c->Nl, p); + (void)HOST_l2c(c->Nh, p); +#endif + p -= HASH_CBLOCK; + HASH_BLOCK_DATA_ORDER(c, p, 1); + c->num = 0; + memset(p, 0, HASH_CBLOCK); + +#ifndef HASH_MAKE_STRING +# error "HASH_MAKE_STRING must be defined!" +#else + HASH_MAKE_STRING(c, md); +#endif + + return 1; +} + +#ifndef MD32_REG_T +# if defined(__alpha) || defined(__sparcv9) || defined(__mips) +# define MD32_REG_T long +/* + * This comment was originaly written for MD5, which is why it + * discusses A-D. But it basically applies to all 32-bit digests, + * which is why it was moved to common header file. + * + * In case you wonder why A-D are declared as long and not + * as MD5_LONG. Doing so results in slight performance + * boost on LP64 architectures. The catch is we don't + * really care if 32 MSBs of a 64-bit register get polluted + * with eventual overflows as we *save* only 32 LSBs in + * *either* case. Now declaring 'em long excuses the compiler + * from keeping 32 MSBs zeroed resulting in 13% performance + * improvement under SPARC Solaris7/64 and 5% under AlphaLinux. + * Well, to be honest it should say that this *prevents* + * performance degradation. + * + */ +# else +/* + * Above is not absolute and there are LP64 compilers that + * generate better code if MD32_REG_T is defined int. The above + * pre-processor condition reflects the circumstances under which + * the conclusion was made and is subject to further extension. + * + */ +# define MD32_REG_T int +# endif +#endif diff --git a/src/util/sha2.h b/src/util/sha2.h new file mode 100644 index 000000000..6ac045feb --- /dev/null +++ b/src/util/sha2.h @@ -0,0 +1,154 @@ +/* crypto/sha/sha.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) +# error SHA is disabled. +# endif + +# if defined(OPENSSL_FIPS) +# define FIPS_SHA_SIZE_T size_t +# endif + +/* + Compat stuff from OpenSSL land + */ + +/* crypto.h */ + +# define fips_md_init(alg) fips_md_init_ctx(alg, alg) + +# define fips_md_init_ctx(alg, cx) \ + int alg##_Init(cx##_CTX *c) +# define fips_cipher_abort(alg) while(0) + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! SHA_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define SHA_LONG unsigned long +# elif defined(__ILP64__) +# define SHA_LONG unsigned long +# define SHA_LONG_LOG2 3 +# else +# define SHA_LONG unsigned int +# endif + +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) +# define SHA_DIGEST_LENGTH 20 + +typedef struct SHAstate_st { + SHA_LONG h0, h1, h2, h3, h4; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num; +} SHA_CTX; + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +# ifndef OPENSSL_NO_SHA256 +# ifdef OPENSSL_FIPS +int private_SHA224_Init(SHA256_CTX *c); +int private_SHA256_Init(SHA256_CTX *c); +# endif +int SHA224_Init(SHA256_CTX *c); +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA224_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); +int SHA256_Init(SHA256_CTX *c); +int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA256_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); +void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); +# endif + +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/util/sha256.c b/src/util/sha256.c new file mode 100644 index 000000000..311aac4a8 --- /dev/null +++ b/src/util/sha256.c @@ -0,0 +1,404 @@ +/* crypto/sha/sha256.c */ +/* ==================================================================== + * Copyright (c) 2004 The OpenSSL Project. All rights reserved + * according to the OpenSSL license [found in ../../LICENSE]. + * ==================================================================== + */ +# include +# include + +# include + +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2a 19 Mar 2015" +# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT + +const char SHA256_version[] = "SHA-256" OPENSSL_VERSION_PTEXT; + +/* mem_clr.c */ +unsigned char cleanse_ctr = 0; +void OPENSSL_cleanse(void *ptr, size_t len) +{ + unsigned char *p = ptr; + size_t loop = len, ctr = cleanse_ctr; + while (loop--) { + *(p++) = (unsigned char)ctr; + ctr += (17 + ((size_t)p & 0xF)); + } + p = memchr(ptr, (unsigned char)ctr, len); + if (p) + ctr += (63 + (size_t)p); + cleanse_ctr = (unsigned char)ctr; +} + +# define fips_md_init(alg) fips_md_init_ctx(alg, alg) +# define fips_md_init_ctx(alg, cx) \ + int alg##_Init(cx##_CTX *c) +# define fips_cipher_abort(alg) while(0) + +fips_md_init_ctx(SHA224, SHA256) +{ + memset(c, 0, sizeof(*c)); + c->h[0] = 0xc1059ed8UL; + c->h[1] = 0x367cd507UL; + c->h[2] = 0x3070dd17UL; + c->h[3] = 0xf70e5939UL; + c->h[4] = 0xffc00b31UL; + c->h[5] = 0x68581511UL; + c->h[6] = 0x64f98fa7UL; + c->h[7] = 0xbefa4fa4UL; + c->md_len = SHA224_DIGEST_LENGTH; + return 1; +} + +fips_md_init(SHA256) +{ + memset(c, 0, sizeof(*c)); + c->h[0] = 0x6a09e667UL; + c->h[1] = 0xbb67ae85UL; + c->h[2] = 0x3c6ef372UL; + c->h[3] = 0xa54ff53aUL; + c->h[4] = 0x510e527fUL; + c->h[5] = 0x9b05688cUL; + c->h[6] = 0x1f83d9abUL; + c->h[7] = 0x5be0cd19UL; + c->md_len = SHA256_DIGEST_LENGTH; + return 1; +} + +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md) +{ + SHA256_CTX c; + static unsigned char m[SHA224_DIGEST_LENGTH]; + + if (md == NULL) + md = m; + SHA224_Init(&c); + SHA256_Update(&c, d, n); + SHA256_Final(md, &c); + OPENSSL_cleanse(&c, sizeof(c)); + return (md); +} + +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) +{ + SHA256_CTX c; + static unsigned char m[SHA256_DIGEST_LENGTH]; + + if (md == NULL) + md = m; + SHA256_Init(&c); + SHA256_Update(&c, d, n); + SHA256_Final(md, &c); + OPENSSL_cleanse(&c, sizeof(c)); + return (md); +} + +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len) +{ + return SHA256_Update(c, data, len); +} + +int SHA224_Final(unsigned char *md, SHA256_CTX *c) +{ + return SHA256_Final(md, c); +} + +# define DATA_ORDER_IS_BIG_ENDIAN + +# define HASH_LONG SHA_LONG +# define HASH_CTX SHA256_CTX +# define HASH_CBLOCK SHA_CBLOCK +/* + * Note that FIPS180-2 discusses "Truncation of the Hash Function Output." + * default: case below covers for it. It's not clear however if it's + * permitted to truncate to amount of bytes not divisible by 4. I bet not, + * but if it is, then default: case shall be extended. For reference. + * Idea behind separate cases for pre-defined lenghts is to let the + * compiler decide if it's appropriate to unroll small loops. + */ +# define HASH_MAKE_STRING(c,s) do { \ + unsigned long ll; \ + unsigned int nn; \ + switch ((c)->md_len) \ + { case SHA224_DIGEST_LENGTH: \ + for (nn=0;nnh[nn]; (void)HOST_l2c(ll,(s)); } \ + break; \ + case SHA256_DIGEST_LENGTH: \ + for (nn=0;nnh[nn]; (void)HOST_l2c(ll,(s)); } \ + break; \ + default: \ + if ((c)->md_len > SHA256_DIGEST_LENGTH) \ + return 0; \ + for (nn=0;nn<(c)->md_len/4;nn++) \ + { ll=(c)->h[nn]; (void)HOST_l2c(ll,(s)); } \ + break; \ + } \ + } while (0) + +# define HASH_UPDATE SHA256_Update +# define HASH_TRANSFORM SHA256_Transform +# define HASH_FINAL SHA256_Final +# define HASH_BLOCK_DATA_ORDER sha256_block_data_order +# ifndef SHA256_ASM +static +# endif +void sha256_block_data_order(SHA256_CTX *ctx, const void *in, size_t num); + +# include "md32_common.h" + +# ifndef SHA256_ASM +static const SHA_LONG K256[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, + 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, + 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, + 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, + 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, + 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, + 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, + 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, + 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, + 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, + 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, + 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, + 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; + +/* + * FIPS specification refers to right rotations, while our ROTATE macro + * is left one. This is why you might notice that rotation coefficients + * differ from those observed in FIPS document by 32-N... + */ +# define Sigma0(x) (ROTATE((x),30) ^ ROTATE((x),19) ^ ROTATE((x),10)) +# define Sigma1(x) (ROTATE((x),26) ^ ROTATE((x),21) ^ ROTATE((x),7)) +# define sigma0(x) (ROTATE((x),25) ^ ROTATE((x),14) ^ ((x)>>3)) +# define sigma1(x) (ROTATE((x),15) ^ ROTATE((x),13) ^ ((x)>>10)) + +# define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) +# define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +# ifdef OPENSSL_SMALL_FOOTPRINT + +static void sha256_block_data_order(SHA256_CTX *ctx, const void *in, + size_t num) +{ + unsigned MD32_REG_T a, b, c, d, e, f, g, h, s0, s1, T1, T2; + SHA_LONG X[16], l; + int i; + const unsigned char *data = in; + + while (num--) { + + a = ctx->h[0]; + b = ctx->h[1]; + c = ctx->h[2]; + d = ctx->h[3]; + e = ctx->h[4]; + f = ctx->h[5]; + g = ctx->h[6]; + h = ctx->h[7]; + + for (i = 0; i < 16; i++) { + HOST_c2l(data, l); + T1 = X[i] = l; + T1 += h + Sigma1(e) + Ch(e, f, g) + K256[i]; + T2 = Sigma0(a) + Maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + } + + for (; i < 64; i++) { + s0 = X[(i + 1) & 0x0f]; + s0 = sigma0(s0); + s1 = X[(i + 14) & 0x0f]; + s1 = sigma1(s1); + + T1 = X[i & 0xf] += s0 + s1 + X[(i + 9) & 0xf]; + T1 += h + Sigma1(e) + Ch(e, f, g) + K256[i]; + T2 = Sigma0(a) + Maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + } + + ctx->h[0] += a; + ctx->h[1] += b; + ctx->h[2] += c; + ctx->h[3] += d; + ctx->h[4] += e; + ctx->h[5] += f; + ctx->h[6] += g; + ctx->h[7] += h; + + } +} + +# else + +# define ROUND_00_15(i,a,b,c,d,e,f,g,h) do { \ + T1 += h + Sigma1(e) + Ch(e,f,g) + K256[i]; \ + h = Sigma0(a) + Maj(a,b,c); \ + d += T1; h += T1; } while (0) + +# define ROUND_16_63(i,a,b,c,d,e,f,g,h,X) do { \ + s0 = X[(i+1)&0x0f]; s0 = sigma0(s0); \ + s1 = X[(i+14)&0x0f]; s1 = sigma1(s1); \ + T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f]; \ + ROUND_00_15(i,a,b,c,d,e,f,g,h); } while (0) + +static void sha256_block_data_order(SHA256_CTX *ctx, const void *in, + size_t num) +{ + unsigned MD32_REG_T a, b, c, d, e, f, g, h, s0, s1, T1; + SHA_LONG X[16]; + int i; + const unsigned char *data = in; + const union { + long one; + char little; + } is_endian = { + 1 + }; + + while (num--) { + + a = ctx->h[0]; + b = ctx->h[1]; + c = ctx->h[2]; + d = ctx->h[3]; + e = ctx->h[4]; + f = ctx->h[5]; + g = ctx->h[6]; + h = ctx->h[7]; + + if (!is_endian.little && sizeof(SHA_LONG) == 4 + && ((size_t)in % 4) == 0) { + const SHA_LONG *W = (const SHA_LONG *)data; + + T1 = X[0] = W[0]; + ROUND_00_15(0, a, b, c, d, e, f, g, h); + T1 = X[1] = W[1]; + ROUND_00_15(1, h, a, b, c, d, e, f, g); + T1 = X[2] = W[2]; + ROUND_00_15(2, g, h, a, b, c, d, e, f); + T1 = X[3] = W[3]; + ROUND_00_15(3, f, g, h, a, b, c, d, e); + T1 = X[4] = W[4]; + ROUND_00_15(4, e, f, g, h, a, b, c, d); + T1 = X[5] = W[5]; + ROUND_00_15(5, d, e, f, g, h, a, b, c); + T1 = X[6] = W[6]; + ROUND_00_15(6, c, d, e, f, g, h, a, b); + T1 = X[7] = W[7]; + ROUND_00_15(7, b, c, d, e, f, g, h, a); + T1 = X[8] = W[8]; + ROUND_00_15(8, a, b, c, d, e, f, g, h); + T1 = X[9] = W[9]; + ROUND_00_15(9, h, a, b, c, d, e, f, g); + T1 = X[10] = W[10]; + ROUND_00_15(10, g, h, a, b, c, d, e, f); + T1 = X[11] = W[11]; + ROUND_00_15(11, f, g, h, a, b, c, d, e); + T1 = X[12] = W[12]; + ROUND_00_15(12, e, f, g, h, a, b, c, d); + T1 = X[13] = W[13]; + ROUND_00_15(13, d, e, f, g, h, a, b, c); + T1 = X[14] = W[14]; + ROUND_00_15(14, c, d, e, f, g, h, a, b); + T1 = X[15] = W[15]; + ROUND_00_15(15, b, c, d, e, f, g, h, a); + + data += SHA256_CBLOCK; + } else { + SHA_LONG l; + + HOST_c2l(data, l); + T1 = X[0] = l; + ROUND_00_15(0, a, b, c, d, e, f, g, h); + HOST_c2l(data, l); + T1 = X[1] = l; + ROUND_00_15(1, h, a, b, c, d, e, f, g); + HOST_c2l(data, l); + T1 = X[2] = l; + ROUND_00_15(2, g, h, a, b, c, d, e, f); + HOST_c2l(data, l); + T1 = X[3] = l; + ROUND_00_15(3, f, g, h, a, b, c, d, e); + HOST_c2l(data, l); + T1 = X[4] = l; + ROUND_00_15(4, e, f, g, h, a, b, c, d); + HOST_c2l(data, l); + T1 = X[5] = l; + ROUND_00_15(5, d, e, f, g, h, a, b, c); + HOST_c2l(data, l); + T1 = X[6] = l; + ROUND_00_15(6, c, d, e, f, g, h, a, b); + HOST_c2l(data, l); + T1 = X[7] = l; + ROUND_00_15(7, b, c, d, e, f, g, h, a); + HOST_c2l(data, l); + T1 = X[8] = l; + ROUND_00_15(8, a, b, c, d, e, f, g, h); + HOST_c2l(data, l); + T1 = X[9] = l; + ROUND_00_15(9, h, a, b, c, d, e, f, g); + HOST_c2l(data, l); + T1 = X[10] = l; + ROUND_00_15(10, g, h, a, b, c, d, e, f); + HOST_c2l(data, l); + T1 = X[11] = l; + ROUND_00_15(11, f, g, h, a, b, c, d, e); + HOST_c2l(data, l); + T1 = X[12] = l; + ROUND_00_15(12, e, f, g, h, a, b, c, d); + HOST_c2l(data, l); + T1 = X[13] = l; + ROUND_00_15(13, d, e, f, g, h, a, b, c); + HOST_c2l(data, l); + T1 = X[14] = l; + ROUND_00_15(14, c, d, e, f, g, h, a, b); + HOST_c2l(data, l); + T1 = X[15] = l; + ROUND_00_15(15, b, c, d, e, f, g, h, a); + } + + for (i = 16; i < 64; i += 8) { + ROUND_16_63(i + 0, a, b, c, d, e, f, g, h, X); + ROUND_16_63(i + 1, h, a, b, c, d, e, f, g, X); + ROUND_16_63(i + 2, g, h, a, b, c, d, e, f, X); + ROUND_16_63(i + 3, f, g, h, a, b, c, d, e, X); + ROUND_16_63(i + 4, e, f, g, h, a, b, c, d, X); + ROUND_16_63(i + 5, d, e, f, g, h, a, b, c, X); + ROUND_16_63(i + 6, c, d, e, f, g, h, a, b, X); + ROUND_16_63(i + 7, b, c, d, e, f, g, h, a, X); + } + + ctx->h[0] += a; + ctx->h[1] += b; + ctx->h[2] += c; + ctx->h[3] += d; + ctx->h[4] += e; + ctx->h[5] += f; + ctx->h[6] += g; + ctx->h[7] += h; + + } +} + +# endif +# endif /* SHA256_ASM */ diff --git a/src/util/srp.cpp b/src/util/srp.cpp new file mode 100644 index 000000000..cc8bac6bb --- /dev/null +++ b/src/util/srp.cpp @@ -0,0 +1,1029 @@ +/* + * Secure Remote Password 6a implementation + * https://github.com/est31/csrp-gmp + * + * The MIT License (MIT) + * + * Copyright (c) 2010, 2013 Tom Cocagne, 2015 est31 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + */ + +#ifdef WIN32 + #include + #include +#else + #include +#endif + +#include +#include +#include + +#include + +#if USE_SYSTEM_GMP || defined (__ANDROID__) || defined (ANDROID) + #include +#else + #include +#endif + +#include + +#include "srp.h" +//#define CSRP_USE_SHA1 +#define CSRP_USE_SHA256 + +#define srp_dbg_data(data, datalen, prevtext) ; +/*void srp_dbg_data(unsigned char * data, size_t datalen, char * prevtext) +{ + printf(prevtext); + size_t i; + for (i = 0; i < datalen; i++) + { + printf("%02X", data[i]); + } + printf("\n"); +}*/ + +static int g_initialized = 0; + +#define RAND_BUFF_MAX 128 +static unsigned int g_rand_idx; +static unsigned char g_rand_buff[RAND_BUFF_MAX]; + +typedef struct +{ + mpz_t N; + mpz_t g; +} NGConstant; + +struct NGHex +{ + const char* n_hex; + const char* g_hex; +}; + +/* All constants here were pulled from Appendix A of RFC 5054 */ +static struct NGHex global_Ng_constants[] = { + { /* 1024 */ + "EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C9C256576D674DF7496" + "EA81D3383B4813D692C6E0E0D5D8E250B98BE48E495C1D6089DAD15DC7D7B46154D6B6CE8E" + "F4AD69B15D4982559B297BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA" + "9AFD5138FE8376435B9FC61D2FC0EB06E3", + "2" + }, + { /* 2048 */ + "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4" + "A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF60" + "95179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF" + "747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B907" + "8717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB37861" + "60279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DB" + "FBB694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73", + "2" + }, + { /* 4096 */ + "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + "FFFFFFFFFFFFFFFF", + "5" + }, + { /* 8192 */ + "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" + "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" + "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" + "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" + "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" + "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" + "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" + "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" + "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" + "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" + "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" + "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" + "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" + "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" + "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" + "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" + "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" + "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" + "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" + "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" + "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" + "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" + "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" + "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" + "6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA" + "3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C" + "5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" + "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC886" + "2F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6" + "6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC5" + "0846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268" + "359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6" + "FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" + "60C980DD98EDD3DFFFFFFFFFFFFFFFFF", + "13" + }, + {0,0} /* null sentinel */ +}; + + +static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_hex ) +{ + NGConstant *ng = (NGConstant *) malloc(sizeof(NGConstant)); + mpz_init(ng->N); + mpz_init(ng->g); + + if (!ng || !ng->N || !ng->g) + return 0; + + if (ng_type != SRP_NG_CUSTOM) { + n_hex = global_Ng_constants[ ng_type ].n_hex; + g_hex = global_Ng_constants[ ng_type ].g_hex; + } + + mpz_set_str(ng->N, n_hex, 16); + mpz_set_str(ng->g, g_hex, 16); + + return ng; +} + +static void delete_ng( NGConstant *ng ) +{ + if (ng) { + mpz_clear(ng->N); + mpz_clear(ng->g); + free(ng); + } +} + + + +typedef union +{ + SHA_CTX sha; + SHA256_CTX sha256; + //SHA512_CTX sha512; +} HashCTX; + + +struct SRPVerifier +{ + SRP_HashAlgorithm hash_alg; + NGConstant *ng; + + char *username; + unsigned char *bytes_B; + int authenticated; + + unsigned char M[SHA512_DIGEST_LENGTH]; + unsigned char H_AMK[SHA512_DIGEST_LENGTH]; + unsigned char session_key[SHA512_DIGEST_LENGTH]; +}; + + +struct SRPUser +{ + SRP_HashAlgorithm hash_alg; + NGConstant *ng; + + mpz_t a; + mpz_t A; + mpz_t S; + + unsigned char *bytes_A; + int authenticated; + + char *username; + char *username_verifier; + unsigned char *password; + size_t password_len; + + unsigned char M[SHA512_DIGEST_LENGTH]; + unsigned char H_AMK[SHA512_DIGEST_LENGTH]; + unsigned char session_key[SHA512_DIGEST_LENGTH]; +}; + + +static int hash_init(SRP_HashAlgorithm alg, HashCTX *c) +{ + switch (alg) { +#ifdef CSRP_USE_SHA1 + case SRP_SHA1: return SHA1_Init(&c->sha); +#endif + /*case SRP_SHA224: return SHA224_Init(&c->sha256);*/ +#ifdef CSRP_USE_SHA256 + case SRP_SHA256: return SHA256_Init(&c->sha256); +#endif + /*case SRP_SHA384: return SHA384_Init(&c->sha512); + case SRP_SHA512: return SHA512_Init(&c->sha512);*/ + default: return -1; + }; +} +static int hash_update( SRP_HashAlgorithm alg, HashCTX *c, const void *data, size_t len ) +{ + switch (alg) { +#ifdef CSRP_USE_SHA1 + case SRP_SHA1: return SHA1_Update(&c->sha, data, len); +#endif + /*case SRP_SHA224: return SHA224_Update(&c->sha256, data, len);*/ +#ifdef CSRP_USE_SHA256 + case SRP_SHA256: return SHA256_Update(&c->sha256, data, len); +#endif + /*case SRP_SHA384: return SHA384_Update( &c->sha512, data, len ); + case SRP_SHA512: return SHA512_Update( &c->sha512, data, len );*/ + default: return -1; + }; +} +static int hash_final( SRP_HashAlgorithm alg, HashCTX *c, unsigned char *md ) +{ + switch (alg) { +#ifdef CSRP_USE_SHA1 + case SRP_SHA1: return SHA1_Final(md, &c->sha); +#endif + /*case SRP_SHA224: return SHA224_Final(md, &c->sha256);*/ +#ifdef CSRP_USE_SHA256 + case SRP_SHA256: return SHA256_Final(md, &c->sha256); +#endif + /*case SRP_SHA384: return SHA384_Final(md, &c->sha512); + case SRP_SHA512: return SHA512_Final(md, &c->sha512);*/ + default: return -1; + }; +} +static unsigned char *hash(SRP_HashAlgorithm alg, const unsigned char *d, size_t n, unsigned char *md) +{ + switch (alg) { +#ifdef CSRP_USE_SHA1 + case SRP_SHA1: return SHA1(d, n, md); +#endif + /*case SRP_SHA224: return SHA224( d, n, md );*/ +#ifdef CSRP_USE_SHA256 + case SRP_SHA256: return SHA256(d, n, md); +#endif + /*case SRP_SHA384: return SHA384( d, n, md ); + case SRP_SHA512: return SHA512( d, n, md );*/ + default: return 0; + }; +} +static size_t hash_length(SRP_HashAlgorithm alg) +{ + switch (alg) { +#ifdef CSRP_USE_SHA1 + case SRP_SHA1: return SHA_DIGEST_LENGTH; +#endif + /*case SRP_SHA224: return SHA224_DIGEST_LENGTH;*/ +#ifdef CSRP_USE_SHA256 + case SRP_SHA256: return SHA256_DIGEST_LENGTH; +#endif + /*case SRP_SHA384: return SHA384_DIGEST_LENGTH; + case SRP_SHA512: return SHA512_DIGEST_LENGTH;*/ + default: return -1; + }; +} + +inline static int mpz_num_bytes(const mpz_t op) +{ + return (mpz_sizeinbase (op, 2) + 7) / 8; +} + +inline static void mpz_to_bin(const mpz_t op, unsigned char *to) +{ + mpz_export(to, NULL, 1, 1, 1, 0, op); +} + +inline static void mpz_from_bin(const unsigned char *s, size_t len, mpz_t ret) +{ + mpz_import(ret, len, 1, 1, 1, 0, s); +} + +// set op to (op1 * op2) mod d, using tmp for the calculation +inline static void mpz_mulm(mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp) +{ + mpz_mul(tmp, op1, op2); + mpz_mod(op, tmp, d); +} + +// set op to (op1 + op2) mod d, using tmp for the calculation +inline static void mpz_addm( mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp ) +{ + mpz_add(tmp, op1, op2); + mpz_mod(op, tmp, d); +} + +// set op to (op1 - op2) mod d, using tmp for the calculation +inline static void mpz_subm(mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp) +{ + mpz_sub(tmp, op1, op2); + mpz_mod(op, tmp, d); +} + +static int H_nn(mpz_t result, SRP_HashAlgorithm alg, const mpz_t N, const mpz_t n1, const mpz_t n2) +{ + unsigned char buff[SHA512_DIGEST_LENGTH]; + size_t len_N = mpz_num_bytes(N); + size_t len_n1 = mpz_num_bytes(n1); + size_t len_n2 = mpz_num_bytes(n2); + size_t nbytes = len_N + len_N; + unsigned char *bin = (unsigned char *) malloc(nbytes); + if (!bin) + return 0; + if (len_n1 > len_N || len_n2 > len_N) { + free(bin); + return 0; + } + memset(bin, 0, nbytes); + mpz_to_bin(n1, bin + (len_N - len_n1)); + mpz_to_bin(n2, bin + (len_N + len_N - len_n2)); + hash( alg, bin, nbytes, buff ); + free(bin); + mpz_from_bin(buff, hash_length(alg), result); + return 1; +} + +static int H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n, size_t len_n, const unsigned char *bytes, size_t len_bytes) +{ + unsigned char buff[SHA512_DIGEST_LENGTH]; + size_t nbytes = len_n + len_bytes; + unsigned char *bin = (unsigned char *) malloc(nbytes); + if (!bin) + return 0; + memcpy(bin, n, len_n); + memcpy(bin + len_n, bytes, len_bytes); + hash(alg, bin, nbytes, buff); + free(bin); + mpz_from_bin(buff, hash_length(alg), result); + return 1; +} + +static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *salt, size_t salt_len, const char *username, const unsigned char *password, size_t password_len) +{ + unsigned char ucp_hash[SHA512_DIGEST_LENGTH]; + HashCTX ctx; + hash_init(alg, &ctx); + + srp_dbg_data((char*) username, strlen(username), "Username for x: "); + srp_dbg_data((char*) password, password_len, "Password for x: "); + hash_update(alg, &ctx, username, strlen(username)); + hash_update(alg, &ctx, ":", 1); + hash_update(alg, &ctx, password, password_len); + + hash_final(alg, &ctx, ucp_hash); + + return H_ns(result, alg, salt, salt_len, ucp_hash, hash_length(alg)); +} + +static void update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n) +{ + size_t len = mpz_num_bytes(n); + unsigned char* n_bytes = (unsigned char *) malloc(len); + if (!n_bytes) + return; + mpz_to_bin(n, n_bytes); + hash_update(alg, ctx, n_bytes, len); + free(n_bytes); +} + +static void hash_num( SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest ) +{ + int nbytes = mpz_num_bytes(n); + unsigned char *bin = (unsigned char *) malloc(nbytes); + if(!bin) + return; + mpz_to_bin(n, bin); + hash(alg, bin, nbytes, dest); + free(bin); +} + +static void calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *dest, + const char *I, const unsigned char *s_bytes, size_t s_len, + const mpz_t A, const mpz_t B, const unsigned char *K) +{ + unsigned char H_N[SHA512_DIGEST_LENGTH]; + unsigned char H_g[SHA512_DIGEST_LENGTH]; + unsigned char H_I[SHA512_DIGEST_LENGTH]; + unsigned char H_xor[SHA512_DIGEST_LENGTH]; + HashCTX ctx; + size_t i = 0; + size_t hash_len = hash_length(alg); + + hash_num(alg, ng->N, H_N); + hash_num(alg, ng->g, H_g); + + hash(alg, (const unsigned char *)I, strlen(I), H_I); + + + for (i = 0; i < hash_len; i++ ) + H_xor[i] = H_N[i] ^ H_g[i]; + + hash_init(alg, &ctx); + + hash_update(alg, &ctx, H_xor, hash_len); + hash_update(alg, &ctx, H_I, hash_len); + hash_update(alg, &ctx, s_bytes, s_len); + update_hash_n(alg, &ctx, A); + update_hash_n(alg, &ctx, B); + hash_update(alg, &ctx, K, hash_len); + + hash_final(alg, &ctx, dest); +} + +static void calculate_H_AMK(SRP_HashAlgorithm alg, unsigned char *dest, const mpz_t A, const unsigned char *M, const unsigned char *K) +{ + HashCTX ctx; + + hash_init(alg, &ctx); + + update_hash_n(alg, &ctx, A); + hash_update(alg, &ctx, M, hash_length(alg)); + hash_update(alg, &ctx, K, hash_length(alg)); + + hash_final(alg, &ctx, dest); +} + + +struct srp_pcgrandom { + unsigned long long int m_state; + unsigned long long int m_inc; +}; typedef struct srp_pcgrandom srp_pcgrandom; + +static unsigned long int srp_pcgrandom_next(srp_pcgrandom *r) +{ + unsigned long long int oldstate = r->m_state; + r->m_state = oldstate * 6364136223846793005ULL + r->m_inc; + + unsigned long int xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u; + unsigned long int rot = oldstate >> 59u; + return (xorshifted >> rot) | (xorshifted << ((-rot) & 31)); +} + +static void srp_pcgrandom_seed(srp_pcgrandom *r, unsigned long long int state, + unsigned long long int seq) +{ + r->m_state = 0U; + r->m_inc = (seq << 1u) | 1u; + srp_pcgrandom_next(r); + r->m_state += state; + srp_pcgrandom_next(r); +} + + +static int fill_buff() +{ + g_rand_idx = 0; + +#ifdef WIN32 + HCRYPTPROV wctx; +#else + FILE *fp = 0; +#endif + +#ifdef WIN32 + + CryptAcquireContext(&wctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); + CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE*) g_rand_buff); + CryptReleaseContext(wctx, 0); + + return 1; + +#else + fp = fopen("/dev/urandom", "r"); + + if (fp) { + fread(g_rand_buff, sizeof(g_rand_buff), 1, fp); + fclose(fp); + } else { + srp_pcgrandom *r = (srp_pcgrandom *) malloc(sizeof(srp_pcgrandom)); + srp_pcgrandom_seed(r, time(NULL) ^ clock(), 0xda3e39cb94b95bdbULL); + size_t i = 0; + for (i = 0; i < RAND_BUFF_MAX; i++) { + g_rand_buff[i] = srp_pcgrandom_next(r); + } + } +#endif + return 1; +} + +static void mpz_fill_random(mpz_t num) +{ + // was call: BN_rand(num, 256, -1, 0); + if (RAND_BUFF_MAX - g_rand_idx < 32) + fill_buff(); + mpz_from_bin((const unsigned char *) (&g_rand_buff[g_rand_idx]), 32, num); + g_rand_idx += 32; +} + +static void init_random() +{ + if (g_initialized) + return; + g_initialized = fill_buff(); +} + +#define srp_dbg_num(num, text) ; +/*void srp_dbg_num(mpz_t num, char * prevtext) +{ + int len_num = mpz_num_bytes(num); + char *bytes_num = (char*) malloc(len_num); + mpz_to_bin(num, (unsigned char *) bytes_num); + srp_dbg_data(bytes_num, len_num, prevtext); + free(bytes_num); + +}*/ + +/*********************************************************************************************************** + * + * Exported Functions + * + ***********************************************************************************************************/ + +void srp_create_salted_verification_key( SRP_HashAlgorithm alg, + SRP_NGType ng_type, const char *username_for_verifier, + const unsigned char *password, size_t len_password, + unsigned char **bytes_s, size_t *len_s, + unsigned char **bytes_v, size_t *len_v, + const char *n_hex, const char *g_hex ) +{ + mpz_t v; mpz_init(v); + mpz_t x; mpz_init(x); + NGConstant *ng = new_ng(ng_type, n_hex, g_hex); + + if(!ng) + goto cleanup_and_exit; + + if (*bytes_s == NULL) { + *len_s = 16; + if (RAND_BUFF_MAX - g_rand_idx < 16) + fill_buff(); + *bytes_s = (unsigned char*)malloc(sizeof(char) * 16); + memcpy(*bytes_s, &g_rand_buff + g_rand_idx, sizeof(char) * 16); + g_rand_idx += 16; + } + + + if (!calculate_x(x, alg, *bytes_s, *len_s, username_for_verifier, + password, len_password)) + goto cleanup_and_exit; + + srp_dbg_num(x, "Server calculated x: "); + + mpz_powm(v, ng->g, x, ng->N); + + *len_v = mpz_num_bytes(v); + + *bytes_v = (unsigned char*)malloc(*len_v); + + if (!bytes_v) + goto cleanup_and_exit; + + mpz_to_bin(v, *bytes_v); + +cleanup_and_exit: + delete_ng( ng ); + mpz_clear(v); + mpz_clear(x); +} + + + +/* Out: bytes_B, len_B. + * + * On failure, bytes_B will be set to NULL and len_B will be set to 0 + */ +struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, + SRP_NGType ng_type, const char *username, + const unsigned char *bytes_s, size_t len_s, + const unsigned char *bytes_v, size_t len_v, + const unsigned char *bytes_A, size_t len_A, + const unsigned char *bytes_b, size_t len_b, + unsigned char **bytes_B, size_t *len_B, + const char *n_hex, const char *g_hex ) +{ + mpz_t v; mpz_init(v); mpz_from_bin(bytes_v, len_v, v); + mpz_t A; mpz_init(A); mpz_from_bin(bytes_A, len_A, A); + mpz_t u; mpz_init(u); + mpz_t B; mpz_init(B); + mpz_t S; mpz_init(S); + mpz_t b; mpz_init(b); + mpz_t k; mpz_init(k); + mpz_t tmp1; mpz_init(tmp1); + mpz_t tmp2; mpz_init(tmp2); + mpz_t tmp3; mpz_init(tmp3); + size_t ulen = strlen(username) + 1; + NGConstant *ng = new_ng(ng_type, n_hex, g_hex); + struct SRPVerifier *ver = 0; + + *len_B = 0; + *bytes_B = 0; + + if (!ng) + goto cleanup_and_exit; + + ver = (struct SRPVerifier *) malloc( sizeof(struct SRPVerifier) ); + + if (!ver) + goto cleanup_and_exit; + + init_random(); /* Only happens once */ + + ver->username = (char *) malloc(ulen); + ver->hash_alg = alg; + ver->ng = ng; + + if (!ver->username) { + free(ver); + ver = 0; + goto cleanup_and_exit; + } + + memcpy((char*)ver->username, username, ulen); + + ver->authenticated = 0; + + /* SRP-6a safety check */ + mpz_mod(tmp1, A, ng->N); + if (mpz_sgn(tmp1) != 0) { + if (bytes_b) { + mpz_from_bin(bytes_b, len_b, b); + } else { + mpz_fill_random(b); + } + + if (!H_nn(k, alg, ng->N, ng->N, ng->g)) { + free(ver); + ver = 0; + goto cleanup_and_exit; + } + + /* B = kv + g^b */ + mpz_mulm(tmp1, k, v, ng->N, tmp3); + mpz_powm(tmp2, ng->g, b, ng->N); + mpz_addm(B, tmp1, tmp2, ng->N, tmp3); + + if (!H_nn(u, alg, ng->N, A, B)) { + free(ver); + ver = 0; + goto cleanup_and_exit; + } + + srp_dbg_num(u, "Server calculated u: "); + + /* S = (A *(v^u)) ^ b */ + mpz_powm(tmp1, v, u, ng->N); + mpz_mulm(tmp2, A, tmp1, ng->N, tmp3); + mpz_powm(S, tmp2, b, ng->N); + + hash_num(alg, S, ver->session_key); + + calculate_M(alg, ng, ver->M, username, bytes_s, len_s, A, B, ver->session_key); + calculate_H_AMK(alg, ver->H_AMK, A, ver->M, ver->session_key); + + *len_B = mpz_num_bytes(B); + *bytes_B = (unsigned char*)malloc(*len_B); + + if (!*bytes_B) { + free(ver->username); + free(ver); + ver = 0; + *len_B = 0; + goto cleanup_and_exit; + } + + mpz_to_bin(B, *bytes_B); + + ver->bytes_B = *bytes_B; + } else { + free(ver); + ver = 0; + } + +cleanup_and_exit: + mpz_clear(v); + mpz_clear(A); + mpz_clear(u); + mpz_clear(k); + mpz_clear(B); + mpz_clear(S); + mpz_clear(b); + mpz_clear(tmp1); + mpz_clear(tmp2); + mpz_clear(tmp3); + return ver; +} + + + + +void srp_verifier_delete(struct SRPVerifier *ver) +{ + if (ver) { + delete_ng(ver->ng); + free(ver->username); + free(ver->bytes_B); + memset(ver, 0, sizeof(*ver)); + free(ver); + } +} + + + +int srp_verifier_is_authenticated(struct SRPVerifier *ver) +{ + return ver->authenticated; +} + + +const char *srp_verifier_get_username(struct SRPVerifier *ver) +{ + return ver->username; +} + + +const unsigned char *srp_verifier_get_session_key(struct SRPVerifier *ver, size_t *key_length) +{ + if (key_length) + *key_length = hash_length(ver->hash_alg); + return ver->session_key; +} + + +size_t srp_verifier_get_session_key_length(struct SRPVerifier *ver) +{ + return hash_length(ver->hash_alg); +} + + +/* user_M must be exactly SHA512_DIGEST_LENGTH bytes in size */ +void srp_verifier_verify_session(struct SRPVerifier *ver, const unsigned char *user_M, unsigned char **bytes_HAMK) +{ + if (memcmp(ver->M, user_M, hash_length(ver->hash_alg)) == 0) { + ver->authenticated = 1; + *bytes_HAMK = ver->H_AMK; + } else + *bytes_HAMK = NULL; +} + +/*******************************************************************************/ + +struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, + const char *username, const char *username_for_verifier, + const unsigned char *bytes_password, size_t len_password, + const char *n_hex, const char *g_hex) +{ + struct SRPUser *usr = (struct SRPUser *) malloc(sizeof(struct SRPUser)); + size_t ulen = strlen(username) + 1; + size_t uvlen = strlen(username_for_verifier) + 1; + + if (!usr) + goto err_exit; + + init_random(); /* Only happens once */ + + usr->hash_alg = alg; + usr->ng = new_ng(ng_type, n_hex, g_hex); + + mpz_init(usr->a); + mpz_init(usr->A); + mpz_init(usr->S); + + if (!usr->ng || !usr->a || !usr->A || !usr->S) + goto err_exit; + + usr->username = (char*)malloc(ulen); + usr->username_verifier = (char*)malloc(uvlen); + usr->password = (unsigned char*)malloc(len_password); + usr->password_len = len_password; + + if (!usr->username || !usr->password) + goto err_exit; + + memcpy(usr->username, username, ulen); + memcpy(usr->username_verifier, username_for_verifier, uvlen); + memcpy(usr->password, bytes_password, len_password); + + usr->authenticated = 0; + + usr->bytes_A = 0; + + return usr; + +err_exit: + if (usr) { + mpz_clear(usr->a); + mpz_clear(usr->A); + mpz_clear(usr->S); + if (usr->username) + free(usr->username); + if (usr->username_verifier) + free(usr->username_verifier); + if (usr->password) { + memset(usr->password, 0, usr->password_len); + free(usr->password); + } + free(usr); + } + + return 0; +} + + + +void srp_user_delete(struct SRPUser *usr) +{ + if(usr) { + mpz_clear(usr->a); + mpz_clear(usr->A); + mpz_clear(usr->S); + + delete_ng(usr->ng); + + memset(usr->password, 0, usr->password_len); + + free(usr->username); + free(usr->username_verifier); + free(usr->password); + + if (usr->bytes_A) + free(usr->bytes_A); + + memset(usr, 0, sizeof(*usr)); + free(usr); + } +} + + + +int srp_user_is_authenticated(struct SRPUser *usr) +{ + return usr->authenticated; +} + + +const char *srp_user_get_username(struct SRPUser *usr) +{ + return usr->username; +} + + +const unsigned char* srp_user_get_session_key(struct SRPUser* usr, size_t* key_length) +{ + if (key_length) + *key_length = hash_length(usr->hash_alg); + return usr->session_key; +} + + +size_t srp_user_get_session_key_length(struct SRPUser *usr) +{ + return hash_length(usr->hash_alg); +} + + +/* Output: username, bytes_A, len_A */ +void srp_user_start_authentication(struct SRPUser *usr, char **username, + const unsigned char *bytes_a, size_t len_a, + unsigned char **bytes_A, size_t *len_A) +{ + if (bytes_a) { + mpz_from_bin(bytes_a, len_a, usr->a); + } else { + mpz_fill_random(usr->a); + } + + mpz_powm(usr->A, usr->ng->g, usr->a, usr->ng->N); + + *len_A = mpz_num_bytes(usr->A); + *bytes_A = (unsigned char*)malloc(*len_A); + + if (!*bytes_A) { + *len_A = 0; + *bytes_A = 0; + *username = 0; + return; + } + + mpz_to_bin(usr->A, *bytes_A); + + usr->bytes_A = *bytes_A; + if (username) + *username = usr->username; +} + + +/* Output: bytes_M. Buffer length is SHA512_DIGEST_LENGTH */ +void srp_user_process_challenge(struct SRPUser *usr, + const unsigned char *bytes_s, size_t len_s, + const unsigned char *bytes_B, size_t len_B, + unsigned char **bytes_M, size_t *len_M) +{ + mpz_t B; mpz_init(B); mpz_from_bin(bytes_B, len_B, B); + mpz_t u; mpz_init(u); + mpz_t x; mpz_init(x); + mpz_t k; mpz_init(k); + mpz_t v; mpz_init(v); + mpz_t tmp1; mpz_init(tmp1); + mpz_t tmp2; mpz_init(tmp2); + mpz_t tmp3; mpz_init(tmp3); + mpz_t tmp4; mpz_init(tmp4); + + *len_M = 0; + *bytes_M = 0; + + if (!H_nn(u, usr->hash_alg, usr->ng->N, usr->A, B)) + goto cleanup_and_exit; + + srp_dbg_num(u, "Client calculated u: "); + + if (!calculate_x(x, usr->hash_alg, bytes_s, len_s, + usr->username_verifier, usr->password, usr->password_len)) + goto cleanup_and_exit; + + srp_dbg_num(x, "Client calculated x: "); + + if (!H_nn(k, usr->hash_alg, usr->ng->N, usr->ng->N, usr->ng->g)) + goto cleanup_and_exit; + + /* SRP-6a safety check */ + if ( mpz_sgn(B) != 0 && mpz_sgn(u) != 0 ) { + mpz_powm(v, usr->ng->g, x, usr->ng->N); + + srp_dbg_num(v, "Client calculated v: "); + + /* S = (B - k*(g^x)) ^ (a + ux) */ + mpz_mul(tmp1, u, x); + mpz_add(tmp2, usr->a, tmp1); /* tmp2 = (a + ux) */ + mpz_powm(tmp1, usr->ng->g, x, usr->ng->N); /* tmp1 = g^x */ + mpz_mulm(tmp3, k, tmp1, usr->ng->N, tmp4); /* tmp3 = k*(g^x) */ + mpz_subm(tmp1, B, tmp3, usr->ng->N, tmp4); /* tmp1 = (B - K*(g^x)) */ + mpz_powm(usr->S, tmp1, tmp2, usr->ng->N); + + hash_num(usr->hash_alg, usr->S, usr->session_key); + + calculate_M( usr->hash_alg, usr->ng, usr->M, usr->username, bytes_s, len_s, usr->A,B, usr->session_key ); + calculate_H_AMK( usr->hash_alg, usr->H_AMK, usr->A, usr->M, usr->session_key ); + + *bytes_M = usr->M; + if (len_M) + *len_M = hash_length( usr->hash_alg ); + } else { + *bytes_M = NULL; + if (len_M) + *len_M = 0; + } + +cleanup_and_exit: + + mpz_clear(B); + mpz_clear(u); + mpz_clear(x); + mpz_clear(k); + mpz_clear(v); + mpz_clear(tmp1); + mpz_clear(tmp2); + mpz_clear(tmp3); + mpz_clear(tmp4); +} + + +void srp_user_verify_session(struct SRPUser *usr, const unsigned char *bytes_HAMK) +{ + if (memcmp(usr->H_AMK, bytes_HAMK, hash_length(usr->hash_alg)) == 0) + usr->authenticated = 1; +} diff --git a/src/util/srp.h b/src/util/srp.h new file mode 100644 index 000000000..15a2b8a68 --- /dev/null +++ b/src/util/srp.h @@ -0,0 +1,171 @@ +/* + * Secure Remote Password 6a implementation + * https://github.com/est31/csrp-gmp + * + * The MIT License (MIT) + * + * Copyright (c) 2010, 2013 Tom Cocagne, 2015 est31 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + */ + +/* + * + * Purpose: This is a direct implementation of the Secure Remote Password + * Protocol version 6a as described by + * http://srp.stanford.edu/design.html + * + * Author: tom.cocagne@gmail.com (Tom Cocagne) + * + * Dependencies: LibGMP + * + * Usage: Refer to test_srp.c for a demonstration + * + * Notes: + * This library allows multiple combinations of hashing algorithms and + * prime number constants. For authentication to succeed, the hash and + * prime number constants must match between + * srp_create_salted_verification_key(), srp_user_new(), + * and srp_verifier_new(). A recommended approach is to determine the + * desired level of security for an application and globally define the + * hash and prime number constants to the predetermined values. + * + * As one might suspect, more bits means more security. As one might also + * suspect, more bits also means more processing time. The test_srp.c + * program can be easily modified to profile various combinations of + * hash & prime number pairings. + */ + +#ifndef SRP_H +#define SRP_H + + +struct SRPVerifier; +struct SRPUser; + +typedef enum +{ + SRP_NG_1024, + SRP_NG_2048, + SRP_NG_4096, + SRP_NG_8192, + SRP_NG_CUSTOM +} SRP_NGType; + +typedef enum +{ + /*SRP_SHA1,*/ + /*SRP_SHA224,*/ + SRP_SHA256, + /*SRP_SHA384, + SRP_SHA512*/ +} SRP_HashAlgorithm; + +/* Out: bytes_v, len_v + * + * The caller is responsible for freeing the memory allocated for bytes_v + * + * The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type. + * If provided, they must contain ASCII text of the hexidecimal notation. + * + * If bytes_s == NULL, it is filled with random data. The caller is responsible for freeing. + */ +void srp_create_salted_verification_key( SRP_HashAlgorithm alg, + SRP_NGType ng_type, const char *username_for_verifier, + const unsigned char *password, size_t len_password, + unsigned char **bytes_s, size_t *len_s, + unsigned char **bytes_v, size_t *len_v, + const char * n_hex, const char *g_hex ); + +/* Out: bytes_B, len_B. + * + * On failure, bytes_B will be set to NULL and len_B will be set to 0 + * + * The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type + * + * If bytes_b == NULL, random data is used for b. + */ +struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, + const char *username, + const unsigned char *bytes_s, size_t len_s, + const unsigned char *bytes_v, size_t len_v, + const unsigned char *bytes_A, size_t len_A, + const unsigned char *bytes_b, size_t len_b, + unsigned char** bytes_B, size_t *len_B, + const char* n_hex, const char* g_hex); + + +void srp_verifier_delete( struct SRPVerifier* ver ); + + +int srp_verifier_is_authenticated( struct SRPVerifier* ver ); + + +const char * srp_verifier_get_username( struct SRPVerifier* ver ); + +/* key_length may be null */ +const unsigned char* srp_verifier_get_session_key( struct SRPVerifier* ver, + size_t *key_length ); + + +size_t srp_verifier_get_session_key_length(struct SRPVerifier* ver); + + +/* user_M must be exactly srp_verifier_get_session_key_length() bytes in size */ +void srp_verifier_verify_session( struct SRPVerifier* ver, + const unsigned char* user_M, unsigned char** bytes_HAMK ); + +/*******************************************************************************/ + +/* The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type */ +struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, + const char *username, const char *username_for_verifier, + const unsigned char *bytes_password, size_t len_password, + const char *n_hex, const char *g_hex); + +void srp_user_delete(struct SRPUser * usr); + +int srp_user_is_authenticated(struct SRPUser * usr); + + +const char* srp_user_get_username(struct SRPUser * usr); + +/* key_length may be null */ +const unsigned char* srp_user_get_session_key(struct SRPUser* usr, size_t* key_length); + +size_t srp_user_get_session_key_length(struct SRPUser* usr); + +/* Output: username, bytes_A, len_A. If you don't want it get written, set username to NULL. + * If bytes_a == NULL, random data is used for a. */ +void srp_user_start_authentication(struct SRPUser* usr, char** username, + const unsigned char* bytes_a, size_t len_a, + unsigned char** bytes_A, size_t* len_A); + +/* Output: bytes_M, len_M (len_M may be null and will always be + * srp_user_get_session_key_length() bytes in size) */ +void srp_user_process_challenge(struct SRPUser *usr, + const unsigned char *bytes_s, size_t len_s, + const unsigned char *bytes_B, size_t len_B, + unsigned char **bytes_M, size_t *len_M); + +/* bytes_HAMK must be exactly srp_user_get_session_key_length() bytes in size */ +void srp_user_verify_session(struct SRPUser* usr, const unsigned char* bytes_HAMK); + +#endif /* Include Guard */ diff --git a/src/util/string.cpp b/src/util/string.cpp index c0f0e97fd..231eaf6be 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -22,12 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "numeric.h" #include "log.h" -#include "sha1.h" -#include "base64.h" #include "hex.h" #include "../porting.h" -#include #include #include #include @@ -176,26 +173,6 @@ std::string wide_to_narrow(const std::wstring &wcs) #endif -// Get an sha-1 hash of the player's name combined with -// the password entered. That's what the server uses as -// their password. (Exception : if the password field is -// blank, we send a blank password - this is for backwards -// compatibility with password-less players). -std::string translatePassword(const std::string &playername, - const std::string &password) -{ - if (password.length() == 0) - return ""; - - std::string slt = playername + password; - SHA1 sha1; - sha1.addBytes(slt.c_str(), slt.length()); - unsigned char *digest = sha1.getDigest(); - std::string pwd = base64_encode(digest, 20); - free(digest); - return pwd; -} - std::string urlencode(std::string str) { // Encodes non-unreserved URI characters by a percent sign diff --git a/src/util/string.h b/src/util/string.h index f2d9af570..4ab5cf3f7 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -43,8 +43,7 @@ wchar_t *narrow_to_wide_c(const char *str); std::wstring narrow_to_wide(const std::string &mbs); std::string wide_to_narrow(const std::wstring &wcs); -std::string translatePassword(const std::string &playername, - const std::string &password); + std::string urlencode(std::string str); std::string urldecode(std::string str); u32 readFlagString(std::string str, const FlagDesc *flagdesc, u32 *flagmask); From 02805af36ed4f3f11738c5439b5edd9e1db659ea Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 12 May 2015 02:20:18 +0100 Subject: [PATCH 040/670] Mapgen v5/6/7: Cleanup node resolver and aliases --- src/mapgen_v5.cpp | 64 +++++++++++++++++++++++------------------------ src/mapgen_v5.h | 16 +++++------- src/mapgen_v6.cpp | 43 ++++++++++++++----------------- src/mapgen_v6.h | 6 ++--- src/mapgen_v7.cpp | 63 +++++++++++++++++++++++----------------------- src/mapgen_v7.h | 16 +++++------- 6 files changed, 95 insertions(+), 113 deletions(-) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 887ce2a5d..6985e0a1a 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -79,30 +79,28 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) //// Resolve nodes to be used INodeDefManager *ndef = emerge->ndef; - c_stone = ndef->getId("mapgen_stone"); - c_dirt = ndef->getId("mapgen_dirt"); - c_dirt_with_grass = ndef->getId("mapgen_dirt_with_grass"); - c_sand = ndef->getId("mapgen_sand"); - c_water_source = ndef->getId("mapgen_water_source"); - c_lava_source = ndef->getId("mapgen_lava_source"); - c_gravel = ndef->getId("mapgen_gravel"); - c_cobble = ndef->getId("mapgen_cobble"); - c_ice = ndef->getId("default:ice"); - c_desert_stone = ndef->getId("mapgen_desert_stone"); - c_mossycobble = ndef->getId("mapgen_mossycobble"); - c_sandbrick = ndef->getId("mapgen_sandstonebrick"); - c_stair_cobble = ndef->getId("mapgen_stair_cobble"); - c_stair_sandstone = ndef->getId("mapgen_stair_sandstone"); + c_stone = ndef->getId("mapgen_stone"); + c_water_source = ndef->getId("mapgen_water_source"); + c_lava_source = ndef->getId("mapgen_lava_source"); + c_desert_stone = ndef->getId("mapgen_desert_stone"); + c_ice = ndef->getId("mapgen_ice"); + + c_cobble = ndef->getId("mapgen_cobble"); + c_stair_cobble = ndef->getId("mapgen_stair_cobble"); + c_mossycobble = ndef->getId("mapgen_mossycobble"); + c_sandstonebrick = ndef->getId("mapgen_sandstonebrick"); + c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick"); + if (c_ice == CONTENT_IGNORE) c_ice = CONTENT_AIR; if (c_mossycobble == CONTENT_IGNORE) c_mossycobble = c_cobble; - if (c_sandbrick == CONTENT_IGNORE) - c_sandbrick = c_desert_stone; if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; - if (c_stair_sandstone == CONTENT_IGNORE) - c_stair_sandstone = c_sandbrick; + if (c_sandstonebrick == CONTENT_IGNORE) + c_sandstonebrick = c_desert_stone; + if (c_stair_sandstonebrick == CONTENT_IGNORE) + c_stair_sandstonebrick = c_sandstonebrick; } @@ -251,27 +249,27 @@ void MapgenV5::makeChunk(BlockMakeData *data) dp.np_rarity = nparams_dungeon_rarity; dp.np_density = nparams_dungeon_density; dp.np_wetness = nparams_dungeon_wetness; - dp.c_water = c_water_source; + dp.c_water = c_water_source; if (desert_stone) { - dp.c_cobble = c_sandbrick; - dp.c_moss = c_sandbrick; // should make this 'cracked sandstone' later - dp.c_stair = c_stair_sandstone; + dp.c_cobble = c_desert_stone; + dp.c_moss = c_desert_stone; + dp.c_stair = c_desert_stone; dp.diagonal_dirs = true; - dp.mossratio = 0.0; - dp.holesize = v3s16(2, 3, 2); - dp.roomsize = v3s16(2, 5, 2); - dp.notifytype = GENNOTIFY_TEMPLE; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 3, 2); + dp.roomsize = v3s16(2, 5, 2); + dp.notifytype = GENNOTIFY_TEMPLE; } else { - dp.c_cobble = c_cobble; - dp.c_moss = c_mossycobble; - dp.c_stair = c_stair_cobble; + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0, 0, 0); - dp.notifytype = GENNOTIFY_DUNGEON; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; } DungeonGen dgen(this, &dp); diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index e679bdec2..8ef9d0c64 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -73,20 +73,16 @@ public: Noise *noise_humidity; content_t c_stone; - content_t c_dirt; - content_t c_dirt_with_grass; - content_t c_sand; content_t c_water_source; content_t c_lava_source; - content_t c_ice; - content_t c_gravel; - content_t c_cobble; - content_t c_desert_sand; content_t c_desert_stone; - content_t c_mossycobble; - content_t c_sandbrick; + content_t c_ice; + + content_t c_cobble; content_t c_stair_cobble; - content_t c_stair_sandstone; + content_t c_mossycobble; + content_t c_sandstonebrick; + content_t c_stair_sandstonebrick; MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge); ~MapgenV5(); diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 6fcd457fb..a6beb710b 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -89,30 +89,25 @@ MapgenV6::MapgenV6(int mapgenid, MapgenParams *params, EmergeManager *emerge) c_water_source = ndef->getId("mapgen_water_source"); c_lava_source = ndef->getId("mapgen_lava_source"); c_gravel = ndef->getId("mapgen_gravel"); - c_cobble = ndef->getId("mapgen_cobble"); - c_desert_sand = ndef->getId("mapgen_desert_sand"); c_desert_stone = ndef->getId("mapgen_desert_stone"); + c_desert_sand = ndef->getId("mapgen_desert_sand"); c_dirt_with_snow = ndef->getId("mapgen_dirt_with_snow"); c_snow = ndef->getId("mapgen_snow"); c_snowblock = ndef->getId("mapgen_snowblock"); c_ice = ndef->getId("mapgen_ice"); - c_mossycobble = ndef->getId("mapgen_mossycobble"); - c_sandbrick = ndef->getId("mapgen_sandstonebrick"); + c_cobble = ndef->getId("mapgen_cobble"); c_stair_cobble = ndef->getId("mapgen_stair_cobble"); - c_stair_sandstone = ndef->getId("mapgen_stair_sandstone"); + c_mossycobble = ndef->getId("mapgen_mossycobble"); + if (c_desert_sand == CONTENT_IGNORE) c_desert_sand = c_sand; if (c_desert_stone == CONTENT_IGNORE) c_desert_stone = c_stone; if (c_mossycobble == CONTENT_IGNORE) c_mossycobble = c_cobble; - if (c_sandbrick == CONTENT_IGNORE) - c_sandbrick = c_desert_stone; if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; - if (c_stair_sandstone == CONTENT_IGNORE) - c_stair_sandstone = c_sandbrick; } @@ -543,27 +538,27 @@ void MapgenV6::makeChunk(BlockMakeData *data) dp.np_rarity = nparams_dungeon_rarity; dp.np_density = nparams_dungeon_density; dp.np_wetness = nparams_dungeon_wetness; - dp.c_water = c_water_source; + dp.c_water = c_water_source; if (getBiome(0, v2s16(node_min.X, node_min.Z)) == BT_DESERT) { - dp.c_cobble = c_sandbrick; - dp.c_moss = c_sandbrick; // should make this 'cracked sandstone' later - dp.c_stair = c_stair_sandstone; + dp.c_cobble = c_desert_stone; + dp.c_moss = c_desert_stone; + dp.c_stair = c_desert_stone; dp.diagonal_dirs = true; - dp.mossratio = 0.0; - dp.holesize = v3s16(2, 3, 2); - dp.roomsize = v3s16(2, 5, 2); - dp.notifytype = GENNOTIFY_TEMPLE; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 3, 2); + dp.roomsize = v3s16(2, 5, 2); + dp.notifytype = GENNOTIFY_TEMPLE; } else { - dp.c_cobble = c_cobble; - dp.c_moss = c_mossycobble; - dp.c_stair = c_stair_cobble; + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0, 0, 0); - dp.notifytype = GENNOTIFY_DUNGEON; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; } DungeonGen dgen(this, &dp); diff --git a/src/mapgen_v6.h b/src/mapgen_v6.h index c729c04e7..a540c4b02 100644 --- a/src/mapgen_v6.h +++ b/src/mapgen_v6.h @@ -111,18 +111,16 @@ public: content_t c_water_source; content_t c_lava_source; content_t c_gravel; - content_t c_cobble; - content_t c_desert_sand; content_t c_desert_stone; + content_t c_desert_sand; content_t c_dirt_with_snow; content_t c_snow; content_t c_snowblock; content_t c_ice; + content_t c_cobble; content_t c_mossycobble; - content_t c_sandbrick; content_t c_stair_cobble; - content_t c_stair_sandstone; MapgenV6(int mapgenid, MapgenParams *params, EmergeManager *emerge); ~MapgenV6(); diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 443aea281..640ad10f4 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -88,29 +88,28 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) //// Resolve nodes to be used INodeDefManager *ndef = emerge->ndef; - c_stone = ndef->getId("mapgen_stone"); - c_dirt = ndef->getId("mapgen_dirt"); - c_dirt_with_grass = ndef->getId("mapgen_dirt_with_grass"); - c_sand = ndef->getId("mapgen_sand"); - c_water_source = ndef->getId("mapgen_water_source"); - c_lava_source = ndef->getId("mapgen_lava_source"); - c_ice = ndef->getId("default:ice"); - c_cobble = ndef->getId("mapgen_cobble"); - c_desert_stone = ndef->getId("mapgen_desert_stone"); - c_mossycobble = ndef->getId("mapgen_mossycobble"); - c_sandbrick = ndef->getId("mapgen_sandstonebrick"); - c_stair_cobble = ndef->getId("mapgen_stair_cobble"); - c_stair_sandstone = ndef->getId("mapgen_stair_sandstone"); + c_stone = ndef->getId("mapgen_stone"); + c_water_source = ndef->getId("mapgen_water_source"); + c_lava_source = ndef->getId("mapgen_lava_source"); + c_desert_stone = ndef->getId("mapgen_desert_stone"); + c_ice = ndef->getId("mapgen_ice"); + + c_cobble = ndef->getId("mapgen_cobble"); + c_stair_cobble = ndef->getId("mapgen_stair_cobble"); + c_mossycobble = ndef->getId("mapgen_mossycobble"); + c_sandstonebrick = ndef->getId("mapgen_sandstonebrick"); + c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick"); + if (c_ice == CONTENT_IGNORE) c_ice = CONTENT_AIR; if (c_mossycobble == CONTENT_IGNORE) c_mossycobble = c_cobble; - if (c_sandbrick == CONTENT_IGNORE) - c_sandbrick = c_desert_stone; if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; - if (c_stair_sandstone == CONTENT_IGNORE) - c_stair_sandstone = c_sandbrick; + if (c_sandstonebrick == CONTENT_IGNORE) + c_sandstonebrick = c_desert_stone; + if (c_stair_sandstonebrick == CONTENT_IGNORE) + c_stair_sandstonebrick = c_sandstonebrick; } @@ -272,27 +271,27 @@ void MapgenV7::makeChunk(BlockMakeData *data) dp.np_rarity = nparams_dungeon_rarity; dp.np_density = nparams_dungeon_density; dp.np_wetness = nparams_dungeon_wetness; - dp.c_water = c_water_source; + dp.c_water = c_water_source; if (desert_stone) { - dp.c_cobble = c_sandbrick; - dp.c_moss = c_sandbrick; // should make this 'cracked sandstone' later - dp.c_stair = c_stair_sandstone; + dp.c_cobble = c_desert_stone; + dp.c_moss = c_desert_stone; + dp.c_stair = c_desert_stone; dp.diagonal_dirs = true; - dp.mossratio = 0.0; - dp.holesize = v3s16(2, 3, 2); - dp.roomsize = v3s16(2, 5, 2); - dp.notifytype = GENNOTIFY_TEMPLE; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 3, 2); + dp.roomsize = v3s16(2, 5, 2); + dp.notifytype = GENNOTIFY_TEMPLE; } else { - dp.c_cobble = c_cobble; - dp.c_moss = c_mossycobble; - dp.c_stair = c_stair_cobble; + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0, 0, 0); - dp.notifytype = GENNOTIFY_DUNGEON; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; } DungeonGen dgen(this, &dp); diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index f5dc4ff2b..46dd79b66 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -84,20 +84,16 @@ public: Noise *noise_humidity; content_t c_stone; - content_t c_dirt; - content_t c_dirt_with_grass; - content_t c_sand; content_t c_water_source; content_t c_lava_source; - content_t c_ice; - content_t c_gravel; - content_t c_cobble; - content_t c_desert_sand; content_t c_desert_stone; - content_t c_mossycobble; - content_t c_sandbrick; + content_t c_ice; + + content_t c_cobble; content_t c_stair_cobble; - content_t c_stair_sandstone; + content_t c_mossycobble; + content_t c_sandstonebrick; + content_t c_stair_sandstonebrick; MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge); ~MapgenV7(); From b4c3ff6eab197828d370c30d66e033cde9d2f13d Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 12 May 2015 05:49:14 +0200 Subject: [PATCH 041/670] is_player() is no player-only function --- doc/lua_api.txt | 2 +- src/script/lua_api/l_object.cpp | 20 ++++++++++---------- src/script/lua_api/l_object.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 93387ef0b..8fda137ae 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2387,6 +2387,7 @@ This is basically a reference to a C++ `ServerActiveObject` * `position`: `{x=num, y=num, z=num}` (relative) * `rotation`: `{x=num, y=num, z=num}` * `set_properties(object property table)` +* `is_player()`: returns true for players, false otherwise ##### LuaEntitySAO-only (no-op for other objects) * `setvelocity({x=num, y=num, z=num})` @@ -2404,7 +2405,6 @@ This is basically a reference to a C++ `ServerActiveObject` * `get_luaentity()` ##### Player-only (no-op for other objects) -* `is_player()`: true for players, false for others * `get_player_name()`: returns `""` if is not a player * `get_look_dir()`: get camera direction as a unit vector * `get_look_pitch()`: pitch in radians diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index d8cfaf82b..d913019b1 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -557,6 +557,16 @@ int ObjectRef::l_set_properties(lua_State *L) return 0; } +// is_player(self) +int ObjectRef::l_is_player(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + lua_pushboolean(L, (player != NULL)); + return 1; +} + /* LuaEntitySAO-only */ // setvelocity(self, {x=num, y=num, z=num}) @@ -705,16 +715,6 @@ int ObjectRef::l_get_luaentity(lua_State *L) /* Player-only */ -// is_player(self) -int ObjectRef::l_is_player(lua_State *L) -{ - NO_MAP_LOCK_REQUIRED; - ObjectRef *ref = checkobject(L, 1); - Player *player = getplayer(ref); - lua_pushboolean(L, (player != NULL)); - return 1; -} - // is_player_connected(self) int ObjectRef::l_is_player_connected(lua_State *L) { diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index d51ca379f..daf91ce56 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -120,6 +120,9 @@ private: // set_properties(self, properties) static int l_set_properties(lua_State *L); + // is_player(self) + static int l_is_player(lua_State *L); + /* LuaEntitySAO-only */ // setvelocity(self, {x=num, y=num, z=num}) @@ -156,9 +159,6 @@ private: /* Player-only */ - // is_player(self) - static int l_is_player(lua_State *L); - // is_player_connected(self) static int l_is_player_connected(lua_State *L); From 75622c30beb390b7ed578010a00390aa971b3951 Mon Sep 17 00:00:00 2001 From: Novatux Date: Tue, 12 May 2015 11:19:52 +0200 Subject: [PATCH 042/670] Add code to support raillike group names --- builtin/game/misc.lua | 11 +++++++++++ doc/lua_api.txt | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index c31df541d..a71d5d02a 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -112,3 +112,14 @@ function core.record_protection_violation(pos, name) end end +local raillike_ids = {} +local raillike_cur_id = 0 +function core.raillike_group(name) + local id = raillike_ids[name] + if not id then + raillike_cur_id = raillike_cur_id + 1 + raillike_ids[name] = raillike_cur_id + id = raillike_cur_id + end + return id +end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 8fda137ae..5a1d49d03 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2190,6 +2190,10 @@ These functions return the leftover itemstack. * Get rating of a group of an item. (`0` means: not in group) * `minetest.get_node_group(name, group)`: returns a rating * Deprecated: An alias for the former. +* `minetest.raillike_group(name)`: returns a rating + * Returns rating of the connect_to_raillike group corresponding to name + * If name is not yet the name of a connect_to_raillike group, a new group id + * is created, with that name * `minetest.get_content_id(name)`: returns an integer * Gets the internal content ID of `name` * `minetest.get_name_from_content_id(content_id)`: returns a string From ecc514f11b77690bc1d2d782c8f00a9b045b4f4f Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Tue, 12 May 2015 20:38:56 +0200 Subject: [PATCH 043/670] Build and link gmp correctly on MSVC Also optimize json's library --- src/gmp/CMakeLists.txt | 5 ++++- src/json/CMakeLists.txt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gmp/CMakeLists.txt b/src/gmp/CMakeLists.txt index b8a56543f..96ae8191d 100644 --- a/src/gmp/CMakeLists.txt +++ b/src/gmp/CMakeLists.txt @@ -1,4 +1,7 @@ -add_library(gmp mini-gmp.c) +if(MSVC) + set(CMAKE_C_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") +endif() +add_library(gmp mini-gmp.c) target_link_libraries(gmp) diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt index de99c7f0c..9056e4b6d 100644 --- a/src/json/CMakeLists.txt +++ b/src/json/CMakeLists.txt @@ -1,5 +1,5 @@ if(MSVC) - set(CMAKE_CXX_FLAGS_RELEASE "/MT") + set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") endif() add_library(jsoncpp jsoncpp.cpp) From b70e67df8c55c0ccf3c95f9c45e194d1433ba53f Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 13 May 2015 00:04:30 +0200 Subject: [PATCH 044/670] Fix compiler warning about sign comparison --- src/script/lua_api/l_mapgen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 3cb52eab4..d94f902c4 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -291,7 +291,7 @@ bool read_schematic_def(lua_State *L, int index, //// Get Y-slice probability values (if present) schem->slice_probs = new u8[size.Y]; - for (i = 0; i != size.Y; i++) + for (i = 0; i != (u32) size.Y; i++) schem->slice_probs[i] = MTSCHEM_PROB_ALWAYS; lua_getfield(L, index, "yslice_prob"); From 178f536f082fd586a13d03ec9aa0775f1c009d5e Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 15 May 2015 00:03:19 +0200 Subject: [PATCH 045/670] Item entity merging refactor Don't ident too much, and add a comment. --- builtin/game/item_entity.lua | 101 +++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index d6781feca..d848fd855 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -96,6 +96,56 @@ core.register_entity(":__builtin:item", { self:set_item(self.itemstring) end, + try_merge_with = function(self, own_stack, object, obj) + local stack = ItemStack(obj.itemstring) + if own_stack:get_name() == stack:get_name() and stack:get_free_space() > 0 then + local overflow = false + local count = stack:get_count() + own_stack:get_count() + local max_count = stack:get_stack_max() + if count > max_count then + overflow = true + count = count - max_count + else + self.itemstring = '' + end + local pos = object:getpos() + pos.y = pos.y + (count - stack:get_count()) / max_count * 0.15 + object:moveto(pos, false) + local s, c + local max_count = stack:get_stack_max() + local name = stack:get_name() + if not overflow then + obj.itemstring = name .. " " .. count + s = 0.2 + 0.1 * (count / max_count) + c = s + object:set_properties({ + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c} + }) + self.object:remove() + -- merging succeeded + return true + else + s = 0.4 + c = 0.3 + object:set_properties({ + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c} + }) + obj.itemstring = name .. " " .. max_count + s = 0.2 + 0.1 * (count / max_count) + c = s + self.object:set_properties({ + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c} + }) + self.itemstring = name .. " " .. count + end + end + -- merging didn't succeed + return false + end, + on_step = function(self, dtime) self.age = self.age + dtime if time_to_live > 0 and self.age > time_to_live then @@ -111,52 +161,13 @@ core.register_entity(":__builtin:item", { if not core.registered_nodes[nn] or core.registered_nodes[nn].walkable and v.y == 0 then if self.physical_state then local own_stack = ItemStack(self.object:get_luaentity().itemstring) - for _,object in ipairs(core.get_objects_inside_radius(p, 0.8)) do + -- Merge with close entities of the same item + for _, object in ipairs(core.get_objects_inside_radius(p, 0.8)) do local obj = object:get_luaentity() - if obj and obj.name == "__builtin:item" and obj.physical_state == false then - local stack = ItemStack(obj.itemstring) - if own_stack:get_name() == stack:get_name() and stack:get_free_space() > 0 then - local overflow = false - local count = stack:get_count() + own_stack:get_count() - local max_count = stack:get_stack_max() - if count>max_count then - overflow = true - count = count - max_count - else - self.itemstring = '' - end - local pos=object:getpos() - pos.y = pos.y + (count - stack:get_count()) / max_count * 0.15 - object:moveto(pos, false) - local s, c - local max_count = stack:get_stack_max() - local name = stack:get_name() - if not overflow then - obj.itemstring = name.." "..count - s = 0.2 + 0.1 * (count / max_count) - c = s - object:set_properties({ - visual_size = {x = s, y = s}, - collisionbox = {-c, -c, -c, c, c, c} - }) - self.object:remove() - return - else - s = 0.4 - c = 0.3 - object:set_properties({ - visual_size = {x = s, y = s}, - collisionbox = {-c, -c, -c, c, c, c} - }) - obj.itemstring = name.." "..max_count - s = 0.2 + 0.1 * (count / max_count) - c = s - self.object:set_properties({ - visual_size = {x = s, y = s}, - collisionbox = {-c, -c, -c, c, c, c} - }) - self.itemstring = name.." "..count - end + if obj and obj.name == "__builtin:item" + and obj.physical_state == false then + if self:try_merge_with(own_stack, object, obj) then + return end end end From be18bd6a8cafdc2c452da39dd8cc428d8dbf62e6 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 14 May 2015 11:35:24 +0100 Subject: [PATCH 046/670] Don't crash if an item gets dropped into unloaded space Items dropped into unloaded map space will crash game so here's a fix... --- builtin/game/item_entity.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index d848fd855..6425a10aa 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -155,7 +155,17 @@ core.register_entity(":__builtin:item", { end local p = self.object:getpos() p.y = p.y - 0.5 - local nn = core.get_node(p).name + local node = core.get_node_or_nil(p) + local in_unloaded = (node == nil) + if in_unloaded then + -- Don't infinetly fall into unloaded map + self.object:setvelocity({x = 0, y = 0, z = 0}) + self.object:setacceleration({x = 0, y = 0, z = 0}) + self.physical_state = false + self.object:set_properties({physical = false}) + return + end + local nn = node.name -- If node is not registered or node is walkably solid and resting on nodebox local v = self.object:getvelocity() if not core.registered_nodes[nn] or core.registered_nodes[nn].walkable and v.y == 0 then From 33a633a6317d272ffd06320c92416644a367b186 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 15 May 2015 05:02:19 +0200 Subject: [PATCH 047/670] Fix libgmp for Android Android terminated immediately after start since commit 181f7baa453c58d4070de7196fd74663110946a8 because library wasn't loaded, and libminetest.so required libgmp.so.10 instead of libgmp.so. The second issue has been solved by the linker flags. --- build/android/Makefile | 4 +++- .../android/src/net/minetest/minetest/MtNativeActivity.java | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/build/android/Makefile b/build/android/Makefile index 898968bed..b11d73972 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -120,7 +120,7 @@ CURL_URL_HTTP = http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2 GMP_VERSION = 6.0.0 GMP_DIR = $(ROOT)/deps/gmp-$(GMP_VERSION) -GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.la +GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.so GMP_TIMESTAMP = $(GMP_DIR)/timestamp GMP_TIMESTAMP_INT = $(ROOT)/deps/gmp_timestamp GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2 @@ -602,6 +602,8 @@ $(GMP_LIB): $(GMP_TIMESTAMP) export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ export CC=${CROSS_PREFIX}gcc; \ export CXX=${CROSS_PREFIX}g++; \ + export LIBGMP_LDFLAGS="-avoid-version"; \ + export LIBGMPXX_LDFLAGS="-avoid-version"; \ ./configure --disable-static --host=${TARGET_HOST} --prefix=/usr; \ $(MAKE) install DESTDIR=/${GMP_DIR} || exit 1; \ touch ${GMP_TIMESTAMP}; \ diff --git a/build/android/src/net/minetest/minetest/MtNativeActivity.java b/build/android/src/net/minetest/minetest/MtNativeActivity.java index 2bfcef93c..5c1f44d17 100644 --- a/build/android/src/net/minetest/minetest/MtNativeActivity.java +++ b/build/android/src/net/minetest/minetest/MtNativeActivity.java @@ -86,6 +86,12 @@ public class MtNativeActivity extends NativeActivity { System.loadLibrary("vorbis"); System.loadLibrary("ssl"); System.loadLibrary("crypto"); + System.loadLibrary("gmp"); + + // We don't have to load libminetest.so ourselves, + // but if we do, we get nicer logcat errors when + // loading fails. + System.loadLibrary("minetest"); } private int m_MessagReturnCode; From 99cf53c9087671d0a2130d2272b9a4f61d680517 Mon Sep 17 00:00:00 2001 From: Craig Robbins Date: Fri, 15 May 2015 13:20:53 +1000 Subject: [PATCH 048/670] ANDROID: Do not limit situations where fast is enabled Before this commit autofast for Android was ignored if the user was sneaking, digging or building. There is no reason for this and it impedes movement control --- src/game.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 74ae211bf..e27ec37dd 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2997,17 +2997,10 @@ void Game::updatePlayerControl(const CameraOrientation &cam) #ifdef ANDROID /* For Android, invert the meaning of holding down the fast button (i.e. - * holding down the fast button -- if there is one -- means walk), unless - * performing an action, sneaking or jumping. + * holding down the fast button -- if there is one -- means walk) */ - const u32 autofast_exludebits = - (1U << 4) | (1U << 6) // jump, sneak - | (1U << 7) | (1U << 8); // left state, right state - - if ((keypress_bits & autofast_exludebits) == 0) { - control.aux1 = control.aux1 ^ true; - keypress_bits ^= ((u32)(1U << 5)); - } + control.aux1 = control.aux1 ^ true; + keypress_bits ^= ((u32)(1U << 5)); #endif client->setPlayerControl(control); From 86a963caca9604ad57904e9acd9bef7c46ca47d8 Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Thu, 14 May 2015 15:54:54 +0200 Subject: [PATCH 049/670] Add get and set functions for the nametag color --- doc/lua_api.txt | 6 +++++ src/content_cao.cpp | 8 +++++- src/content_cao.h | 1 + src/content_sao.cpp | 24 +++++++++++++++++- src/content_sao.h | 5 ++++ src/genericobject.cpp | 9 +++++++ src/genericobject.h | 3 +++ src/script/lua_api/l_object.cpp | 44 +++++++++++++++++++++++++++++++++ src/script/lua_api/l_object.h | 6 +++++ 9 files changed, 104 insertions(+), 2 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 5a1d49d03..4c0baa5bc 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2482,6 +2482,12 @@ This is basically a reference to a C++ `ServerActiveObject` * `set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})`: defines offset value for camera per player * in first person view * in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`) +* `get_nametag_color()` + * returns the color of the nametag as table + * { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } +* `set_nametag_color(color)` + * sets the color of the nametag + * `color`: { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } ### `InvRef` An `InvRef` is a reference to an inventory. diff --git a/src/content_cao.cpp b/src/content_cao.cpp index a8b107b49..5bf4d8e9c 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -552,6 +552,7 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env): m_animated_meshnode(NULL), m_wield_meshnode(NULL), m_spritenode(NULL), + m_nametag_color(video::SColor(255, 255, 255, 255)), m_textnode(NULL), m_position(v3f(0,10*BS,0)), m_velocity(v3f(0,0,0)), @@ -962,7 +963,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, gui::IGUIEnvironment* gui = irr->getGUIEnvironment(); std::wstring wname = narrow_to_wide(m_name); m_textnode = smgr->addTextSceneNode(gui->getSkin()->getFont(), - wname.c_str(), video::SColor(255,255,255,255), node); + wname.c_str(), m_nametag_color, node); m_textnode->grab(); m_textnode->setPosition(v3f(0, BS*1.1, 0)); } @@ -1714,6 +1715,11 @@ void GenericCAO::processMessage(const std::string &data) int rating = readS16(is); m_armor_groups[name] = rating; } + } else if (cmd == GENERIC_CMD_SET_NAMETAG_COLOR) { + m_nametag_color = readARGB8(is); + if (m_textnode != NULL) { + m_textnode->setTextColor(m_nametag_color); + } } } diff --git a/src/content_cao.h b/src/content_cao.h index 31ccd04d4..36245bd3b 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -71,6 +71,7 @@ private: scene::IAnimatedMeshSceneNode *m_animated_meshnode; WieldMeshSceneNode *m_wield_meshnode; scene::IBillboardSceneNode *m_spritenode; + video::SColor m_nametag_color; scene::ITextSceneNode* m_textnode; v3f m_position; v3f m_velocity; diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 51f074f7c..0aae7bbc2 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -715,6 +715,8 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_, m_bone_position_sent(false), m_attachment_parent_id(0), m_attachment_sent(false), + m_nametag_color(video::SColor(255, 255, 255, 255)), + m_nametag_sent(false), // public m_physics_override_speed(1), m_physics_override_jump(1), @@ -801,7 +803,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version) writeF1000(os, m_player->getYaw()); writeS16(os, getHP()); - writeU8(os, 5 + m_bone_position.size()); // number of messages stuffed in here + writeU8(os, 6 + m_bone_position.size()); // number of messages stuffed in here os<setNametagColor(color); + + lua_pushboolean(L, true); + return 1; +} + +// get_nametag_color(self) +int ObjectRef::l_get_nametag_color(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + PlayerSAO *playersao = getplayersao(ref); + if (playersao == NULL) + return 0; + + video::SColor color = playersao->getNametagColor(); + + lua_newtable(L); + lua_pushnumber(L, color.getAlpha()); + lua_setfield(L, -2, "a"); + lua_pushnumber(L, color.getRed()); + lua_setfield(L, -2, "r"); + lua_pushnumber(L, color.getGreen()); + lua_setfield(L, -2, "g"); + lua_pushnumber(L, color.getBlue()); + lua_setfield(L, -2, "b"); + + return 1; +} + ObjectRef::ObjectRef(ServerActiveObject *object): m_object(object) { @@ -1396,5 +1438,7 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, override_day_night_ratio), luamethod(ObjectRef, set_local_animation), luamethod(ObjectRef, set_eye_offset), + luamethod(ObjectRef, set_nametag_color), + luamethod(ObjectRef, get_nametag_color), {0,0} }; diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index daf91ce56..1f2931f29 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -240,6 +240,12 @@ private: // set_eye_offset(self, v3f first pv, v3f third pv) static int l_set_eye_offset(lua_State *L); + // set_nametag_color(self, color) + static int l_set_nametag_color(lua_State *L); + + // get_nametag_color(self) + static int l_get_nametag_color(lua_State *L); + public: ObjectRef(ServerActiveObject *object); From c5b4e541749c50805519ce040d98a0a8e5e0ec03 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 16 May 2014 23:47:12 -0500 Subject: [PATCH 050/670] Add minetest.register_on_punchplayer --- builtin/game/register.lua | 1 + doc/lua_api.txt | 11 +++++++++- src/content_sao.cpp | 39 +++++++++++++++++++++++++-------- src/script/cpp_api/s_internal.h | 1 + src/script/cpp_api/s_player.cpp | 24 ++++++++++++++++++++ src/script/cpp_api/s_player.h | 5 +++++ 6 files changed, 71 insertions(+), 10 deletions(-) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index cb0840241..e5ba88f7d 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -431,6 +431,7 @@ core.registered_on_crafts, core.register_on_craft = make_registration() core.registered_craft_predicts, core.register_craft_predict = make_registration() core.registered_on_protection_violation, core.register_on_protection_violation = make_registration() core.registered_on_item_eats, core.register_on_item_eat = make_registration() +core.registered_on_punchplayers, core.register_on_punchplayer = make_registration() -- -- Compatibility for on_mapgen_init() diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 4c0baa5bc..8ade48b7b 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1760,6 +1760,16 @@ Call these functions only at load time! * Called after a new player has been created * `minetest.register_on_dieplayer(func(ObjectRef))` * Called when a player dies +* `minetest.register_on_punchplayer(func(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))` + * Called when a player is punched + * `player` - ObjectRef - Player that was punched + * `hitter` - ObjectRef - Player that hit + * `time_from_last_punch`: Meant for disallowing spamming of clicks (can be nil) + * `tool_capabilities`: capability table of used tool (can be nil) + * `dir`: unit vector of direction of punch. Always defined. Points from + the puncher to the punched. + * `damage` - number that represents the damage calculated by the engine + * should return `true` to prevent the default damage mechanism * `minetest.register_on_respawnplayer(func(ObjectRef))` * Called when player is to be respawned * Called _before_ repositioning of player occurs @@ -2282,7 +2292,6 @@ These functions return the leftover itemstack. * `minetest.forceload_free_block(pos)` * stops forceloading the position `pos` - Please note that forceloaded areas are saved when the server restarts. minetest.global_exists(name) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 0aae7bbc2..c7f4b60c7 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1023,15 +1023,15 @@ int PlayerSAO::punch(v3f dir, float time_from_last_punch) { // It's best that attachments cannot be punched - if(isAttached()) + if (isAttached()) return 0; - if(!toolcap) + if (!toolcap) return 0; // No effect if PvP disabled - if(g_settings->getBool("enable_pvp") == false){ - if(puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER){ + if (g_settings->getBool("enable_pvp") == false) { + if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { std::string str = gob_cmd_punched(0, getHP()); // create message and add to list ActiveObjectMessage aom(getId(), true, str); @@ -1045,14 +1045,35 @@ int PlayerSAO::punch(v3f dir, std::string punchername = "nil"; - if ( puncher != 0 ) + if (puncher != 0) punchername = puncher->getDescription(); - actionstream<<"Player "<getName()<<" punched by " - <getPlayerSAO(); - setHP(getHP() - hitparams.hp); + bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao, + puncher, time_from_last_punch, toolcap, dir, + hitparams.hp); + + if (!damage_handled) { + setHP(getHP() - hitparams.hp); + } else { // override client prediction + if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { + std::string str = gob_cmd_punched(0, getHP()); + // create message and add to list + ActiveObjectMessage aom(getId(), true, str); + m_messages_out.push(aom); + } + } + + + actionstream << "Player " << m_player->getName() << " punched by " + << punchername; + if (!damage_handled) { + actionstream << ", damage " << hitparams.hp << " HP"; + } else { + actionstream << ", damage handled by lua"; + } + actionstream << std::endl; return hitparams.wear; } diff --git a/src/script/cpp_api/s_internal.h b/src/script/cpp_api/s_internal.h index 10ee1a7de..9999a584a 100644 --- a/src/script/cpp_api/s_internal.h +++ b/src/script/cpp_api/s_internal.h @@ -61,3 +61,4 @@ bool* m_variable; StackUnroller stack_unroller(L); #endif /* S_INTERNAL_H_ */ + diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index 81bfd4505..d56766824 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -19,6 +19,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_player.h" #include "cpp_api/s_internal.h" +#include "common/c_converter.h" +#include "common/c_content.h" #include "util/string.h" void ScriptApiPlayer::on_newplayer(ServerActiveObject *player) @@ -45,6 +47,28 @@ void ScriptApiPlayer::on_dieplayer(ServerActiveObject *player) script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); } +bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, + ServerActiveObject *hitter, + float time_from_last_punch, + const ToolCapabilities *toolcap, + v3f dir, + s16 damage) +{ + SCRIPTAPI_PRECHECKHEADER + // Get core.registered_on_punchplayers + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_punchplayers"); + // Call callbacks + objectrefGetOrCreate(L, player); + objectrefGetOrCreate(L, hitter); + lua_pushnumber(L, time_from_last_punch); + push_tool_capabilities(L, *toolcap); + push_v3f(L, dir); + lua_pushnumber(L, damage); + script_run_callbacks(L, 6, RUN_CALLBACKS_MODE_OR); + return lua_toboolean(L, -1); +} + bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h index c77d397c4..a0f764cd5 100644 --- a/src/script/cpp_api/s_player.h +++ b/src/script/cpp_api/s_player.h @@ -23,7 +23,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "cpp_api/s_base.h" +#include "irr_v3d.h" +struct ToolCapabilities; class ScriptApiPlayer : virtual public ScriptApiBase @@ -38,6 +40,9 @@ public: void on_joinplayer(ServerActiveObject *player); void on_leaveplayer(ServerActiveObject *player); void on_cheat(ServerActiveObject *player, const std::string &cheat_type); + bool on_punchplayer(ServerActiveObject *player, + ServerActiveObject *hitter, float time_from_last_punch, + const ToolCapabilities *toolcap, v3f dir, s16 damage); void on_playerReceiveFields(ServerActiveObject *player, const std::string &formname, From eaef678e0b298632ef03957c7bdd8ebfe839b9d4 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 15 May 2015 13:20:12 -0400 Subject: [PATCH 051/670] Schematics: Fix probability values for .mts version 1 --- src/mg_schematic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index 81d849a66..a5ffb20b8 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -282,7 +282,7 @@ bool Schematic::deserializeFromMts(std::istream *is, if (version < 2) { for (size_t i = 0; i != nodecount; i++) { if (schemdata[i].param1 == 0) - schemdata[i].param1 = MTSCHEM_PROB_ALWAYS; + schemdata[i].param1 = MTSCHEM_PROB_ALWAYS_OLD; if (have_cignore && schemdata[i].getContent() == cignore) schemdata[i].param1 = MTSCHEM_PROB_NEVER; } From 5d1d7c17ea234a01af3a16f31bc0e363ffd150ba Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 15 May 2015 13:21:23 -0400 Subject: [PATCH 052/670] Noise: Make buffer size parameters unsigned --- src/noise.cpp | 4 ++-- src/noise.h | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/noise.cpp b/src/noise.cpp index 7a23819c8..f5d985fff 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -460,7 +460,7 @@ float NoisePerlin3D(NoiseParams *np, float x, float y, float z, int seed) } -Noise::Noise(NoiseParams *np_, int seed, int sx, int sy, int sz) +Noise::Noise(NoiseParams *np_, int seed, u32 sx, u32 sy, u32 sz) { memcpy(&np, np_, sizeof(np)); this->seed = seed; @@ -512,7 +512,7 @@ void Noise::allocBuffers() } -void Noise::setSize(int sx, int sy, int sz) +void Noise::setSize(u32 sx, u32 sy, u32 sz) { this->sx = sx; this->sy = sy; diff --git a/src/noise.h b/src/noise.h index 5757cbc99..0e4252dd4 100644 --- a/src/noise.h +++ b/src/noise.h @@ -149,18 +149,18 @@ class Noise { public: NoiseParams np; int seed; - int sx; - int sy; - int sz; + u32 sx; + u32 sy; + u32 sz; float *noise_buf; float *gradient_buf; float *persist_buf; float *result; - Noise(NoiseParams *np, int seed, int sx, int sy, int sz=1); + Noise(NoiseParams *np, int seed, u32 sx, u32 sy, u32 sz=1); ~Noise(); - void setSize(int sx, int sy, int sz=1); + void setSize(u32 sx, u32 sy, u32 sz=1); void setSpreadFactor(v3f spread); void setOctaves(int octaves); From 18c2f16c138f4b40b4705507b46d24e1518e4705 Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Fri, 15 May 2015 21:46:56 +0200 Subject: [PATCH 053/670] Generalize core.get/set_nametag_color into core.get/set_nametag_attributes --- doc/lua_api.txt | 17 +++++++++++------ src/content_cao.cpp | 3 ++- src/content_sao.cpp | 4 ++-- src/genericobject.cpp | 5 +++-- src/genericobject.h | 4 ++-- src/script/lua_api/l_object.cpp | 21 ++++++++++++--------- src/script/lua_api/l_object.h | 8 ++++---- 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 8ade48b7b..0cc83bf69 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2491,12 +2491,17 @@ This is basically a reference to a C++ `ServerActiveObject` * `set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})`: defines offset value for camera per player * in first person view * in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`) -* `get_nametag_color()` - * returns the color of the nametag as table - * { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } -* `set_nametag_color(color)` - * sets the color of the nametag - * `color`: { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } +* `get_nametag_attributes()` + * returns a table with the attributes of the nametag of the player + * { + color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } + } +* `set_nametag_attributes(attributes)` + * sets the attributes of the nametag of the player + * `attributes`: + { + color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } + } ### `InvRef` An `InvRef` is a reference to an inventory. diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 5bf4d8e9c..fe560a41a 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1715,7 +1715,8 @@ void GenericCAO::processMessage(const std::string &data) int rating = readS16(is); m_armor_groups[name] = rating; } - } else if (cmd == GENERIC_CMD_SET_NAMETAG_COLOR) { + } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) { + u8 version = readU8(is); // forward compatibility m_nametag_color = readARGB8(is); if (m_textnode != NULL) { m_textnode->setTextColor(m_nametag_color); diff --git a/src/content_sao.cpp b/src/content_sao.cpp index c7f4b60c7..1f7323c9c 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -814,7 +814,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version) os<getNametagColor(); + lua_getfield(L, 2, "color"); + if (!lua_isnil(L, -1)) + color = readARGB8(L, -1); playersao->setNametagColor(color); lua_pushboolean(L, true); return 1; } -// get_nametag_color(self) -int ObjectRef::l_get_nametag_color(lua_State *L) +// get_nametag_attributes(self) +int ObjectRef::l_get_nametag_attributes(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); @@ -1303,6 +1304,7 @@ int ObjectRef::l_get_nametag_color(lua_State *L) video::SColor color = playersao->getNametagColor(); + lua_newtable(L); lua_newtable(L); lua_pushnumber(L, color.getAlpha()); lua_setfield(L, -2, "a"); @@ -1312,6 +1314,7 @@ int ObjectRef::l_get_nametag_color(lua_State *L) lua_setfield(L, -2, "g"); lua_pushnumber(L, color.getBlue()); lua_setfield(L, -2, "b"); + lua_setfield(L, -2, "color"); return 1; } @@ -1438,7 +1441,7 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, override_day_night_ratio), luamethod(ObjectRef, set_local_animation), luamethod(ObjectRef, set_eye_offset), - luamethod(ObjectRef, set_nametag_color), - luamethod(ObjectRef, get_nametag_color), + luamethod(ObjectRef, set_nametag_attributes), + luamethod(ObjectRef, get_nametag_attributes), {0,0} }; diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index 1f2931f29..af3ed5ef0 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -240,11 +240,11 @@ private: // set_eye_offset(self, v3f first pv, v3f third pv) static int l_set_eye_offset(lua_State *L); - // set_nametag_color(self, color) - static int l_set_nametag_color(lua_State *L); + // set_nametag_attributes(self, attributes) + static int l_set_nametag_attributes(lua_State *L); - // get_nametag_color(self) - static int l_get_nametag_color(lua_State *L); + // get_nametag_attributes(self) + static int l_get_nametag_attributes(lua_State *L); public: ObjectRef(ServerActiveObject *object); From 19cbb6b37b9a35df7892bde5aad138266496eb8f Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Fri, 15 May 2015 22:16:39 +0200 Subject: [PATCH 054/670] Add push_ARGB8 to script/common/c_converter --- src/script/common/c_converter.cpp | 13 +++++++++++++ src/script/common/c_converter.h | 1 + src/script/lua_api/l_object.cpp | 10 +--------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index fc489ea95..9d6829815 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -39,6 +39,19 @@ extern "C" { #define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE) +void push_ARGB8(lua_State *L, video::SColor color) +{ + lua_newtable(L); + lua_pushnumber(L, color.getAlpha()); + lua_setfield(L, -2, "a"); + lua_pushnumber(L, color.getRed()); + lua_setfield(L, -2, "r"); + lua_pushnumber(L, color.getGreen()); + lua_setfield(L, -2, "g"); + lua_pushnumber(L, color.getBlue()); + lua_setfield(L, -2, "b"); +} + void push_v3f(lua_State *L, v3f p) { lua_newtable(L); diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index 0847f47c9..ff1fcaadf 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -95,6 +95,7 @@ size_t read_stringlist (lua_State *L, int index, std::vector *result); void push_v3s16 (lua_State *L, v3s16 p); +void push_ARGB8 (lua_State *L, video::SColor color); void pushFloatPos (lua_State *L, v3f p); void push_v3f (lua_State *L, v3f p); void push_v2f (lua_State *L, v2f p); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 845aab732..74903df5f 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1305,15 +1305,7 @@ int ObjectRef::l_get_nametag_attributes(lua_State *L) video::SColor color = playersao->getNametagColor(); lua_newtable(L); - lua_newtable(L); - lua_pushnumber(L, color.getAlpha()); - lua_setfield(L, -2, "a"); - lua_pushnumber(L, color.getRed()); - lua_setfield(L, -2, "r"); - lua_pushnumber(L, color.getGreen()); - lua_setfield(L, -2, "g"); - lua_pushnumber(L, color.getBlue()); - lua_setfield(L, -2, "b"); + push_ARGB8(L, color); lua_setfield(L, -2, "color"); return 1; From 8dbf68331386f5f6a40ff0f0a77f5390bdca60b9 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 16 May 2015 01:19:43 +0200 Subject: [PATCH 055/670] Finalize init packets and enable protocol v25 This enables srp. --- src/client.cpp | 5 +++-- src/clientiface.h | 4 ++-- src/network/clientpackethandler.cpp | 19 ++++++++++++------- src/network/networkprotocol.h | 18 ++++++++++-------- src/network/serveropcodes.cpp | 2 +- src/network/serverpackethandler.cpp | 18 ++++++++++-------- 6 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 8cfcc85a7..780b07872 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1000,8 +1000,9 @@ void Client::sendInit(const std::string &playerName) { NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size())); - // TODO (later) actually send supported compression modes - pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u8) 42; + // we don't support network compression yet + u16 supp_comp_modes = NETPROTO_COMPRESSION_NONE; + pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) supp_comp_modes; pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX; pkt << playerName; diff --git a/src/clientiface.h b/src/clientiface.h index 070559c3a..4707f4d9a 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -337,7 +337,7 @@ public: void setPendingSerializationVersion(u8 version) { m_pending_serialization_version = version; } - void setSupportedCompressionModes(u8 byteFlag) + void setSupportedCompressionModes(u16 byteFlag) { m_supported_compressions = byteFlag; } void confirmSerializationVersion() @@ -416,7 +416,7 @@ private: std::string m_full_version; - u8 m_supported_compressions; + u16 m_supported_compressions; /* time this client was created diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 2106e4368..1f13c62f9 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -44,26 +44,31 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) if (pkt->getSize() < 1) return; - u8 deployed; + u8 serialization_ver; + u16 proto_ver; + u16 compression_mode; u32 auth_mechs; std::string username_legacy; // for case insensitivity - *pkt >> deployed >> auth_mechs >> username_legacy; + *pkt >> serialization_ver >> compression_mode >> proto_ver + >> auth_mechs >> username_legacy; // Chose an auth method we support AuthMechanism chosen_auth_mechanism = choseAuthMech(auth_mechs); infostream << "Client: TOCLIENT_HELLO received with " - "deployed=" << ((int)deployed & 0xff) << ", auth_mechs=" - << auth_mechs << ", chosen=" << chosen_auth_mechanism << std::endl; + << "serialization_ver=" << serialization_ver + << ", auth_mechs=" << auth_mechs + << ", compression_mode=" << compression_mode + << ". Doing auth with mech " << chosen_auth_mechanism << std::endl; - if (!ser_ver_supported(deployed)) { + if (!ser_ver_supported(serialization_ver)) { infostream << "Client: TOCLIENT_HELLO: Server sent " << "unsupported ser_fmt_ver"<< std::endl; return; } - m_server_ser_ver = deployed; - m_proto_ver = deployed; + m_server_ser_ver = serialization_ver; + m_proto_ver = proto_ver; //TODO verify that username_legacy matches sent username, only // differs in casing (make both uppercase and compare) diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index ba12a206e..09617c9d9 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -131,7 +131,7 @@ with this program; if not, write to the Free Software Foundation, Inc., Add TOCLIENT_AUTH_ACCEPT to accept connection from client */ -#define LATEST_PROTOCOL_VERSION 24 +#define LATEST_PROTOCOL_VERSION 25 // Server's supported network protocol range #define SERVER_PROTOCOL_VERSION_MIN 13 @@ -158,7 +158,9 @@ enum ToClientCommand /* Sent after TOSERVER_INIT. - u8 deployed version + u8 deployed serialisation version + u16 deployed network compression mode + u16 deployed protocol version u32 supported auth methods std::string username that should be used for legacy hash (for proper casing) */ @@ -632,11 +634,11 @@ enum ToServerCommand /* Sent first after connected. - [2] u8 SER_FMT_VER_HIGHEST_READ - [3] u8 compression_modes - [4] u16 minimum supported network protocol version - [6] u16 maximum supported network protocol version - [8] std::string player name + u8 serialisation version (=SER_FMT_VER_HIGHEST_READ) + u16 supported network compression modes + u16 minimum supported network protocol version + u16 maximum supported network protocol version + std::string player name */ TOSERVER_INIT_LEGACY = 0x10, @@ -936,7 +938,7 @@ enum AccessDeniedCode { }; enum NetProtoCompressionMode { - NETPROTO_COMPRESSION_ZLIB = 0, + NETPROTO_COMPRESSION_NONE = 0, }; const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp index 92d24fe40..9b14a1be3 100644 --- a/src/network/serveropcodes.cpp +++ b/src/network/serveropcodes.cpp @@ -115,7 +115,7 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] = { null_command_factory, // 0x00 null_command_factory, // 0x01 - null_command_factory, // 0x02 + { "TOCLIENT_HELLO", 0, true }, // 0x02 { "TOCLIENT_AUTH_ACCEPT", 0, true }, // 0x03 { "TOCLIENT_ACCEPT_SUDO_MODE", 0, true }, // 0x04 { "TOCLIENT_DENY_SUDO_MODE", 0, true }, // 0x05 diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index a6f5ffca1..38b8b3cff 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -91,22 +91,22 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // First byte after command is maximum supported // serialization version u8 client_max; - u8 compression_modes; + u16 supp_compr_modes; u16 min_net_proto_version = 0; u16 max_net_proto_version; std::string playerName; - *pkt >> client_max >> compression_modes >> min_net_proto_version + *pkt >> client_max >> supp_compr_modes >> min_net_proto_version >> max_net_proto_version >> playerName; u8 our_max = SER_FMT_VER_HIGHEST_READ; // Use the highest version supported by both - u8 deployed = std::min(client_max, our_max); + u8 depl_serial_v = std::min(client_max, our_max); // If it's lower than the lowest supported, give up. - if (deployed < SER_FMT_VER_LOWEST) - deployed = SER_FMT_VER_INVALID; + if (depl_serial_v < SER_FMT_VER_LOWEST) + depl_serial_v = SER_FMT_VER_INVALID; - if (deployed == 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 " @@ -115,7 +115,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) return; } - client->setPendingSerializationVersion(deployed); + client->setPendingSerializationVersion(depl_serial_v); /* Read and check network protocol version @@ -274,7 +274,9 @@ void Server::handleCommand_Init(NetworkPacket* pkt) NetworkPacket resp_pkt(TOCLIENT_HELLO, 1 + 4 + legacyPlayerNameCasing.size(), pkt->getPeerId()); - resp_pkt << deployed << auth_mechs << legacyPlayerNameCasing; + u16 depl_compress_mode = NETPROTO_COMPRESSION_NONE; + resp_pkt << depl_serial_v << depl_compress_mode << net_proto_version + << auth_mechs << legacyPlayerNameCasing; Send(&resp_pkt); From c297a75a7d4c8f05c5f0d4657a947648335ff85f Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 16 May 2015 22:14:15 +0200 Subject: [PATCH 056/670] Fix build since last commit Also rename method to better match what it does. --- src/clientiface.h | 8 ++++---- src/network/serverpackethandler.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/clientiface.h b/src/clientiface.h index 4707f4d9a..598662e2d 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -260,7 +260,7 @@ public: m_version_minor(0), m_version_patch(0), m_full_version("unknown"), - m_supported_compressions(0), + m_deployed_compression(0), m_connection_time(getTime(PRECISION_SECONDS)) { } @@ -337,8 +337,8 @@ public: void setPendingSerializationVersion(u8 version) { m_pending_serialization_version = version; } - void setSupportedCompressionModes(u16 byteFlag) - { m_supported_compressions = byteFlag; } + void setDeployedCompressionMode(u16 byteFlag) + { m_deployed_compression = byteFlag; } void confirmSerializationVersion() { serialization_version = m_pending_serialization_version; } @@ -416,7 +416,7 @@ private: std::string m_full_version; - u16 m_supported_compressions; + u16 m_deployed_compression; /* time this client was created diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 38b8b3cff..1eb7064d6 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -281,7 +281,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) Send(&resp_pkt); client->allowed_auth_mechs = auth_mechs; - client->setSupportedCompressionModes(compression_modes); + client->setDeployedCompressionMode(depl_compress_mode); m_clients.event(pkt->getPeerId(), CSE_Hello); } From f26421228bbd31f02bf16b45a4b82be84f233e52 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Sat, 16 May 2015 14:54:53 +0200 Subject: [PATCH 057/670] Added hour:minute format to time command * The time command now accepts parameters in the form :, and if invoked with no parameters returns the current time in said format. --- builtin/game/chatcommands.lua | 46 ++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index 3b3c674f2..fbc91ef01 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -318,7 +318,7 @@ core.register_chatcommand("teleport", { teleportee:setpos(p) return true, "Teleporting to "..core.pos_to_string(p) end - + local teleportee = nil local p = nil local target_name = nil @@ -355,7 +355,7 @@ core.register_chatcommand("teleport", { return true, "Teleporting " .. teleportee_name .. " to " .. core.pos_to_string(p) end - + local teleportee = nil local p = nil local teleportee_name = nil @@ -377,7 +377,7 @@ core.register_chatcommand("teleport", { .. " to " .. target_name .. " at " .. core.pos_to_string(p) end - + return false, 'Invalid parameters ("' .. param .. '") or player not found (see /help teleport)' end, @@ -679,19 +679,41 @@ core.register_chatcommand("status", { }) core.register_chatcommand("time", { - params = "<0...24000>", + params = "<0..23>:<0..59> | <0..24000>", description = "set time of day", - privs = {settime=true}, + privs = {}, func = function(name, param) if param == "" then - return false, "Missing time." + local current_time = math.floor(core.get_timeofday() * 1440) + local minutes = current_time % 60 + local hour = (current_time - minutes) / 60 + return true, ("Current time is %d:%02d"):format(hour, minutes) end - local newtime = tonumber(param) - if newtime == nil then - return false, "Invalid time." + local player_privs = minetest.get_player_privs(name) + if not player_privs.settime then + return false, "You don't have permission to run this command " .. + "(missing privilege: settime)." end - core.set_timeofday((newtime % 24000) / 24000) - core.log("action", name .. " sets time " .. newtime) + local hour, minute = param:match("^(%d+):(%d+)$") + if not hour then + local new_time = tonumber(param) + if not new_time then + return false, "Invalid time." + end + -- Backward compatibility. + core.set_timeofday((new_time % 24000) / 24000) + core.log("action", name .. " sets time to " .. new_time) + return true, "Time of day changed." + end + hour = tonumber(hour) + minute = tonumber(minute) + if hour < 0 or hour > 23 then + return false, "Invalid hour (must be between 0 and 23 inclusive)." + elseif minute < 0 or minute > 59 then + return false, "Invalid minute (must be between 0 and 59 inclusive)." + end + core.set_timeofday((hour * 60 + minute) / 1440) + core.log("action", name .. " sets time to " .. hour .. ":" .. minute) return true, "Time of day changed." end, }) @@ -808,4 +830,4 @@ core.register_chatcommand("last-login", { end return false, "Last login time is unknown" end, -}) \ No newline at end of file +}) From 3a8c7888807e4483bbdb3edd81c9893f3e2f427d Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Fri, 5 Sep 2014 20:08:51 -0400 Subject: [PATCH 058/670] Add mod security Due to compatibility concerns, this is temporarily disabled. --- build/android/jni/Android.mk | 3 +- doc/lua_api.txt | 4 + minetest.conf.example | 3 + src/defaultsettings.cpp | 1 + src/filesys.cpp | 13 + src/filesys.h | 10 +- src/script/common/c_internal.cpp | 4 +- src/script/cpp_api/CMakeLists.txt | 3 +- src/script/cpp_api/s_base.cpp | 44 +-- src/script/cpp_api/s_base.h | 15 +- src/script/cpp_api/s_security.cpp | 603 ++++++++++++++++++++++++++++++ src/script/cpp_api/s_security.h | 70 ++++ src/script/lua_api/l_mapgen.cpp | 7 +- src/script/lua_api/l_server.cpp | 3 +- src/script/lua_api/l_settings.cpp | 2 + src/script/lua_api/l_util.cpp | 14 +- src/script/scripting_game.cpp | 7 +- src/script/scripting_game.h | 18 +- src/script/scripting_mainmenu.cpp | 2 - src/server.cpp | 50 +-- src/server.h | 4 +- src/settings.cpp | 15 +- 22 files changed, 812 insertions(+), 83 deletions(-) create mode 100644 src/script/cpp_api/s_security.cpp create mode 100644 src/script/cpp_api/s_security.h diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 206c30ccf..f78b78b9b 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -262,6 +262,7 @@ LOCAL_SRC_FILES += \ jni/src/script/common/c_converter.cpp \ jni/src/script/common/c_internal.cpp \ jni/src/script/common/c_types.cpp \ + jni/src/script/cpp_api/s_async.cpp \ jni/src/script/cpp_api/s_base.cpp \ jni/src/script/cpp_api/s_entity.cpp \ jni/src/script/cpp_api/s_env.cpp \ @@ -271,8 +272,8 @@ LOCAL_SRC_FILES += \ 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/cpp_api/s_async.cpp \ jni/src/script/lua_api/l_base.cpp \ jni/src/script/lua_api/l_craft.cpp \ jni/src/script/lua_api/l_env.cpp \ diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 0cc83bf69..2421af069 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1825,8 +1825,12 @@ Call these functions only at load time! ### Setting-related * `minetest.setting_set(name, value)` + * Setting names can't contain whitespace or any of `="{}#`. + * Setting values can't contain the sequence `\n"""`. + * Setting names starting with "secure." can't be set. * `minetest.setting_get(name)`: returns string or `nil` * `minetest.setting_setbool(name, value)` + * See documentation on `setting_set` for restrictions. * `minetest.setting_getbool(name)`: returns boolean or `nil` * `minetest.setting_get_pos(name)`: returns position or nil * `minetest.setting_save()`, returns `nil`, save all settings to config file diff --git a/minetest.conf.example b/minetest.conf.example index 4e3e97b95..6474289bd 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -569,3 +569,6 @@ #mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 #mgv7_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0 +# Prevent mods from doing insecure things like running shell commands. +#secure.enable_security = false + diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 45188f791..f26b4c8ad 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -272,6 +272,7 @@ void set_default_settings(Settings *settings) settings->setDefault("emergequeue_limit_diskonly", "32"); settings->setDefault("emergequeue_limit_generate", "32"); settings->setDefault("num_emerge_threads", "1"); + settings->setDefault("secure.enable_security", "false"); // physics stuff settings->setDefault("movement_acceleration_default", "3"); diff --git a/src/filesys.cpp b/src/filesys.cpp index 4a4a2e418..9aeecf427 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -662,6 +662,19 @@ std::string RemoveRelativePathComponents(std::string path) return path.substr(0, pos); } +std::string AbsolutePath(const std::string &path) +{ +#ifdef _WIN32 + char *abs_path = _fullpath(NULL, path.c_str(), MAX_PATH); +#else + char *abs_path = realpath(path.c_str(), NULL); +#endif + if (!abs_path) return ""; + std::string abs_path_str(abs_path); + free(abs_path); + return abs_path_str; +} + const char *GetFilenameFromPath(const char *path) { const char *filename = strrchr(path, DIR_DELIM_CHAR); diff --git a/src/filesys.h b/src/filesys.h index 7560d3c15..19fcbb673 100644 --- a/src/filesys.h +++ b/src/filesys.h @@ -103,13 +103,17 @@ std::string RemoveLastPathComponent(const std::string &path, // this does not resolve symlinks and check for existence of directories. std::string RemoveRelativePathComponents(std::string path); -// Return the filename from a path or the entire path if no directory delimiter -// is found. +// Returns the absolute path for the passed path, with "." and ".." path +// components and symlinks removed. Returns "" on error. +std::string AbsolutePath(const std::string &path); + +// Returns the filename from a path or the entire path if no directory +// delimiter is found. const char *GetFilenameFromPath(const char *path); bool safeWriteToFile(const std::string &path, const std::string &content); -}//fs +} // namespace fs #endif diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index fcab98dc6..8cf39dc3a 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -63,10 +63,8 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f) return f(L); // Call wrapped function and return result. } catch (const char *s) { // Catch and convert exceptions. lua_pushstring(L, s); - } catch (std::exception& e) { + } catch (std::exception &e) { lua_pushstring(L, e.what()); - } catch (...) { - lua_pushliteral(L, "caught (...)"); } return lua_error(L); // Rethrow as a Lua error. } diff --git a/src/script/cpp_api/CMakeLists.txt b/src/script/cpp_api/CMakeLists.txt index 4584962f1..be4d0131e 100644 --- a/src/script/cpp_api/CMakeLists.txt +++ b/src/script/cpp_api/CMakeLists.txt @@ -1,4 +1,5 @@ set(common_SCRIPT_CPP_API_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/s_async.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_base.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_entity.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_env.cpp @@ -7,8 +8,8 @@ set(common_SCRIPT_CPP_API_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/s_node.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_nodemeta.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_player.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/s_security.cpp ${CMAKE_CURRENT_SOURCE_DIR}/s_server.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/s_async.cpp PARENT_SCOPE) set(client_SCRIPT_CPP_API_SRCS diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 71473d215..4fb8411ef 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_base.h" #include "cpp_api/s_internal.h" +#include "cpp_api/s_security.h" #include "lua_api/l_object.h" #include "serverobject.h" #include "debug.h" @@ -45,18 +46,18 @@ class ModNameStorer private: lua_State *L; public: - ModNameStorer(lua_State *L_, const std::string &modname): + ModNameStorer(lua_State *L_, const std::string &mod_name): L(L_) { - // Store current modname in registry - lua_pushstring(L, modname.c_str()); - lua_setfield(L, LUA_REGISTRYINDEX, "current_modname"); + // Store current mod name in registry + lua_pushstring(L, mod_name.c_str()); + lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); } ~ModNameStorer() { - // Clear current modname in registry + // Clear current mod name from registry lua_pushnil(L); - lua_setfield(L, LUA_REGISTRYINDEX, "current_modname"); + lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); } }; @@ -112,32 +113,31 @@ ScriptApiBase::~ScriptApiBase() lua_close(m_luastack); } -bool ScriptApiBase::loadMod(const std::string &scriptpath, - const std::string &modname) +bool ScriptApiBase::loadMod(const std::string &script_path, + const std::string &mod_name) { - ModNameStorer modnamestorer(getStack(), modname); + ModNameStorer mod_name_storer(getStack(), mod_name); - if (!string_allowed(modname, MODNAME_ALLOWED_CHARS)) { - errorstream<<"Error loading mod \""< + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public 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 "cpp_api/s_security.h" + +#include "filesys.h" +#include "porting.h" +#include "server.h" +#include "settings.h" + +#include +#include +#include + + +#define SECURE_API(lib, name) \ + lua_pushcfunction(L, sl_##lib##_##name); \ + lua_setfield(L, -2, #name); + + +static inline void copy_safe(lua_State *L, const char *list[], unsigned len, int from=-2, int to=-1) +{ + if (from < 0) from = lua_gettop(L) + from + 1; + if (to < 0) to = lua_gettop(L) + to + 1; + for (unsigned i = 0; i < (len / sizeof(list[0])); i++) { + lua_getfield(L, from, list[i]); + lua_setfield(L, to, list[i]); + } +} + +// Pushes the original version of a library function on the stack, from the old version +static inline void push_original(lua_State *L, const char *lib, const char *func) +{ + lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_getfield(L, -1, lib); + lua_remove(L, -2); // Remove globals_backup + lua_getfield(L, -1, func); + lua_remove(L, -2); // Remove lib +} + + +void ScriptApiSecurity::initializeSecurity() +{ + static const char *whitelist[] = { + "assert", + "core", + "collectgarbage", + "DIR_DELIM", + "error", + "getfenv", + "getmetatable", + "ipairs", + "next", + "pairs", + "pcall", + "print", + "rawequal", + "rawget", + "rawset", + "select", + "setfenv", + "setmetatable", + "tonumber", + "tostring", + "type", + "unpack", + "_VERSION", + "xpcall", + // Completely safe libraries + "coroutine", + "string", + "table", + "math", + }; + static const char *io_whitelist[] = { + "close", + "flush", + "read", + "type", + "write", + }; + static const char *os_whitelist[] = { + "clock", + "date", + "difftime", + "exit", + "getenv", + "setlocale", + "time", + "tmpname", + }; + static const char *debug_whitelist[] = { + "gethook", + "traceback", + "getinfo", + "getmetatable", + "setupvalue", + "setmetatable", + "upvalueid", + "upvaluejoin", + "sethook", + "debug", + "getupvalue", + "setlocal", + }; + static const char *package_whitelist[] = { + "config", + "cpath", + "path", + "searchpath", + }; + static const char *jit_whitelist[] = { + "arch", + "flush", + "off", + "on", + "opt", + "os", + "status", + "version", + "version_num", + }; + + m_secure = true; + + lua_State *L = getStack(); + + // Backup globals to the registry + lua_getglobal(L, "_G"); + lua_setfield(L, LUA_REGISTRYINDEX, "globals_backup"); + + // Replace the global environment with an empty one +#if LUA_VERSION_NUM <= 501 + int is_main = lua_pushthread(L); // Push the main thread + FATAL_ERROR_IF(!is_main, "Security: ScriptApi's Lua state " + "isn't the main Lua thread!"); +#endif + lua_newtable(L); // Create new environment + lua_pushvalue(L, -1); + lua_setfield(L, -2, "_G"); // Set _G of new environment +#if LUA_VERSION_NUM >= 502 // Lua >= 5.2 + // Set the global environment + lua_rawseti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); +#else // Lua <= 5.1 + // Set the environment of the main thread + FATAL_ERROR_IF(!lua_setfenv(L, -2), "Security: Unable to set " + "environment of the main Lua thread!"); + lua_pop(L, 1); // Pop thread +#endif + + // Get old globals + lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + int old_globals = lua_gettop(L); + + + // Copy safe base functions + lua_getglobal(L, "_G"); + copy_safe(L, whitelist, sizeof(whitelist)); + + // And replace unsafe ones + SECURE_API(g, dofile); + SECURE_API(g, load); + SECURE_API(g, loadfile); + SECURE_API(g, loadstring); + SECURE_API(g, require); + lua_pop(L, 1); + + + // Copy safe IO functions + lua_getfield(L, old_globals, "io"); + lua_newtable(L); + copy_safe(L, io_whitelist, sizeof(io_whitelist)); + + // And replace unsafe ones + SECURE_API(io, open); + SECURE_API(io, input); + SECURE_API(io, output); + SECURE_API(io, lines); + + lua_setglobal(L, "io"); + lua_pop(L, 1); // Pop old IO + + + // Copy safe OS functions + lua_getfield(L, old_globals, "os"); + lua_newtable(L); + copy_safe(L, os_whitelist, sizeof(os_whitelist)); + + // And replace unsafe ones + SECURE_API(os, remove); + SECURE_API(os, rename); + + lua_setglobal(L, "os"); + lua_pop(L, 1); // Pop old OS + + + // Copy safe debug functions + lua_getfield(L, old_globals, "debug"); + lua_newtable(L); + copy_safe(L, debug_whitelist, sizeof(debug_whitelist)); + lua_setglobal(L, "debug"); + lua_pop(L, 1); // Pop old debug + + + // Copy safe package fields + lua_getfield(L, old_globals, "package"); + lua_newtable(L); + copy_safe(L, package_whitelist, sizeof(package_whitelist)); + lua_setglobal(L, "package"); + lua_pop(L, 1); // Pop old package + + + // Copy safe jit functions, if they exist + lua_getfield(L, -1, "jit"); + if (!lua_isnil(L, -1)) { + lua_newtable(L); + copy_safe(L, jit_whitelist, sizeof(jit_whitelist)); + lua_setglobal(L, "jit"); + } + lua_pop(L, 1); // Pop old jit + + lua_pop(L, 1); // Pop globals_backup +} + + +bool ScriptApiSecurity::isSecure(lua_State *L) +{ + lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + bool secure = !lua_isnil(L, -1); + lua_pop(L, 1); + return secure; +} + + +#define CHECK_FILE_ERR(ret, fp) \ + if (ret) { \ + if (fp) std::fclose(fp); \ + lua_pushfstring(L, "%s: %s", path, strerror(errno)); \ + return false; \ + } + + +bool ScriptApiSecurity::safeLoadFile(lua_State *L, const char *path) +{ + FILE *fp; + char *chunk_name; + if (path == NULL) { + fp = stdin; + chunk_name = const_cast("=stdin"); + } else { + fp = fopen(path, "r"); + if (!fp) { + lua_pushfstring(L, "%s: %s", path, strerror(errno)); + return false; + } + chunk_name = new char[strlen(path) + 2]; + chunk_name[0] = '@'; + chunk_name[1] = '\0'; + strcat(chunk_name, path); + } + + size_t start = 0; + int c = std::getc(fp); + if (c == '#') { + // Skip the first line + while ((c = std::getc(fp)) != EOF && c != '\n'); + if (c == '\n') c = std::getc(fp); + start = std::ftell(fp); + } + + if (c == LUA_SIGNATURE[0]) { + lua_pushliteral(L, "Bytecode prohibited when mod security is enabled."); + return false; + } + + // Read the file + int ret = std::fseek(fp, 0, SEEK_END); + CHECK_FILE_ERR(ret, fp); + if (ret) { + std::fclose(fp); + lua_pushfstring(L, "%s: %s", path, strerror(errno)); + return false; + } + size_t size = std::ftell(fp) - start; + char *code = new char[size]; + ret = std::fseek(fp, start, SEEK_SET); + CHECK_FILE_ERR(ret, fp); + if (ret) { + std::fclose(fp); + lua_pushfstring(L, "%s: %s", path, strerror(errno)); + return false; + } + size_t num_read = std::fread(code, 1, size, fp); + if (path) { + std::fclose(fp); + } + if (num_read != size) { + lua_pushliteral(L, "Error reading file to load."); + return false; + } + + if (luaL_loadbuffer(L, code, size, chunk_name)) { + return false; + } + + if (path) { + delete [] chunk_name; + } + return true; +} + + +bool ScriptApiSecurity::checkPath(lua_State *L, const char *path) +{ + std::string str; // Transient + + std::string norel_path = fs::RemoveRelativePathComponents(path); + std::string abs_path = fs::AbsolutePath(norel_path); + + if (!abs_path.empty()) { + // Don't allow accessing the settings file + str = fs::AbsolutePath(g_settings_path); + if (str == abs_path) return false; + } + + // If we couldn't find the absolute path (path doesn't exist) then + // try removing the last components until it works (to allow + // non-existent files/folders for mkdir). + std::string cur_path = norel_path; + std::string removed; + while (abs_path.empty() && !cur_path.empty()) { + std::string tmp_rmed; + cur_path = fs::RemoveLastPathComponent(cur_path, &tmp_rmed); + removed = tmp_rmed + (removed.empty() ? "" : DIR_DELIM + removed); + abs_path = fs::AbsolutePath(cur_path); + } + if (abs_path.empty()) return false; + // Add the removed parts back so that you can't, eg, create a + // directory in worldmods if worldmods doesn't exist. + if (!removed.empty()) abs_path += DIR_DELIM + removed; + + // Get server from registry + lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi"); + ScriptApiBase *script = (ScriptApiBase *) lua_touserdata(L, -1); + lua_pop(L, 1); + const Server *server = script->getServer(); + + if (!server) return false; + + // Get mod name + lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + if (lua_isstring(L, -1)) { + std::string mod_name = lua_tostring(L, -1); + + // Builtin can access anything + if (mod_name == BUILTIN_MOD_NAME) { + return true; + } + + // Allow paths in mod path + const ModSpec *mod = server->getModSpec(mod_name); + if (mod) { + str = fs::AbsolutePath(mod->path); + if (!str.empty() && fs::PathStartsWith(abs_path, str)) { + return true; + } + } + } + lua_pop(L, 1); // Pop mod name + + str = fs::AbsolutePath(server->getWorldPath()); + if (str.empty()) return false; + // Don't allow access to world mods. We add to the absolute path + // of the world instead of getting the absolute paths directly + // because that won't work if they don't exist. + if (fs::PathStartsWith(abs_path, str + DIR_DELIM + "worldmods") || + fs::PathStartsWith(abs_path, str + DIR_DELIM + "game")) { + return false; + } + // Allow all other paths in world path + if (fs::PathStartsWith(abs_path, str)) { + return true; + } + + // Default to disallowing + return false; +} + + +int ScriptApiSecurity::sl_g_dofile(lua_State *L) +{ + int nret = sl_g_loadfile(L); + if (nret != 1) { + return nret; + } + int top_precall = lua_gettop(L); + lua_call(L, 0, LUA_MULTRET); + // Return number of arguments returned by the function, + // adjusting for the function being poped. + return lua_gettop(L) - (top_precall - 1); +} + + +int ScriptApiSecurity::sl_g_load(lua_State *L) +{ + size_t len; + const char *buf; + std::string code; + const char *chunk_name = "=(load)"; + + luaL_checktype(L, 1, LUA_TFUNCTION); + if (!lua_isnone(L, 2)) { + luaL_checktype(L, 2, LUA_TSTRING); + chunk_name = lua_tostring(L, 2); + } + + while (true) { + lua_pushvalue(L, 1); + lua_call(L, 0, 1); + int t = lua_type(L, -1); + if (t == LUA_TNIL) { + break; + } else if (t != LUA_TSTRING) { + lua_pushnil(L); + lua_pushliteral(L, "Loader didn't return a string"); + return 2; + } + buf = lua_tolstring(L, -1, &len); + code += std::string(buf, len); + lua_pop(L, 1); // Pop return value + } + if (code[0] == LUA_SIGNATURE[0]) { + lua_pushnil(L); + lua_pushliteral(L, "Bytecode prohibited when mod security is enabled."); + return 2; + } + if (luaL_loadbuffer(L, code.data(), code.size(), chunk_name)) { + lua_pushnil(L); + lua_insert(L, lua_gettop(L) - 1); + return 2; + } + return 1; +} + + +int ScriptApiSecurity::sl_g_loadfile(lua_State *L) +{ + const char *path = NULL; + + if (lua_isstring(L, 1)) { + path = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path); + } + + if (!safeLoadFile(L, path)) { + lua_pushnil(L); + lua_insert(L, -2); + return 2; + } + + return 1; +} + + +int ScriptApiSecurity::sl_g_loadstring(lua_State *L) +{ + const char *chunk_name = "=(load)"; + + luaL_checktype(L, 1, LUA_TSTRING); + if (!lua_isnone(L, 2)) { + luaL_checktype(L, 2, LUA_TSTRING); + chunk_name = lua_tostring(L, 2); + } + + size_t size; + const char *code = lua_tolstring(L, 1, &size); + + if (size > 0 && code[0] == LUA_SIGNATURE[0]) { + lua_pushnil(L); + lua_pushliteral(L, "Bytecode prohibited when mod security is enabled."); + return 2; + } + if (luaL_loadbuffer(L, code, size, chunk_name)) { + lua_pushnil(L); + lua_insert(L, lua_gettop(L) - 1); + return 2; + } + return 1; +} + + +int ScriptApiSecurity::sl_g_require(lua_State *L) +{ + lua_pushliteral(L, "require() is disabled when mod security is on."); + return lua_error(L); +} + + +int ScriptApiSecurity::sl_io_open(lua_State *L) +{ + luaL_checktype(L, 1, LUA_TSTRING); + const char *path = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path); + + push_original(L, "io", "open"); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_call(L, 2, 2); + return 2; +} + + +int ScriptApiSecurity::sl_io_input(lua_State *L) +{ + if (lua_isstring(L, 1)) { + const char *path = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path); + } + + push_original(L, "io", "input"); + lua_pushvalue(L, 1); + lua_call(L, 1, 1); + return 1; +} + + +int ScriptApiSecurity::sl_io_output(lua_State *L) +{ + if (lua_isstring(L, 1)) { + const char *path = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path); + } + + push_original(L, "io", "output"); + lua_pushvalue(L, 1); + lua_call(L, 1, 1); + return 1; +} + + +int ScriptApiSecurity::sl_io_lines(lua_State *L) +{ + if (lua_isstring(L, 1)) { + const char *path = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path); + } + + push_original(L, "io", "lines"); + lua_pushvalue(L, 1); + int top_precall = lua_gettop(L); + lua_call(L, 1, LUA_MULTRET); + // Return number of arguments returned by the function, + // adjusting for the function being poped. + return lua_gettop(L) - (top_precall - 1); +} + + +int ScriptApiSecurity::sl_os_rename(lua_State *L) +{ + luaL_checktype(L, 1, LUA_TSTRING); + const char *path1 = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path1); + + luaL_checktype(L, 2, LUA_TSTRING); + const char *path2 = lua_tostring(L, 2); + CHECK_SECURE_PATH(L, path2); + + push_original(L, "os", "rename"); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_call(L, 2, 2); + return 2; +} + + +int ScriptApiSecurity::sl_os_remove(lua_State *L) +{ + luaL_checktype(L, 1, LUA_TSTRING); + const char *path = lua_tostring(L, 1); + CHECK_SECURE_PATH(L, path); + + push_original(L, "os", "remove"); + lua_pushvalue(L, 1); + lua_call(L, 1, 2); + return 2; +} + diff --git a/src/script/cpp_api/s_security.h b/src/script/cpp_api/s_security.h new file mode 100644 index 000000000..4a4389cf5 --- /dev/null +++ b/src/script/cpp_api/s_security.h @@ -0,0 +1,70 @@ +/* +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. +*/ + +#ifndef S_SECURITY_H +#define S_SECURITY_H + +#include "cpp_api/s_base.h" + + +#define CHECK_SECURE_PATH(L, path) \ + if (!ScriptApiSecurity::checkPath(L, path)) { \ + lua_pushstring(L, (std::string("Attempt to access external file ") + \ + path + " with mod security on.").c_str()); \ + lua_error(L); \ + } +#define CHECK_SECURE_PATH_OPTIONAL(L, path) \ + if (ScriptApiSecurity::isSecure(L)) { \ + CHECK_SECURE_PATH(L, path); \ + } + + +class ScriptApiSecurity : virtual public ScriptApiBase +{ +public: + // Sets up security on the ScriptApi's Lua state + void initializeSecurity(); + // Checks if the Lua state has been secured + static bool isSecure(lua_State *L); + // Loads a file as Lua code safely (doesn't allow bytecode). + static bool safeLoadFile(lua_State *L, const char *path); + // Checks if mods are allowed to read and write to the path + static bool checkPath(lua_State *L, const char *path); + +private: + // Syntax: "sl_" '_' + // (sl stands for Secure Lua) + + static int sl_g_dofile(lua_State *L); + static int sl_g_load(lua_State *L); + static int sl_g_loadfile(lua_State *L); + static int sl_g_loadstring(lua_State *L); + static int sl_g_require(lua_State *L); + + static int sl_io_open(lua_State *L); + static int sl_io_input(lua_State *L); + static int sl_io_output(lua_State *L); + static int sl_io_lines(lua_State *L); + + static int sl_os_rename(lua_State *L); + static int sl_os_remove(lua_State *L); +}; + +#endif + diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index d94f902c4..dc3644e1c 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_vmanip.h" #include "common/c_converter.h" #include "common/c_content.h" +#include "cpp_api/s_security.h" #include "util/serialize.h" #include "server.h" #include "environment.h" @@ -1031,6 +1032,10 @@ int ModApiMapgen::l_generate_decorations(lua_State *L) int ModApiMapgen::l_create_schematic(lua_State *L) { INodeDefManager *ndef = getServer(L)->getNodeDefManager(); + + const char *filename = luaL_checkstring(L, 4); + CHECK_SECURE_PATH_OPTIONAL(L, filename); + Map *map = &(getEnv(L)->getMap()); Schematic schem; @@ -1069,8 +1074,6 @@ int ModApiMapgen::l_create_schematic(lua_State *L) } } - const char *filename = luaL_checkstring(L, 4); - if (!schem.getSchematicFromMap(map, p1, p2)) { errorstream << "create_schematic: failed to get schematic " "from map" << std::endl; diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 99e73b03e..0d8926317 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_internal.h" #include "common/c_converter.h" #include "common/c_content.h" +#include "cpp_api/s_base.h" #include "server.h" #include "environment.h" #include "player.h" @@ -342,7 +343,7 @@ int ModApiServer::l_show_formspec(lua_State *L) int ModApiServer::l_get_current_modname(lua_State *L) { NO_MAP_LOCK_REQUIRED; - lua_getfield(L, LUA_REGISTRYINDEX, "current_modname"); + lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); return 1; } diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp index 9c88a3e05..35b82b435 100644 --- a/src/script/lua_api/l_settings.cpp +++ b/src/script/lua_api/l_settings.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_settings.h" #include "lua_api/l_internal.h" +#include "cpp_api/s_security.h" #include "settings.h" #include "log.h" @@ -188,6 +189,7 @@ int LuaSettings::create_object(lua_State* L) { NO_MAP_LOCK_REQUIRED; const char* filename = luaL_checkstring(L, 1); + CHECK_SECURE_PATH_OPTIONAL(L, filename); LuaSettings* o = new LuaSettings(filename); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 283cca01f..151d449d5 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -92,12 +92,19 @@ int ModApiUtil::l_log(lua_State *L) return 0; } +#define CHECK_SECURE_SETTING(L, name) \ + if (name.compare(0, 7, "secure.") == 0) {\ + lua_pushliteral(L, "Attempt to set secure setting.");\ + lua_error(L);\ + } + // setting_set(name, value) int ModApiUtil::l_setting_set(lua_State *L) { NO_MAP_LOCK_REQUIRED; - const char *name = luaL_checkstring(L, 1); - const char *value = luaL_checkstring(L, 2); + std::string name = luaL_checkstring(L, 1); + std::string value = luaL_checkstring(L, 2); + CHECK_SECURE_SETTING(L, name); g_settings->set(name, value); return 0; } @@ -120,8 +127,9 @@ int ModApiUtil::l_setting_get(lua_State *L) int ModApiUtil::l_setting_setbool(lua_State *L) { NO_MAP_LOCK_REQUIRED; - const char *name = luaL_checkstring(L, 1); + std::string name = luaL_checkstring(L, 1); bool value = lua_toboolean(L, 2); + CHECK_SECURE_SETTING(L, name); g_settings->setBool(name, value); return 0; } diff --git a/src/script/scripting_game.cpp b/src/script/scripting_game.cpp index 5bcd2a33d..9321c38a9 100644 --- a/src/script/scripting_game.cpp +++ b/src/script/scripting_game.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "scripting_game.h" #include "server.h" #include "log.h" +#include "settings.h" #include "cpp_api/s_internal.h" #include "lua_api/l_base.h" #include "lua_api/l_craft.h" @@ -49,10 +50,12 @@ GameScripting::GameScripting(Server* server) // setEnv(env) is called by ScriptApiEnv::initializeEnvironment() // once the environment has been created - //TODO add security - SCRIPTAPI_PRECHECKHEADER + if (g_settings->getBool("secure.enable_security")) { + initializeSecurity(); + } + lua_getglobal(L, "core"); int top = lua_gettop(L); diff --git a/src/script/scripting_game.h b/src/script/scripting_game.h index 14dbd9170..16d5dcb37 100644 --- a/src/script/scripting_game.h +++ b/src/script/scripting_game.h @@ -27,19 +27,21 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_node.h" #include "cpp_api/s_player.h" #include "cpp_api/s_server.h" +#include "cpp_api/s_security.h" /*****************************************************************************/ /* Scripting <-> Game Interface */ /*****************************************************************************/ -class GameScripting - : virtual public ScriptApiBase, - public ScriptApiDetached, - public ScriptApiEntity, - public ScriptApiEnv, - public ScriptApiNode, - public ScriptApiPlayer, - public ScriptApiServer +class GameScripting : + virtual public ScriptApiBase, + public ScriptApiDetached, + public ScriptApiEntity, + public ScriptApiEnv, + public ScriptApiNode, + public ScriptApiPlayer, + public ScriptApiServer, + public ScriptApiSecurity { public: GameScripting(Server* server); diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp index 54b3133c5..c74c18edc 100644 --- a/src/script/scripting_mainmenu.cpp +++ b/src/script/scripting_mainmenu.cpp @@ -38,8 +38,6 @@ MainMenuScripting::MainMenuScripting(GUIEngine* guiengine) { setGuiEngine(guiengine); - //TODO add security - SCRIPTAPI_PRECHECKHEADER lua_getglobal(L, "core"); diff --git a/src/server.cpp b/src/server.cpp index f032da406..778a93241 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -295,31 +295,37 @@ Server::Server( m_script = new GameScripting(this); - std::string scriptpath = getBuiltinLuaPath() + DIR_DELIM "init.lua"; + std::string script_path = getBuiltinLuaPath() + DIR_DELIM "init.lua"; - if (!m_script->loadScript(scriptpath)) - throw ModError("Failed to load and run " + scriptpath); - - // Print 'em - infostream<<"Server: Loading mods: "; - for(std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++){ - const ModSpec &mod = *i; - infostream<loadMod(script_path, BUILTIN_MOD_NAME)) { + throw ModError("Failed to load and run " + script_path); } - infostream<::iterator i = m_mods.begin(); i != m_mods.end(); i++){ const ModSpec &mod = *i; - std::string scriptpath = mod.path + DIR_DELIM + "init.lua"; - infostream<<" ["<loadMod(scriptpath, mod.name); - if(!success){ - errorstream<<"Server: Failed to load and run " - <::iterator i = m_mods.begin(); + i != m_mods.end(); i++) { + const ModSpec &mod = *i; + if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) { + errorstream << "Error loading mod \"" << mod.name + << "\": mod_name does not follow naming conventions: " + << "Only chararacters [a-z0-9_] are allowed." << std::endl; + throw ModError("Mod \"" + mod.name + "\" does not follow naming conventions."); + } + std::string script_path = mod.path + DIR_DELIM "init.lua"; + infostream << " [" << padStringRight(mod.name, 12) << "] [\"" + << script_path << "\"]" << std::endl; + if (!m_script->loadMod(script_path, mod.name)) { + errorstream << "Server: Failed to load and run " + << script_path << std::endl; + throw ModError("Failed to load and run " + script_path); } } @@ -3206,9 +3212,9 @@ IWritableCraftDefManager* Server::getWritableCraftDefManager() return m_craftdef; } -const ModSpec* Server::getModSpec(const std::string &modname) +const ModSpec* Server::getModSpec(const std::string &modname) const { - for(std::vector::iterator i = m_mods.begin(); + for(std::vector::const_iterator i = m_mods.begin(); i != m_mods.end(); i++){ const ModSpec &mod = *i; if(mod.name == modname) diff --git a/src/server.h b/src/server.h index f53e23a3a..2030d6669 100644 --- a/src/server.h +++ b/src/server.h @@ -322,10 +322,10 @@ public: IWritableNodeDefManager* getWritableNodeDefManager(); IWritableCraftDefManager* getWritableCraftDefManager(); - const ModSpec* getModSpec(const std::string &modname); + const ModSpec* getModSpec(const std::string &modname) const; void getModNames(std::vector &modlist); std::string getBuiltinLuaPath(); - inline std::string getWorldPath() + inline std::string getWorldPath() const { return m_path_world; } inline bool isSingleplayer() diff --git a/src/settings.cpp b/src/settings.cpp index 9adcd1587..e95bd436d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -68,10 +68,11 @@ Settings & Settings::operator = (const Settings &other) bool Settings::checkNameValid(const std::string &name) { - size_t pos = name.find_first_of("\t\n\v\f\r\b =\"{}#"); - if (pos != std::string::npos) { - errorstream << "Invalid character '" << name[pos] - << "' found in setting name" << std::endl; + bool valid = name.find_first_of("=\"{}#") == std::string::npos; + if (valid) valid = trim(name) == name; + if (!valid) { + errorstream << "Invalid setting name \"" << name << "\"" + << std::endl; return false; } return true; @@ -83,7 +84,7 @@ bool Settings::checkValueValid(const std::string &value) if (value.substr(0, 3) == "\"\"\"" || value.find("\n\"\"\"") != std::string::npos) { errorstream << "Invalid character sequence '\"\"\"' found in" - " setting value" << std::endl; + " setting value!" << std::endl; return false; } return true; @@ -92,9 +93,9 @@ bool Settings::checkValueValid(const std::string &value) std::string Settings::sanitizeName(const std::string &name) { - std::string n(name); + std::string n = trim(name); - for (const char *s = "\t\n\v\f\r\b =\"{}#"; *s; s++) + for (const char *s = "=\"{}#"; *s; s++) n.erase(std::remove(n.begin(), n.end(), *s), n.end()); return n; From 05ab9973f9029676dfa252617c8cb698ab13eb24 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Tue, 9 Sep 2014 15:17:01 -0400 Subject: [PATCH 059/670] Add core.mkdir --- doc/lua_api.txt | 61 +++++++++++++++++------------------ src/script/lua_api/l_util.cpp | 16 +++++++++ src/script/lua_api/l_util.h | 5 ++- 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 2421af069..c82208286 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1674,36 +1674,36 @@ Helper functions * Useful for storing custom data * `minetest.is_singleplayer()` * `minetest.features` - * table containing API feature flags: `{foo=true, bar=true}` + * Table containing API feature flags: `{foo=true, bar=true}` * `minetest.has_feature(arg)`: returns `boolean, missing_features` * `arg`: string or table in format `{foo=true, bar=true}` * `missing_features`: `{foo=true, bar=true}` -* `minetest.get_player_information(playername)` - * table containing information about player peer. - -Example of `minetest.get_player_information` return value: - - { - address = "127.0.0.1", -- IP address of client - ip_version = 4, -- IPv4 / IPv6 - 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 - - -- following information is available on debug build only!!! - -- DO NOT USE IN MODS - --ser_vers = 26, -- serialization version used by client - --prot_vers = 23, -- protocol version used by client - --major = 0, -- major version number - --minor = 4, -- minor version number - --patch = 10, -- patch version number - --vers_string = "0.4.9-git", -- full version string - --state = "Active" -- current client state - } +* `minetest.get_player_information(player_name)`: returns a table containing + information about player. Example return value: + { + address = "127.0.0.1", -- IP address of client + ip_version = 4, -- IPv4 / IPv6 + 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 + + -- following information is available on debug build only!!! + -- DO NOT USE IN MODS + --ser_vers = 26, -- serialization version used by client + --prot_vers = 23, -- protocol version used by client + --major = 0, -- major version number + --minor = 4, -- minor version number + --patch = 10, -- patch version number + --vers_string = "0.4.9-git", -- full version string + --state = "Active" -- current client state + } +* `minetest.mkdir(path)`: returns success. + * Creates a directory specified by `path`, creating parent directories + if they don't exist. ### Logging * `minetest.debug(line)` @@ -2282,11 +2282,8 @@ These functions return the leftover itemstack. the floor or ceiling * The first four options are mutually-exclusive; the last in the list takes precedence over the first. - - - * `minetest.rotate_node(itemstack, placer, pointed_thing)` - * calls `rotate_and_place()` with infinitestacks set according to the state of + * calls `rotate_and_place()` with infinitestacks set according to the state of the creative mode setting, and checks for "sneak" to set the `invert_wall` parameter. @@ -2306,7 +2303,7 @@ minetest.global_exists(name) * Any function in the minetest namespace can be called using the syntax `minetest.env:somefunction(somearguments)` instead of `minetest.somefunction(somearguments)` - * Deprecated, but support is not to be dropped soon + * Deprecated, but support is not to be dropped soon ### Global tables * `minetest.registered_items` diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 151d449d5..e16b6feab 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_async.h" #include "serialization.h" #include "json/json.h" +#include "cpp_api/s_security.h" #include "debug.h" #include "porting.h" #include "log.h" @@ -327,6 +328,17 @@ int ModApiUtil::l_decompress(lua_State *L) return 1; } +// mkdir(path) +int ModApiUtil::l_mkdir(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + const char *path = luaL_checkstring(L, 1); + CHECK_SECURE_PATH_OPTIONAL(L, path); + lua_pushboolean(L, fs::CreateAllDirs(path)); + return 1; +} + + void ModApiUtil::Initialize(lua_State *L, int top) { API_FCT(debug); @@ -352,6 +364,8 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(compress); API_FCT(decompress); + + API_FCT(mkdir); } void ModApiUtil::InitializeAsync(AsyncEngine& engine) @@ -374,5 +388,7 @@ void ModApiUtil::InitializeAsync(AsyncEngine& engine) ASYNC_API_FCT(compress); ASYNC_API_FCT(decompress); + + ASYNC_API_FCT(mkdir); } diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index e82432381..bf7cd71d3 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -78,7 +78,7 @@ private: // is_yes(arg) static int l_is_yes(lua_State *L); - // get_scriptdir() + // get_builtin_path() static int l_get_builtin_path(lua_State *L); // compress(data, method, ...) @@ -87,6 +87,9 @@ private: // decompress(data, method, ...) static int l_decompress(lua_State *L); + // mkdir(path) + static int l_mkdir(lua_State *L); + public: static void Initialize(lua_State *L, int top); From 6c06330daf04ed1c390131755b64338ca7d79a7e Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Tue, 9 Sep 2014 21:52:07 -0400 Subject: [PATCH 060/670] Add core.request_insecure_environment() --- doc/lua_api.txt | 13 ++++++++++--- minetest.conf.example | 3 +++ src/defaultsettings.cpp | 1 + src/script/lua_api/l_util.cpp | 29 ++++++++++++++++++++++++++++- src/script/lua_api/l_util.h | 4 ++++ 5 files changed, 46 insertions(+), 4 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index c82208286..0e1dc487f 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2290,13 +2290,20 @@ These functions return the leftover itemstack. * `minetest.forceload_block(pos)` * forceloads the position `pos`. * returns `true` if area could be forceloaded + * Please note that forceloaded areas are saved when the server restarts. * `minetest.forceload_free_block(pos)` * stops forceloading the position `pos` -Please note that forceloaded areas are saved when the server restarts. -minetest.global_exists(name) -^ Checks if a global variable has been set, without triggering a warning. +* `minetest.request_insecure_environment()`: returns an environment containing + insecure functions if the calling mod has been listed as trusted in the + `secure.trusted_mods` setting or security is disabled, otherwise returns `nil`. + * Only works at init time. + * **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED ENVIRONMENT, STORE IT IN + A LOCAL VARIABLE!** + +* `minetest.global_exists(name)` + * Checks if a global variable has been set, without triggering a warning. ### Global objects * `minetest.env`: `EnvRef` of the server environment and world. diff --git a/minetest.conf.example b/minetest.conf.example index 6474289bd..392bd55bb 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -571,4 +571,7 @@ # Prevent mods from doing insecure things like running shell commands. #secure.enable_security = false +# Comma-separated list of trusted mods that are allowed to access insecure +# functions even when mod security is on (via request_insecure_environment()). +#secure.trusted_mods = diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index f26b4c8ad..af1aa4140 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -273,6 +273,7 @@ void set_default_settings(Settings *settings) settings->setDefault("emergequeue_limit_generate", "32"); settings->setDefault("num_emerge_threads", "1"); settings->setDefault("secure.enable_security", "false"); + settings->setDefault("secure.trusted_mods", ""); // physics stuff settings->setDefault("movement_acceleration_default", "3"); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index e16b6feab..2bcc114e2 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "settings.h" #include "util/auth.h" +#include // debug(...) // Writes a line to dstream @@ -316,7 +317,7 @@ int ModApiUtil::l_compress(lua_State *L) int ModApiUtil::l_decompress(lua_State *L) { size_t size; - const char * data = luaL_checklstring(L, 1, &size); + const char *data = luaL_checklstring(L, 1, &size); std::istringstream is(std::string(data, size)); std::ostringstream os; @@ -339,6 +340,30 @@ int ModApiUtil::l_mkdir(lua_State *L) } +int ModApiUtil::l_request_insecure_environment(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + if (!ScriptApiSecurity::isSecure(L)) { + lua_getglobal(L, "_G"); + return 1; + } + lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + if (!lua_isstring(L, -1)) { + lua_pushnil(L); + return 1; + } + const char *mod_name = lua_tostring(L, -1); + std::string trusted_mods = g_settings->get("secure.trusted_mods"); + std::vector mod_list = str_split(trusted_mods, ','); + if (std::find(mod_list.begin(), mod_list.end(), mod_name) == mod_list.end()) { + lua_pushnil(L); + return 1; + } + lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + return 1; +} + + void ModApiUtil::Initialize(lua_State *L, int top) { API_FCT(debug); @@ -366,6 +391,8 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(decompress); API_FCT(mkdir); + + API_FCT(request_insecure_environment); } void ModApiUtil::InitializeAsync(AsyncEngine& engine) diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index bf7cd71d3..336173664 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -90,6 +90,9 @@ private: // mkdir(path) static int l_mkdir(lua_State *L); + // request_insecure_environment() + static int l_request_insecure_environment(lua_State *L); + public: static void Initialize(lua_State *L, int top); @@ -98,3 +101,4 @@ public: }; #endif /* L_UTIL_H_ */ + From 8f9af57314f71aae1cc77e13f9996e13015d776d Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Mon, 4 May 2015 14:59:13 -0400 Subject: [PATCH 061/670] Add core.get_dir_list --- builtin/mainmenu/modmgr.lua | 4 ++-- builtin/mainmenu/tab_texturepacks.lua | 4 ++-- doc/lua_api.txt | 5 +++++ doc/menu_lua_api.txt | 8 ++------ src/script/lua_api/l_mainmenu.cpp | 26 -------------------------- src/script/lua_api/l_util.cpp | 25 +++++++++++++++++++++++++ src/script/lua_api/l_util.h | 3 +++ 7 files changed, 39 insertions(+), 36 deletions(-) diff --git a/builtin/mainmenu/modmgr.lua b/builtin/mainmenu/modmgr.lua index f6b9b4814..89292ed52 100644 --- a/builtin/mainmenu/modmgr.lua +++ b/builtin/mainmenu/modmgr.lua @@ -17,7 +17,7 @@ -------------------------------------------------------------------------------- function get_mods(path,retval,modpack) - local mods = core.get_dirlist(path, true) + local mods = core.get_dir_list(path, true) for i=1, #mods, 1 do if mods[i]:sub(1,1) ~= "." then @@ -94,7 +94,7 @@ function modmgr.getbasefolder(temppath) } end - local subdirs = core.get_dirlist(temppath,true) + local subdirs = core.get_dir_list(temppath, true) --only single mod or modpack allowed if #subdirs ~= 1 then diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index d32c073ab..9417b94e0 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -50,7 +50,7 @@ local function get_formspec(tabview, name, tabdata) "textlist[4,0.25;7.5,5.0;TPs;" local current_texture_path = core.setting_get("texture_path") - local list = filter_texture_pack_list(core.get_dirlist(core.get_texturepath(), true)) + local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true)) local index = tonumber(core.setting_get("mainmenu_last_selected_TP")) if index == nil then index = 1 end @@ -94,7 +94,7 @@ local function main_button_handler(tabview, fields, name, tabdata) local index = core.get_textlist_index("TPs") core.setting_set("mainmenu_last_selected_TP", index) - local list = filter_texture_pack_list(core.get_dirlist(core.get_texturepath(), true)) + local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true)) local current_index = core.get_textlist_index("TPs") if current_index ~= nil and #list >= current_index then local new_path = core.get_texturepath()..DIR_DELIM..list[current_index] diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 0e1dc487f..e1ee42b94 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1704,6 +1704,11 @@ Helper functions * `minetest.mkdir(path)`: returns success. * Creates a directory specified by `path`, creating parent directories if they don't exist. +* `minetest.get_dir_list(path, [is_dir])`: returns list of entry names + * is_dir is one of: + * nil: return all entries, + * true: return only subdirectory names, or + * false: return only file names. ### Logging * `minetest.debug(line)` diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index e5ba46d4c..76c329de6 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -31,8 +31,8 @@ core.start() core.close() Filesystem: -core.get_scriptdir() -^ returns directory of script +core.get_builtin_path() +^ returns path to builtin root core.get_modpath() (possible in async calls) ^ returns path to global modpath core.get_modstore_details(modid) (possible in async calls) @@ -59,10 +59,6 @@ core.get_gamepath() (possible in async calls) ^ returns path to global gamepath core.get_texturepath() (possible in async calls) ^ returns path to default textures -core.get_dirlist(path,onlydirs) (possible in async calls) -^ path to get subdirs from -^ onlydirs should result contain only dirs? -^ returns list of folders within path core.create_dir(absolute_path) (possible in async calls) ^ absolute_path to directory to create (needs to be absolute) ^ returns true/false diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index b068040db..52410f74f 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -753,30 +753,6 @@ int ModApiMainMenu::l_get_texturepath_share(lua_State *L) return 1; } -/******************************************************************************/ -int ModApiMainMenu::l_get_dirlist(lua_State *L) -{ - const char *path = luaL_checkstring(L, 1); - bool dironly = lua_toboolean(L, 2); - - std::vector dirlist = fs::GetDirListing(path); - - unsigned int index = 1; - lua_newtable(L); - int table = lua_gettop(L); - - for (unsigned int i=0;i< dirlist.size(); i++) { - if ((dirlist[i].dir) || (dironly == false)) { - lua_pushnumber(L,index); - lua_pushstring(L,dirlist[i].name.c_str()); - lua_settable(L, table); - index++; - } - } - - return 1; -} - /******************************************************************************/ int ModApiMainMenu::l_create_dir(lua_State *L) { const char *path = luaL_checkstring(L, 1); @@ -1170,7 +1146,6 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(get_gamepath); API_FCT(get_texturepath); API_FCT(get_texturepath_share); - API_FCT(get_dirlist); API_FCT(create_dir); API_FCT(delete_dir); API_FCT(copy_dir); @@ -1204,7 +1179,6 @@ void ModApiMainMenu::InitializeAsync(AsyncEngine& engine) ASYNC_API_FCT(get_gamepath); ASYNC_API_FCT(get_texturepath); ASYNC_API_FCT(get_texturepath_share); - ASYNC_API_FCT(get_dirlist); ASYNC_API_FCT(create_dir); ASYNC_API_FCT(delete_dir); ASYNC_API_FCT(copy_dir); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 2bcc114e2..d97db2367 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -339,6 +339,29 @@ int ModApiUtil::l_mkdir(lua_State *L) return 1; } +// get_dir_list(path, is_dir) +int ModApiUtil::l_get_dir_list(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + const char *path = luaL_checkstring(L, 1); + short is_dir = lua_isboolean(L, 2) ? lua_toboolean(L, 2) : -1; + + CHECK_SECURE_PATH_OPTIONAL(L, path); + + std::vector list = fs::GetDirListing(path); + + int index = 0; + lua_newtable(L); + + for (size_t i = 0; i < list.size(); i++) { + if (is_dir == -1 || is_dir == list[i].dir) { + lua_pushstring(L, list[i].name.c_str()); + lua_rawseti(L, -2, ++index); + } + } + + return 1; +} int ModApiUtil::l_request_insecure_environment(lua_State *L) { @@ -391,6 +414,7 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(decompress); API_FCT(mkdir); + API_FCT(get_dir_list); API_FCT(request_insecure_environment); } @@ -417,5 +441,6 @@ void ModApiUtil::InitializeAsync(AsyncEngine& engine) ASYNC_API_FCT(decompress); ASYNC_API_FCT(mkdir); + ASYNC_API_FCT(get_dir_list); } diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index 336173664..e75aa28cb 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -90,6 +90,9 @@ private: // mkdir(path) static int l_mkdir(lua_State *L); + // get_dir_list(path, is_dir) + static int l_get_dir_list(lua_State *L); + // request_insecure_environment() static int l_request_insecure_environment(lua_State *L); From fb36c471d7c35bafec9c70028fbabf4ea4838ad2 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 16 May 2015 12:26:57 -0400 Subject: [PATCH 062/670] SAPI: Accept either ARGB8 table or ColorString to specify colors --- doc/lua_api.txt | 18 +++++++-- src/script/common/c_content.cpp | 20 ++++------ src/script/common/c_converter.cpp | 65 ++++++++++++++++++++----------- src/script/common/c_converter.h | 15 ++++--- src/script/lua_api/l_object.cpp | 13 ++++--- 5 files changed, 77 insertions(+), 54 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index e1ee42b94..9249703f6 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1607,6 +1607,16 @@ To specify the value of the alpha channel, append `#AA` to the end of the color (e.g. `colorname#08`). For named colors the hexadecimal string representing the alpha value must (always) be two hexadecimal digits. +`ColorSpec` +----------- +A ColorSpec specifies a 32-bit color. It can be written in either: +table form, each element ranging from 0..255 (a, if absent, defaults to 255): + `colorspec = {a=255, r=0, g=255, b=0}` +numerical form, the raw integer value of an ARGB8 quad: + `colorspec = 0xFF00FF00` +or string form, a ColorString (defined above): + `colorspec = "green"` + Vector helpers -------------- @@ -2481,7 +2491,7 @@ This is basically a reference to a C++ `ServerActiveObject` * `name`: `"breath"` or `"health"` * `hud_definition`: definition to replace builtin definition * `set_sky(bgcolor, type, {texture names})` - * `bgcolor`: `{r=0...255, g=0...255, b=0...255}` or `nil`, defaults to white + * `bgcolor`: ColorSpec, defaults to white * Available types: * `"regular"`: Uses 0 textures, `bgcolor` ignored * `"skybox"`: Uses 6 textures, `bgcolor` used @@ -2507,13 +2517,13 @@ This is basically a reference to a C++ `ServerActiveObject` * `get_nametag_attributes()` * returns a table with the attributes of the nametag of the player * { - color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } + color = {a=0..255, r=0..255, g=0..255, b=0..255}, } * `set_nametag_attributes(attributes)` * sets the attributes of the nametag of the player * `attributes`: { - color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } + color = ColorSpec, } ### `InvRef` @@ -3023,7 +3033,7 @@ Definition tables ^ List can be shortened to needed length ]] alpha = 255, use_texture_alpha = false, -- Use texture's alpha channel - post_effect_color = {a=0, r=0, g=0, b=0}, -- If player is inside node + post_effect_color = "green#0F", -- If player is inside node, see "ColorSpec" paramtype = "none", -- See "Nodes" --[[ ^ paramtype = "light" allows light to propagate from or through the node with light value ^ falling by 1 per node. This line is essential for a light source node to spread its light. ]] diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 8f82b692a..c0728177f 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -162,18 +162,13 @@ void read_object_properties(lua_State *L, int index, lua_pop(L, 1); lua_getfield(L, -1, "colors"); - if(lua_istable(L, -1)){ - prop->colors.clear(); + if (lua_istable(L, -1)) { int table = lua_gettop(L); - lua_pushnil(L); - while(lua_next(L, table) != 0){ - // key at index -2 and value at index -1 - if(lua_isstring(L, -1)) - prop->colors.push_back(readARGB8(L, -1)); - else - prop->colors.push_back(video::SColor(255, 255, 255, 255)); - // removes value, keeps key for next iteration - lua_pop(L, 1); + prop->colors.clear(); + for (lua_pushnil(L); lua_next(L, table); lua_pop(L, 1)) { + video::SColor color(255, 255, 255, 255); + read_color(L, -1, &color); + prop->colors.push_back(color); } } lua_pop(L, 1); @@ -357,8 +352,7 @@ ContentFeatures read_content_features(lua_State *L, int index) /* Other stuff */ lua_getfield(L, index, "post_effect_color"); - if(!lua_isnil(L, -1)) - f.post_effect_color = readARGB8(L, -1); + read_color(L, -1, &f.post_effect_color); lua_pop(L, 1); f.param_type = (ContentParamType)getenumfield(L, index, "paramtype", diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 9d6829815..6fb6f623a 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -23,35 +23,23 @@ extern "C" { } #include "util/numeric.h" +#include "util/string.h" #include "common/c_converter.h" #include "constants.h" #define CHECK_TYPE(index, name, type) do { \ - int t = lua_type(L, (index)); \ - if (t != (type)) { \ - throw LuaError(std::string("Invalid ") + (name) + \ - " (expected " + lua_typename(L, (type)) + \ - " got " + lua_typename(L, t) + ")."); \ - } \ -} while(0) + int t = lua_type(L, (index)); \ + if (t != (type)) { \ + throw LuaError(std::string("Invalid ") + (name) + \ + " (expected " + lua_typename(L, (type)) + \ + " got " + lua_typename(L, t) + ")."); \ + } \ + } while(0) #define CHECK_POS_COORD(name) CHECK_TYPE(-1, "position coordinate '" name "'", LUA_TNUMBER) #define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE) -void push_ARGB8(lua_State *L, video::SColor color) -{ - lua_newtable(L); - lua_pushnumber(L, color.getAlpha()); - lua_setfield(L, -2, "a"); - lua_pushnumber(L, color.getRed()); - lua_setfield(L, -2, "r"); - lua_pushnumber(L, color.getGreen()); - lua_setfield(L, -2, "g"); - lua_pushnumber(L, color.getBlue()); - lua_setfield(L, -2, "b"); -} - void push_v3f(lua_State *L, v3f p) { lua_newtable(L); @@ -176,6 +164,19 @@ v3f check_v3f(lua_State *L, int index) return pos; } +void push_ARGB8(lua_State *L, video::SColor color) +{ + lua_newtable(L); + lua_pushnumber(L, color.getAlpha()); + lua_setfield(L, -2, "a"); + lua_pushnumber(L, color.getRed()); + lua_setfield(L, -2, "r"); + lua_pushnumber(L, color.getGreen()); + lua_setfield(L, -2, "g"); + lua_pushnumber(L, color.getBlue()); + lua_setfield(L, -2, "b"); +} + void pushFloatPos(lua_State *L, v3f p) { p /= BS; @@ -212,13 +213,31 @@ v3s16 check_v3s16(lua_State *L, int index) return floatToInt(pf, 1.0); } -video::SColor readARGB8(lua_State *L, int index) +bool read_color(lua_State *L, int index, video::SColor *color) +{ + if (lua_istable(L, index)) { + *color = read_ARGB8(L, index); + } else if (lua_isnumber(L, index)) { + color->set(lua_tonumber(L, index)); + } else if (lua_isstring(L, index)) { + video::SColor parsed_color; + if (!parseColorString(lua_tostring(L, index), parsed_color, true)) + return false; + + *color = parsed_color; + } else { + return false; + } + + return true; +} + +video::SColor read_ARGB8(lua_State *L, int index) { video::SColor color(0); CHECK_TYPE(index, "ARGB color", LUA_TTABLE); lua_getfield(L, index, "a"); - if(lua_isnumber(L, -1)) - color.setAlpha(lua_tonumber(L, -1)); + color.setAlpha(lua_isnumber(L, -1) ? lua_tonumber(L, -1) : 0xFF); lua_pop(L, 1); lua_getfield(L, index, "r"); color.setRed(lua_tonumber(L, -1)); diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index ff1fcaadf..e99826404 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -76,7 +76,6 @@ void setfloatfield(lua_State *L, int table, void setboolfield(lua_State *L, int table, const char *fieldname, bool value); - v3f checkFloatPos (lua_State *L, int index); v2f check_v2f (lua_State *L, int index); v2s16 check_v2s16 (lua_State *L, int index); @@ -87,7 +86,10 @@ v3f read_v3f (lua_State *L, int index); v2f read_v2f (lua_State *L, int index); v2s16 read_v2s16 (lua_State *L, int index); v2s32 read_v2s32 (lua_State *L, int index); -video::SColor readARGB8 (lua_State *L, int index); +video::SColor read_ARGB8 (lua_State *L, int index); +bool read_color (lua_State *L, int index, + video::SColor *color); + aabb3f read_aabb3f (lua_State *L, int index, f32 scale); v3s16 read_v3s16 (lua_State *L, int index); std::vector read_aabb3f_vector (lua_State *L, int index, f32 scale); @@ -100,11 +102,8 @@ void pushFloatPos (lua_State *L, v3f p); void push_v3f (lua_State *L, v3f p); void push_v2f (lua_State *L, v2f p); - - -void warn_if_field_exists (lua_State *L, - int table, - const char *fieldname, - const std::string &message); +void warn_if_field_exists(lua_State *L, int table, + const char *fieldname, + const std::string &message); #endif /* C_CONVERTER_H_ */ diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 74903df5f..c83c8c747 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1222,8 +1222,7 @@ int ObjectRef::l_set_sky(lua_State *L) return 0; video::SColor bgcolor(255,255,255,255); - if (!lua_isnil(L, 2)) - bgcolor = readARGB8(L, 2); + read_color(L, 2, &bgcolor); std::string type = luaL_checkstring(L, 3); @@ -1283,11 +1282,13 @@ int ObjectRef::l_set_nametag_attributes(lua_State *L) if (playersao == NULL) return 0; - video::SColor color = playersao->getNametagColor(); lua_getfield(L, 2, "color"); - if (!lua_isnil(L, -1)) - color = readARGB8(L, -1); - playersao->setNametagColor(color); + if (!lua_isnil(L, -1)) { + video::SColor color = playersao->getNametagColor(); + if (!read_color(L, -1, &color)) + return 0; + playersao->setNametagColor(color); + } lua_pushboolean(L, true); return 1; From 11a96e4901ce54c4646e47866f7a66cd9034c16b Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 16 May 2015 19:59:53 -0400 Subject: [PATCH 063/670] Add -Wsign-compare for Clang builds and fix some signed/unsigned compiler warnings --- src/CMakeLists.txt | 1 + src/content_cao.cpp | 40 ++++++++++++++++----------------- src/noise.cpp | 18 +++++++-------- src/unittest/test_schematic.cpp | 2 +- 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c384286d4..89be91413 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -590,6 +590,7 @@ else() if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # clang does not understand __extern_always_inline but libc headers use it set(OTHER_FLAGS "${OTHER_FLAGS} \"-D__extern_always_inline=extern __always_inline\"") + set(OTHER_FLAGS "${OTHER_FLAGS} -Wsign-compare") endif() if(MINGW) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index fe560a41a..bb2fb06a7 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -142,12 +142,12 @@ class TestCAO : public ClientActiveObject public: TestCAO(IGameDef *gamedef, ClientEnvironment *env); virtual ~TestCAO(); - + ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_TEST; } - + static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env); void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, @@ -192,9 +192,9 @@ void TestCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, { if(m_node != NULL) return; - + //video::IVideoDriver* driver = smgr->getVideoDriver(); - + scene::SMesh *mesh = new scene::SMesh(); scene::IMeshBuffer *buf = new scene::SMeshBuffer(); video::SColor c(255,255,255,255); @@ -286,12 +286,12 @@ class ItemCAO : public ClientActiveObject public: ItemCAO(IGameDef *gamedef, ClientEnvironment *env); virtual ~ItemCAO(); - + ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_ITEM; } - + static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env); void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, @@ -308,12 +308,12 @@ public: void processMessage(const std::string &data); void initialize(const std::string &data); - + core::aabbox3d* getSelectionBox() {return &m_selection_box;} v3f getPosition() {return m_position;} - + std::string infoText() {return m_infotext;} @@ -357,9 +357,9 @@ void ItemCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, { if(m_node != NULL) return; - + //video::IVideoDriver* driver = smgr->getVideoDriver(); - + scene::SMesh *mesh = new scene::SMesh(); scene::IMeshBuffer *buf = new scene::SMeshBuffer(); video::SColor c(255,255,255,255); @@ -469,7 +469,7 @@ void ItemCAO::updateTexture() <<": error deSerializing itemstring \"" <getMaterial(0).setTexture(0, texture); } @@ -514,7 +514,7 @@ void ItemCAO::processMessage(const std::string &data) void ItemCAO::initialize(const std::string &data) { infostream<<"ItemCAO: Got init data"<::iterator ci = m_children.begin(); ci != m_children.end(); ci++) @@ -759,7 +759,7 @@ void GenericCAO::removeFromScene(bool permanent) } m_env->m_attachements[getId()] = 0; - + LocalPlayer* player = m_env->getLocalPlayer(); if (this == player->parent) { player->parent = NULL; @@ -898,7 +898,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, m_meshnode = smgr->addMeshSceneNode(mesh, NULL); m_meshnode->grab(); mesh->drop(); - + m_meshnode->setScale(v3f(m_prop.visual_size.X, m_prop.visual_size.Y, m_prop.visual_size.X)); @@ -1014,7 +1014,7 @@ void GenericCAO::updateNodePos() } } } - + void GenericCAO::step(float dtime, ClientEnvironment *env) { // Handel model of local player instantly to prevent lags @@ -1485,7 +1485,7 @@ void GenericCAO::updateBonePosition() } } } - + void GenericCAO::updateAttachments() { @@ -1716,14 +1716,14 @@ void GenericCAO::processMessage(const std::string &data) m_armor_groups[name] = rating; } } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) { - u8 version = readU8(is); // forward compatibility + //u8 version = readU8(is); // forward compatibility m_nametag_color = readARGB8(is); if (m_textnode != NULL) { m_textnode->setTextColor(m_nametag_color); } } } - + /* \pre punchitem != NULL */ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem, diff --git a/src/noise.cpp b/src/noise.cpp index f5d985fff..8c42be3cf 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -590,8 +590,8 @@ void Noise::gradientMap2D( int seed) { float v00, v01, v10, v11, u, v, orig_u; - int index, i, j, x0, y0, noisex, noisey; - int nlx, nly; + u32 index, i, j, x0, y0, noisex, noisey; + u32 nlx, nly; bool eased = np.flags & (NOISE_FLAG_DEFAULTS | NOISE_FLAG_EASED); Interp2dFxn interpolate = eased ? @@ -604,8 +604,8 @@ void Noise::gradientMap2D( orig_u = u; //calculate noise point lattice - nlx = (int)(u + sx * step_x) + 2; - nly = (int)(v + sy * step_y) + 2; + nlx = (u32)(u + sx * step_x) + 2; + nly = (u32)(v + sy * step_y) + 2; index = 0; for (j = 0; j != nly; j++) for (i = 0; i != nlx; i++) @@ -655,8 +655,8 @@ void Noise::gradientMap3D( float v000, v010, v100, v110; float v001, v011, v101, v111; float u, v, w, orig_u, orig_v; - int index, i, j, k, x0, y0, z0, noisex, noisey, noisez; - int nlx, nly, nlz; + u32 index, i, j, k, x0, y0, z0, noisex, noisey, noisez; + u32 nlx, nly, nlz; Interp3dFxn interpolate = (np.flags & NOISE_FLAG_EASED) ? triLinearInterpolation : triLinearInterpolationNoEase; @@ -671,9 +671,9 @@ void Noise::gradientMap3D( orig_v = v; //calculate noise point lattice - nlx = (int)(u + sx * step_x) + 2; - nly = (int)(v + sy * step_y) + 2; - nlz = (int)(w + sz * step_z) + 2; + nlx = (u32)(u + sx * step_x) + 2; + nly = (u32)(v + sy * step_y) + 2; + nlz = (u32)(w + sz * step_z) + 2; index = 0; for (k = 0; k != nlz; k++) for (j = 0; j != nly; j++) diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp index df47d2bc0..480124428 100644 --- a/src/unittest/test_schematic.cpp +++ b/src/unittest/test_schematic.cpp @@ -99,7 +99,7 @@ void TestSchematic::testMtsSerializeDeserialize(INodeDefManager *ndef) UASSERT(schem2.size == size); for (size_t i = 0; i != volume; i++) UASSERT(schem2.schemdata[i] == schem.schemdata[i]); - for (size_t y = 0; y != size.Y; y++) + for (s16 y = 0; y != size.Y; y++) UASSERTEQ(u8, schem2.slice_probs[y], schem.slice_probs[y]); } From c00b6812b116c7e08eaf00c52504aa7b93a936a1 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Sat, 16 May 2015 19:09:53 -0400 Subject: [PATCH 064/670] Fix current mod name change missed during rebase --- src/script/lua_api/l_base.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp index 136fcc507..6ad3e4ba2 100644 --- a/src/script/lua_api/l_base.cpp +++ b/src/script/lua_api/l_base.cpp @@ -49,12 +49,12 @@ GUIEngine *ModApiBase::getGuiEngine(lua_State *L) std::string ModApiBase::getCurrentModPath(lua_State *L) { - lua_getfield(L, LUA_REGISTRYINDEX, "current_modname"); - const char *current_modname = lua_tostring(L, -1); - if (!current_modname) + lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + const char *current_mod_name = lua_tostring(L, -1); + if (!current_mod_name) return "."; - const ModSpec *mod = getServer(L)->getModSpec(current_modname); + const ModSpec *mod = getServer(L)->getModSpec(current_mod_name); if (!mod) return "."; From 28b2476b11875f0f13335a410f1f00c6a3fd81be Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 17 May 2015 00:04:51 -0400 Subject: [PATCH 065/670] Noise: Fix interpolation at negative coordinates --- src/noise.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/noise.cpp b/src/noise.cpp index 8c42be3cf..826593474 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -590,8 +590,9 @@ void Noise::gradientMap2D( int seed) { float v00, v01, v10, v11, u, v, orig_u; - u32 index, i, j, x0, y0, noisex, noisey; + u32 index, i, j, noisex, noisey; u32 nlx, nly; + s32 x0, y0; bool eased = np.flags & (NOISE_FLAG_DEFAULTS | NOISE_FLAG_EASED); Interp2dFxn interpolate = eased ? @@ -655,8 +656,9 @@ void Noise::gradientMap3D( float v000, v010, v100, v110; float v001, v011, v101, v111; float u, v, w, orig_u, orig_v; - u32 index, i, j, k, x0, y0, z0, noisex, noisey, noisez; + u32 index, i, j, k, noisex, noisey, noisez; u32 nlx, nly, nlz; + s32 x0, y0, z0; Interp3dFxn interpolate = (np.flags & NOISE_FLAG_EASED) ? triLinearInterpolation : triLinearInterpolationNoEase; From 3ffb5f5761a83773037869d6f6179353c46a650a Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 17 May 2015 00:07:45 -0400 Subject: [PATCH 066/670] Add optional buffer param for bulk data array writes in Lua --- doc/lua_api.txt | 7 +++++-- src/script/lua_api/l_noise.cpp | 28 +++++++++++++++++++--------- src/script/lua_api/l_vmanip.cpp | 32 +++++++++++++++++++------------- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 9249703f6..b4a5fa1d8 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2647,7 +2647,9 @@ for 2D noise, and it must be must be larger than 1 for 3D noise (otherwise of 3D noise with values starting at `pos={x=,y=,z=}` * `get2dMap_flat(pos)`: returns a flat `` element array of 2D noise with values starting at `pos={x=,y=}` + * if the param `buffer` is present, this table will be used to store the result instead * `get3dMap_flat(pos)`: Same as `get2dMap_flat`, but 3D noise + * if the param `buffer` is present, this table will be used to store the result instead ### `VoxelManip` An interface to the `MapVoxelManipulator` for Lua. @@ -2665,8 +2667,9 @@ The map will be pre-loaded if two positions are passed to either. the `VoxelManip` at that position * `set_node_at(pos, node)`: Sets a specific `MapNode` in the `VoxelManip` at that position -* `get_data()`: Gets the data read into the `VoxelManip` object - * returns raw node data is in the form of an array of node content IDs +* `get_data(buffer)`: Gets the data read into the `VoxelManip` object + * returns raw node data in the form of an array of node content IDs + * if the param `buffer` is present, this table will be used to store the result instead * `set_data(data)`: Sets the data contents of the `VoxelManip` object * `update_map()`: Update map after writing chunk back to map. * To be used only by `VoxelManip` objects created by the mod itself; diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp index 84f8875b8..86ae9dba7 100644 --- a/src/script/lua_api/l_noise.cpp +++ b/src/script/lua_api/l_noise.cpp @@ -174,9 +174,9 @@ int LuaPerlinNoiseMap::l_get2dMap(lua_State *L) n->perlinMap2D(p.X, p.Y); lua_newtable(L); - for (int y = 0; y != n->sy; y++) { + for (u32 y = 0; y != n->sy; y++) { lua_newtable(L); - for (int x = 0; x != n->sx; x++) { + for (u32 x = 0; x != n->sx; x++) { lua_pushnumber(L, n->result[i++]); lua_rawseti(L, -2, x + 1); } @@ -191,14 +191,19 @@ int LuaPerlinNoiseMap::l_get2dMap_flat(lua_State *L) NO_MAP_LOCK_REQUIRED; LuaPerlinNoiseMap *o = checkobject(L, 1); - v2f p = check_v2f(L, 2); + v2f p = check_v2f(L, 2); + bool use_buffer = lua_istable(L, 3); Noise *n = o->noise; n->perlinMap2D(p.X, p.Y); size_t maplen = n->sx * n->sy; - lua_newtable(L); + if (use_buffer) + lua_pushvalue(L, 3); + else + lua_newtable(L); + for (size_t i = 0; i != maplen; i++) { lua_pushnumber(L, n->result[i]); lua_rawseti(L, -2, i + 1); @@ -222,11 +227,11 @@ int LuaPerlinNoiseMap::l_get3dMap(lua_State *L) n->perlinMap3D(p.X, p.Y, p.Z); lua_newtable(L); - for (int z = 0; z != n->sz; z++) { + for (u32 z = 0; z != n->sz; z++) { lua_newtable(L); - for (int y = 0; y != n->sy; y++) { + for (u32 y = 0; y != n->sy; y++) { lua_newtable(L); - for (int x = 0; x != n->sx; x++) { + for (u32 x = 0; x != n->sx; x++) { lua_pushnumber(L, n->result[i++]); lua_rawseti(L, -2, x + 1); } @@ -243,7 +248,8 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L) NO_MAP_LOCK_REQUIRED; LuaPerlinNoiseMap *o = checkobject(L, 1); - v3f p = check_v3f(L, 2); + v3f p = check_v3f(L, 2); + bool use_buffer = lua_istable(L, 3); if (!o->m_is3d) return 0; @@ -253,7 +259,11 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L) size_t maplen = n->sx * n->sy * n->sz; - lua_newtable(L); + if (use_buffer) + lua_pushvalue(L, 3); + else + lua_newtable(L); + for (size_t i = 0; i != maplen; i++) { lua_pushnumber(L, n->result[i]); lua_rawseti(L, -2, i + 1); diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index 061ee6036..ac6c10303 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -63,12 +63,18 @@ int LuaVoxelManip::l_get_data(lua_State *L) NO_MAP_LOCK_REQUIRED; LuaVoxelManip *o = checkobject(L, 1); + bool use_buffer = lua_istable(L, 2); + MMVManip *vm = o->vm; - int volume = vm->m_area.getVolume(); + u32 volume = vm->m_area.getVolume(); - lua_newtable(L); - for (int i = 0; i != volume; i++) { + if (use_buffer) + lua_pushvalue(L, 2); + else + lua_newtable(L); + + for (u32 i = 0; i != volume; i++) { lua_Integer cid = vm->m_data[i].getContent(); lua_pushinteger(L, cid); lua_rawseti(L, -2, i + 1); @@ -87,8 +93,8 @@ int LuaVoxelManip::l_set_data(lua_State *L) if (!lua_istable(L, 2)) return 0; - int volume = vm->m_area.getVolume(); - for (int i = 0; i != volume; i++) { + u32 volume = vm->m_area.getVolume(); + for (u32 i = 0; i != volume; i++) { lua_rawgeti(L, 2, i + 1); content_t c = lua_tointeger(L, -1); @@ -228,10 +234,10 @@ int LuaVoxelManip::l_get_light_data(lua_State *L) LuaVoxelManip *o = checkobject(L, 1); MMVManip *vm = o->vm; - int volume = vm->m_area.getVolume(); + u32 volume = vm->m_area.getVolume(); lua_newtable(L); - for (int i = 0; i != volume; i++) { + for (u32 i = 0; i != volume; i++) { lua_Integer light = vm->m_data[i].param1; lua_pushinteger(L, light); lua_rawseti(L, -2, i + 1); @@ -250,8 +256,8 @@ int LuaVoxelManip::l_set_light_data(lua_State *L) if (!lua_istable(L, 2)) return 0; - int volume = vm->m_area.getVolume(); - for (int i = 0; i != volume; i++) { + u32 volume = vm->m_area.getVolume(); + for (u32 i = 0; i != volume; i++) { lua_rawgeti(L, 2, i + 1); u8 light = lua_tointeger(L, -1); @@ -270,10 +276,10 @@ int LuaVoxelManip::l_get_param2_data(lua_State *L) LuaVoxelManip *o = checkobject(L, 1); MMVManip *vm = o->vm; - int volume = vm->m_area.getVolume(); + u32 volume = vm->m_area.getVolume(); lua_newtable(L); - for (int i = 0; i != volume; i++) { + for (u32 i = 0; i != volume; i++) { lua_Integer param2 = vm->m_data[i].param2; lua_pushinteger(L, param2); lua_rawseti(L, -2, i + 1); @@ -292,8 +298,8 @@ int LuaVoxelManip::l_set_param2_data(lua_State *L) if (!lua_istable(L, 2)) return 0; - int volume = vm->m_area.getVolume(); - for (int i = 0; i != volume; i++) { + u32 volume = vm->m_area.getVolume(); + for (u32 i = 0; i != volume; i++) { lua_rawgeti(L, 2, i + 1); u8 param2 = lua_tointeger(L, -1); From c0edb8e313590efcf473e02ab46dd967774386d0 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 13 May 2015 00:33:41 +0100 Subject: [PATCH 067/670] Mapgen v5/v7: Detect sandstone, enable sandstone brick dungeons --- src/mapgen.h | 7 +++++++ src/mapgen_v5.cpp | 45 +++++++++++++++++++++++++++++---------------- src/mapgen_v5.h | 3 ++- src/mapgen_v7.cpp | 45 +++++++++++++++++++++++++++++---------------- src/mapgen_v7.h | 3 ++- 5 files changed, 69 insertions(+), 34 deletions(-) diff --git a/src/mapgen.h b/src/mapgen.h index 5be004e9f..b7fecb7a4 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -70,6 +70,13 @@ enum GenNotifyType { NUM_GENNOTIFY_TYPES }; +// TODO(hmmmm/paramat): make stone type selection dynamic +enum MgStoneType { + STONE, + DESERT_STONE, + SANDSTONE, +}; + struct GenNotifyEvent { GenNotifyType type; v3s16 pos; diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 6985e0a1a..54fc13745 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -84,6 +84,7 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) c_lava_source = ndef->getId("mapgen_lava_source"); c_desert_stone = ndef->getId("mapgen_desert_stone"); c_ice = ndef->getId("mapgen_ice"); + c_sandstone = ndef->getId("mapgen_sandstone"); c_cobble = ndef->getId("mapgen_cobble"); c_stair_cobble = ndef->getId("mapgen_stair_cobble"); @@ -98,9 +99,9 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; if (c_sandstonebrick == CONTENT_IGNORE) - c_sandstonebrick = c_desert_stone; + c_sandstonebrick = c_sandstone; if (c_stair_sandstonebrick == CONTENT_IGNORE) - c_stair_sandstonebrick = c_sandstonebrick; + c_stair_sandstonebrick = c_sandstone; } @@ -236,7 +237,7 @@ void MapgenV5::makeChunk(BlockMakeData *data) noise_humidity->result, heightmap, biomemap); // Actually place the biome-specific nodes - bool desert_stone = generateBiomes(noise_heat->result, noise_humidity->result); + MgStoneType stone_type = generateBiomes(noise_heat->result, noise_humidity->result); // Generate caves if ((flags & MG_CAVES) && (stone_surface_max_y >= node_min.Y)) @@ -250,7 +251,17 @@ void MapgenV5::makeChunk(BlockMakeData *data) dp.np_density = nparams_dungeon_density; dp.np_wetness = nparams_dungeon_wetness; dp.c_water = c_water_source; - if (desert_stone) { + if (stone_type == STONE) { + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; + + dp.diagonal_dirs = false; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; + } else if (stone_type == DESERT_STONE) { dp.c_cobble = c_desert_stone; dp.c_moss = c_desert_stone; dp.c_stair = c_desert_stone; @@ -260,15 +271,15 @@ void MapgenV5::makeChunk(BlockMakeData *data) dp.holesize = v3s16(2, 3, 2); dp.roomsize = v3s16(2, 5, 2); dp.notifytype = GENNOTIFY_TEMPLE; - } else { - dp.c_cobble = c_cobble; - dp.c_moss = c_mossycobble; - dp.c_stair = c_stair_cobble; + } else if (stone_type == SANDSTONE) { + dp.c_cobble = c_sandstonebrick; + dp.c_moss = c_sandstonebrick; + dp.c_stair = c_sandstonebrick; dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0, 0, 0); + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 2, 2); + dp.roomsize = v3s16(2, 0, 2); dp.notifytype = GENNOTIFY_DUNGEON; } @@ -383,14 +394,14 @@ int MapgenV5::generateBaseTerrain() } -bool MapgenV5::generateBiomes(float *heat_map, float *humidity_map) +MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) { if (node_max.Y < water_level) - return false; + return STONE; v3s16 em = vm->m_area.getExtent(); u32 index = 0; - bool desert_stone = false; + MgStoneType stone_type = STONE; for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { @@ -418,7 +429,9 @@ bool MapgenV5::generateBiomes(float *heat_map, float *humidity_map) depth_water_top = biome->depth_water_top; if (biome->c_stone == c_desert_stone) - desert_stone = true; + stone_type = DESERT_STONE; + else if (biome->c_stone == c_sandstone) + stone_type = SANDSTONE; } if (c == c_stone && have_air) { @@ -464,7 +477,7 @@ bool MapgenV5::generateBiomes(float *heat_map, float *humidity_map) } } - return desert_stone; + return stone_type; } diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index 8ef9d0c64..5575dfe61 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -77,6 +77,7 @@ public: content_t c_lava_source; content_t c_desert_stone; content_t c_ice; + content_t c_sandstone; content_t c_cobble; content_t c_stair_cobble; @@ -91,7 +92,7 @@ public: int getGroundLevelAtPoint(v2s16 p); void calculateNoise(); int generateBaseTerrain(); - bool generateBiomes(float *heat_map, float *humidity_map); + MgStoneType generateBiomes(float *heat_map, float *humidity_map); void generateCaves(int max_stone_y); void dustTopNodes(); }; diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 640ad10f4..1733fff49 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -93,6 +93,7 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) c_lava_source = ndef->getId("mapgen_lava_source"); c_desert_stone = ndef->getId("mapgen_desert_stone"); c_ice = ndef->getId("mapgen_ice"); + c_sandstone = ndef->getId("mapgen_sandstone"); c_cobble = ndef->getId("mapgen_cobble"); c_stair_cobble = ndef->getId("mapgen_stair_cobble"); @@ -107,9 +108,9 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; if (c_sandstonebrick == CONTENT_IGNORE) - c_sandstonebrick = c_desert_stone; + c_sandstonebrick = c_sandstone; if (c_stair_sandstonebrick == CONTENT_IGNORE) - c_stair_sandstonebrick = c_sandstonebrick; + c_stair_sandstonebrick = c_sandstone; } @@ -260,7 +261,7 @@ void MapgenV7::makeChunk(BlockMakeData *data) noise_humidity->result, heightmap, biomemap); // Actually place the biome-specific nodes - bool desert_stone = generateBiomes(noise_heat->result, noise_humidity->result); + MgStoneType stone_type = generateBiomes(noise_heat->result, noise_humidity->result); if (flags & MG_CAVES) generateCaves(stone_surface_max_y); @@ -272,7 +273,17 @@ void MapgenV7::makeChunk(BlockMakeData *data) dp.np_density = nparams_dungeon_density; dp.np_wetness = nparams_dungeon_wetness; dp.c_water = c_water_source; - if (desert_stone) { + if (stone_type == STONE) { + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; + + dp.diagonal_dirs = false; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; + } else if (stone_type == DESERT_STONE) { dp.c_cobble = c_desert_stone; dp.c_moss = c_desert_stone; dp.c_stair = c_desert_stone; @@ -282,15 +293,15 @@ void MapgenV7::makeChunk(BlockMakeData *data) dp.holesize = v3s16(2, 3, 2); dp.roomsize = v3s16(2, 5, 2); dp.notifytype = GENNOTIFY_TEMPLE; - } else { - dp.c_cobble = c_cobble; - dp.c_moss = c_mossycobble; - dp.c_stair = c_stair_cobble; + } else if (stone_type == SANDSTONE) { + dp.c_cobble = c_sandstonebrick; + dp.c_moss = c_sandstonebrick; + dp.c_stair = c_sandstonebrick; dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0, 0, 0); + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 2, 2); + dp.roomsize = v3s16(2, 0, 2); dp.notifytype = GENNOTIFY_DUNGEON; } @@ -578,14 +589,14 @@ void MapgenV7::generateRidgeTerrain() } -bool MapgenV7::generateBiomes(float *heat_map, float *humidity_map) +MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) { if (node_max.Y < water_level) - return false; + return STONE; v3s16 em = vm->m_area.getExtent(); u32 index = 0; - bool desert_stone = false; + MgStoneType stone_type = STONE; for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { @@ -613,7 +624,9 @@ bool MapgenV7::generateBiomes(float *heat_map, float *humidity_map) depth_water_top = biome->depth_water_top; if (biome->c_stone == c_desert_stone) - desert_stone = true; + stone_type = DESERT_STONE; + else if (biome->c_stone == c_sandstone) + stone_type = SANDSTONE; } if (c == c_stone && have_air) { @@ -659,7 +672,7 @@ bool MapgenV7::generateBiomes(float *heat_map, float *humidity_map) } } - return desert_stone; + return stone_type; } diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index 46dd79b66..eb46c371b 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -88,6 +88,7 @@ public: content_t c_lava_source; content_t c_desert_stone; content_t c_ice; + content_t c_sandstone; content_t c_cobble; content_t c_stair_cobble; @@ -114,7 +115,7 @@ public: int generateMountainTerrain(int ymax); void generateRidgeTerrain(); - bool generateBiomes(float *heat_map, float *humidity_map); + MgStoneType generateBiomes(float *heat_map, float *humidity_map); void dustTopNodes(); //void addTopNodes(); From 4c9a8a91c4988b3567a38af622a3eb0d0ec19f6b Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 17 May 2015 03:38:39 -0400 Subject: [PATCH 068/670] SAPI/Noise: Add PerlinNoiseMap:getMapSlice() function This adds the ability to grab 'slices' of noise calculated by PerlinNoiseMap. Retrieving smaller slices of noise from the computation result as needed optimizes memory usage while maintaining a reasonable amount of CPU overhead. --- doc/lua_api.txt | 22 ++++++-- src/irr_v3d.h | 1 + src/script/common/c_converter.cpp | 92 +++++++++++++++++++++++++++++++ src/script/common/c_converter.h | 5 ++ src/script/lua_api/l_noise.cpp | 58 +++++++++++++++++++ src/script/lua_api/l_noise.h | 4 ++ 6 files changed, 178 insertions(+), 4 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index b4a5fa1d8..2acb94a68 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2640,16 +2640,30 @@ Format of `size` is `{x=dimx, y=dimy, z=dimz}`. The `z` conponent is ommitted for 2D noise, and it must be must be larger than 1 for 3D noise (otherwise `nil` is returned). +For each of the functions with an optional `buffer` parameter: If `buffer` is not +nil, this table will be used to store the result instead of creating a new table. + + #### Methods * `get2dMap(pos)`: returns a `` times `` 2D array of 2D noise with values starting at `pos={x=,y=}` * `get3dMap(pos)`: returns a `` times `` times `` 3D array of 3D noise with values starting at `pos={x=,y=,z=}` -* `get2dMap_flat(pos)`: returns a flat `` element array of 2D noise +* `get2dMap_flat(pos, buffer)`: returns a flat `` element array of 2D noise with values starting at `pos={x=,y=}` - * if the param `buffer` is present, this table will be used to store the result instead -* `get3dMap_flat(pos)`: Same as `get2dMap_flat`, but 3D noise - * if the param `buffer` is present, this table will be used to store the result instead +* `get3dMap_flat(pos, buffer)`: Same as `get2dMap_flat`, but 3D noise +* `calc2dMap(pos)`: Calculates the 2d noise map starting at `pos`. The result is stored internally. +* `calc3dMap(pos)`: Calculates the 3d noise map starting at `pos`. The result is stored internally. +* `getMapSlice(slice_offset, slice_size, buffer)`: In the form of an array, returns a slice of the + most recently computed noise results. The result slice begins at coordinates `slice_offset` and + takes a chunk of `slice_size`. + E.g. to grab a 2-slice high horizontal 2d plane of noise starting at buffer offset y = 20: + `noisevals = noise:getMapSlice({y=20}, {y=2})` + It is important to note that `slice_offset` offset coordinates begin at 1, and are relative to + the starting position of the most recently calculated noise. + To grab a single vertical column of noise starting at map coordinates x = 1023, y=1000, z = 1000: + `noise:calc3dMap({x=1000, y=1000, z=1000})` + `noisevals = noise:getMapSlice({x=24, z=1}, {x=1, z=1})` ### `VoxelManip` An interface to the `MapVoxelManipulator` for Lua. diff --git a/src/irr_v3d.h b/src/irr_v3d.h index 7bc73ad10..f74d601e8 100644 --- a/src/irr_v3d.h +++ b/src/irr_v3d.h @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., typedef core::vector3df v3f; typedef core::vector3d v3s16; +typedef core::vector3d v3u16; typedef core::vector3d v3s32; #endif diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 6fb6f623a..211121552 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -510,3 +510,95 @@ void setboolfield(lua_State *L, int table, } +//// +//// Array table slices +//// + +size_t write_array_slice_float( + lua_State *L, + int table_index, + float *data, + v3u16 data_size, + v3u16 slice_offset, + v3u16 slice_size) +{ + v3u16 pmin, pmax(data_size); + + if (slice_offset.X > 0) { + slice_offset.X--; + pmin.X = slice_offset.X; + pmax.X = MYMIN(slice_offset.X + slice_size.X, data_size.X); + } + + if (slice_offset.Y > 0) { + slice_offset.Y--; + pmin.Y = slice_offset.Y; + pmax.Y = MYMIN(slice_offset.Y + slice_size.Y, data_size.Y); + } + + if (slice_offset.Z > 0) { + slice_offset.Z--; + pmin.Z = slice_offset.Z; + pmax.Z = MYMIN(slice_offset.Z + slice_size.Z, data_size.Z); + } + + const u32 ystride = data_size.X; + const u32 zstride = data_size.X * data_size.Y; + + u32 elem_index = 1; + for (u32 z = pmin.Z; z != pmax.Z; z++) + for (u32 y = pmin.Y; y != pmax.Y; y++) + for (u32 x = pmin.X; x != pmax.X; x++) { + u32 i = z * zstride + y * ystride + x; + lua_pushnumber(L, data[i]); + lua_rawseti(L, table_index, elem_index); + elem_index++; + } + + return elem_index - 1; +} + + +size_t write_array_slice_u16( + lua_State *L, + int table_index, + u16 *data, + v3u16 data_size, + v3u16 slice_offset, + v3u16 slice_size) +{ + v3u16 pmin, pmax(data_size); + + if (slice_offset.X > 0) { + slice_offset.X--; + pmin.X = slice_offset.X; + pmax.X = MYMIN(slice_offset.X + slice_size.X, data_size.X); + } + + if (slice_offset.Y > 0) { + slice_offset.Y--; + pmin.Y = slice_offset.Y; + pmax.Y = MYMIN(slice_offset.Y + slice_size.Y, data_size.Y); + } + + if (slice_offset.Z > 0) { + slice_offset.Z--; + pmin.Z = slice_offset.Z; + pmax.Z = MYMIN(slice_offset.Z + slice_size.Z, data_size.Z); + } + + const u32 ystride = data_size.X; + const u32 zstride = data_size.X * data_size.Y; + + u32 elem_index = 1; + for (u32 z = pmin.Z; z != pmax.Z; z++) + for (u32 y = pmin.Y; y != pmax.Y; y++) + for (u32 x = pmin.X; x != pmax.X; x++) { + u32 i = z * zstride + y * ystride + x; + lua_pushinteger(L, data[i]); + lua_rawseti(L, table_index, elem_index); + elem_index++; + } + + return elem_index - 1; +} diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index e99826404..e4466d97f 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -106,4 +106,9 @@ void warn_if_field_exists(lua_State *L, int table, const char *fieldname, const std::string &message); +size_t write_array_slice_float(lua_State *L, int table_index, float *data, + v3u16 data_size, v3u16 slice_offset, v3u16 slice_size); +size_t write_array_slice_u16(lua_State *L, int table_index, u16 *data, + v3u16 data_size, v3u16 slice_offset, v3u16 slice_size); + #endif /* C_CONVERTER_H_ */ diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp index 86ae9dba7..c8dc2d2dc 100644 --- a/src/script/lua_api/l_noise.cpp +++ b/src/script/lua_api/l_noise.cpp @@ -272,6 +272,61 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L) } +int LuaPerlinNoiseMap::l_calc2dMap(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaPerlinNoiseMap *o = checkobject(L, 1); + v2f p = check_v2f(L, 2); + + Noise *n = o->noise; + n->perlinMap2D(p.X, p.Y); + + return 0; +} + +int LuaPerlinNoiseMap::l_calc3dMap(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaPerlinNoiseMap *o = checkobject(L, 1); + v3f p = check_v3f(L, 2); + + if (!o->m_is3d) + return 0; + + Noise *n = o->noise; + n->perlinMap3D(p.X, p.Y, p.Z); + + return 0; +} + + +int LuaPerlinNoiseMap::l_getMapSlice(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaPerlinNoiseMap *o = checkobject(L, 1); + v3s16 slice_offset = read_v3s16(L, 2); + v3s16 slice_size = read_v3s16(L, 3); + bool use_buffer = lua_istable(L, 4); + + Noise *n = o->noise; + + if (use_buffer) + lua_pushvalue(L, 3); + else + lua_newtable(L); + + write_array_slice_float(L, lua_gettop(L), n->result, + v3u16(n->sx, n->sy, n->sz), + v3u16(slice_offset.X, slice_offset.Y, slice_offset.Z), + v3u16(slice_size.X, slice_size.Y, slice_size.Z)); + + return 1; +} + + int LuaPerlinNoiseMap::create_object(lua_State *L) { NoiseParams np; @@ -339,8 +394,11 @@ const char LuaPerlinNoiseMap::className[] = "PerlinNoiseMap"; const luaL_reg LuaPerlinNoiseMap::methods[] = { luamethod(LuaPerlinNoiseMap, get2dMap), luamethod(LuaPerlinNoiseMap, get2dMap_flat), + luamethod(LuaPerlinNoiseMap, calc2dMap), luamethod(LuaPerlinNoiseMap, get3dMap), luamethod(LuaPerlinNoiseMap, get3dMap_flat), + luamethod(LuaPerlinNoiseMap, calc3dMap), + luamethod(LuaPerlinNoiseMap, getMapSlice), {0,0} }; diff --git a/src/script/lua_api/l_noise.h b/src/script/lua_api/l_noise.h index 56d2d59f8..e958c5a23 100644 --- a/src/script/lua_api/l_noise.h +++ b/src/script/lua_api/l_noise.h @@ -74,6 +74,10 @@ class LuaPerlinNoiseMap : public ModApiBase { static int l_get3dMap(lua_State *L); static int l_get3dMap_flat(lua_State *L); + static int l_calc2dMap(lua_State *L); + static int l_calc3dMap(lua_State *L); + static int l_getMapSlice(lua_State *L); + public: LuaPerlinNoiseMap(NoiseParams *np, int seed, v3s16 size); From 46684beec185d13f89c4a91aaa5dd2148ebb0273 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 17 May 2015 22:14:26 -0400 Subject: [PATCH 069/670] Record MapBlock modification reasons as flags instead of strings This improves performance of MapBlock::raiseModified by a factor of 6. Also, clean up mapblock.h a bit and inline small functions. --- src/environment.cpp | 25 +- src/map.cpp | 6 +- src/mapblock.cpp | 48 +++- src/mapblock.h | 449 +++++++++++++++--------------- src/rollback_interface.cpp | 2 +- src/script/lua_api/l_nodemeta.cpp | 5 +- 6 files changed, 294 insertions(+), 241 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 96353dffb..dc18fd58f 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -873,7 +873,7 @@ void ServerEnvironment::clearAllObjects() if(block){ block->m_static_objects.remove(id); block->raiseModified(MOD_STATE_WRITE_NEEDED, - "clearAllObjects"); + MOD_REASON_CLEAR_ALL_OBJECTS); obj->m_static_exists = false; } } @@ -952,7 +952,7 @@ void ServerEnvironment::clearAllObjects() block->m_static_objects.m_stored.clear(); block->m_static_objects.m_active.clear(); block->raiseModified(MOD_STATE_WRITE_NEEDED, - "clearAllObjects"); + MOD_REASON_CLEAR_ALL_OBJECTS); num_objs_cleared += num_stored + num_active; num_blocks_cleared++; } @@ -1139,7 +1139,7 @@ void ServerEnvironment::step(float dtime) // set block to be saved when it is unloaded if(block->getTimestamp() > block->getDiskTimestamp() + 60) block->raiseModified(MOD_STATE_WRITE_AT_UNLOAD, - "Timestamp older than 60s (step)"); + MOD_REASON_BLOCK_EXPIRED); // Run node timers std::map elapsed_timers = @@ -1530,7 +1530,7 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object, if(set_changed) block->raiseModified(MOD_STATE_WRITE_NEEDED, - "addActiveObjectRaw"); + MOD_REASON_ADD_ACTIVE_OBJECT_RAW); } else { v3s16 p = floatToInt(objectpos, BS); errorstream<<"ServerEnvironment::addActiveObjectRaw(): " @@ -1579,7 +1579,7 @@ void ServerEnvironment::removeRemovedObjects() if (block) { block->m_static_objects.remove(id); block->raiseModified(MOD_STATE_WRITE_NEEDED, - "removeRemovedObjects/remove"); + MOD_REASON_REMOVE_OBJECTS_REMOVE); obj->m_static_exists = false; } else { infostream<<"Failed to emerge block from which an object to " @@ -1604,7 +1604,7 @@ void ServerEnvironment::removeRemovedObjects() block->m_static_objects.m_stored.push_back(i->second); block->m_static_objects.m_active.erase(id); block->raiseModified(MOD_STATE_WRITE_NEEDED, - "removeRemovedObjects/deactivate"); + MOD_REASON_REMOVE_OBJECTS_DEACTIVATE); } } else { infostream<<"Failed to emerge block from which an object to " @@ -1690,8 +1690,7 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s) // Clear stored list block->m_static_objects.m_stored.clear(); block->raiseModified(MOD_STATE_WRITE_NEEDED, - "stored list cleared in activateObjects due to " - "large amount of objects"); + MOD_REASON_TOO_MANY_OBJECTS); return; } @@ -1812,7 +1811,7 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) block->m_static_objects.insert(id, s_obj); obj->m_static_block = blockpos_o; block->raiseModified(MOD_STATE_WRITE_NEEDED, - "deactivateFarObjects: Static data moved in"); + MOD_REASON_STATIC_DATA_ADDED); // Delete from block where object was located block = m_map->emergeBlock(old_static_block, false); @@ -1825,7 +1824,7 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) } block->m_static_objects.remove(id); block->raiseModified(MOD_STATE_WRITE_NEEDED, - "deactivateFarObjects: Static data moved out"); + MOD_REASON_STATIC_DATA_REMOVED); continue; } @@ -1890,8 +1889,7 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) // Only mark block as modified if data changed considerably if(shall_be_written) block->raiseModified(MOD_STATE_WRITE_NEEDED, - "deactivateFarObjects: Static data " - "changed considerably"); + MOD_REASON_STATIC_DATA_CHANGED); } } @@ -1937,8 +1935,7 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) // Only mark block as modified if data changed considerably if(shall_be_written) block->raiseModified(MOD_STATE_WRITE_NEEDED, - "deactivateFarObjects: Static data " - "changed considerably"); + MOD_REASON_STATIC_DATA_CHANGED); obj->m_static_exists = true; obj->m_static_block = block->getPos(); diff --git a/src/map.cpp b/src/map.cpp index 47c66055d..9974ff363 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1436,7 +1436,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, // Save if modified if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) { - modprofiler.add(block->getModifiedReason(), 1); + modprofiler.add(block->getModifiedReasonString(), 1); if (!saveBlock(block)) continue; saved_blocks_count++; @@ -2412,7 +2412,7 @@ void ServerMap::finishBlockMake(BlockMakeData *data, Set block as modified */ block->raiseModified(MOD_STATE_WRITE_NEEDED, - "finishBlockMake expireDayNightDiff"); + MOD_REASON_EXPIRE_DAYNIGHTDIFF); } /* @@ -2981,7 +2981,7 @@ void ServerMap::save(ModifiedState save_level) save_started = true; } - modprofiler.add(block->getModifiedReason(), 1); + modprofiler.add(block->getModifiedReasonString(), 1); saveBlock(block); block_count++; diff --git a/src/mapblock.cpp b/src/mapblock.cpp index ca80c39d7..7ad67c589 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -38,6 +38,30 @@ with this program; if not, write to the Free Software Foundation, Inc., #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" +static const char *modified_reason_strings[] = { + "initial", + "reallocate", + "setIsUnderground", + "setLightingExpired", + "setGenerated", + "setNode", + "setNodeNoCheck", + "setTimestamp", + "NodeMetaRef::reportMetadataChange", + "clearAllObjects", + "Timestamp expired (step)", + "addActiveObjectRaw", + "removeRemovedObjects/remove", + "removeRemovedObjects/deactivate", + "Stored list cleared in activateObjects due to overflow", + "deactivateFarObjects: Static data moved in", + "deactivateFarObjects: Static data moved out", + "deactivateFarObjects: Static data changed considerably", + "finishBlockMake: expireDayNightDiff" + "unknown", +}; + + /* MapBlock */ @@ -47,8 +71,7 @@ MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy): m_pos(pos), m_gamedef(gamedef), m_modified(MOD_STATE_WRITE_NEEDED), - m_modified_reason("initial"), - m_modified_reason_too_long(false), + m_modified_reason(MOD_REASON_INITIAL), is_underground(false), m_lighting_expired(true), m_day_night_differs(false), @@ -112,6 +135,27 @@ MapNode MapBlock::getNodeParent(v3s16 p, bool *is_valid_position) return data[p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X]; } +std::string MapBlock::getModifiedReasonString() +{ + std::string reason; + + const u32 ubound = MYMIN(sizeof(m_modified_reason) * CHAR_BIT, + ARRLEN(modified_reason_strings)); + + for (u32 i = 0; i != ubound; i++) { + if ((m_modified_reason & (1 << i)) == 0) + continue; + + reason += modified_reason_strings[i]; + reason += ", "; + } + + if (reason.length() > 2) + reason.resize(reason.length() - 2); + + return reason; +} + /* Propagates sunlight down through the block. Doesn't modify nodes that are not affected by sunlight. diff --git a/src/mapblock.h b/src/mapblock.h index 3c0ae9cd7..9e36fe113 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -97,21 +97,46 @@ public: }; #endif -/* - MapBlock itself -*/ +//// +//// MapBlock modified reason flags +//// + +#define MOD_REASON_INITIAL (1 << 0) +#define MOD_REASON_REALLOCATE (1 << 1) +#define MOD_REASON_SET_IS_UNDERGROUND (1 << 2) +#define MOD_REASON_SET_LIGHTING_EXPIRED (1 << 3) +#define MOD_REASON_SET_GENERATED (1 << 4) +#define MOD_REASON_SET_NODE (1 << 5) +#define MOD_REASON_SET_NODE_NO_CHECK (1 << 6) +#define MOD_REASON_SET_TIMESTAMP (1 << 7) +#define MOD_REASON_REPORT_META_CHANGE (1 << 8) +#define MOD_REASON_CLEAR_ALL_OBJECTS (1 << 9) +#define MOD_REASON_BLOCK_EXPIRED (1 << 10) +#define MOD_REASON_ADD_ACTIVE_OBJECT_RAW (1 << 11) +#define MOD_REASON_REMOVE_OBJECTS_REMOVE (1 << 12) +#define MOD_REASON_REMOVE_OBJECTS_DEACTIVATE (1 << 13) +#define MOD_REASON_TOO_MANY_OBJECTS (1 << 14) +#define MOD_REASON_STATIC_DATA_ADDED (1 << 15) +#define MOD_REASON_STATIC_DATA_REMOVED (1 << 16) +#define MOD_REASON_STATIC_DATA_CHANGED (1 << 17) +#define MOD_REASON_EXPIRE_DAYNIGHTDIFF (1 << 18) +#define MOD_REASON_UNKNOWN (1 << 19) + +//// +//// MapBlock itself +//// class MapBlock /*: public NodeContainer*/ { public: MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy=false); ~MapBlock(); - + /*virtual u16 nodeContainerId() const { return NODECONTAINER_ID_MAPBLOCK; }*/ - + Map * getParent() { return m_parent; @@ -119,150 +144,125 @@ public: void reallocate() { - if(data != NULL) - delete[] data; - u32 l = MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE; - data = new MapNode[l]; - for(u32 i=0; i m_modified) { + m_modified = mod; + m_modified_reason = reason; + if (m_modified >= MOD_STATE_WRITE_AT_UNLOAD) + m_disk_timestamp = m_timestamp; + } else if (mod == m_modified) { + m_modified_reason |= reason; + } + } - bool isDummy() + inline u32 getModified() + { + return m_modified; + } + + inline u32 getModifiedReason() + { + return m_modified_reason; + } + + std::string getModifiedReasonString(); + + inline void resetModified() + { + m_modified = MOD_STATE_CLEAN; + m_modified_reason = 0; + } + + //// + //// Flags + //// + + inline bool isDummy() { return (data == NULL); } - void unDummify() + + inline void unDummify() { assert(isDummy()); // Pre-condition reallocate(); } - - // m_modified methods - void raiseModified(u32 mod, const std::string &reason="unknown") - { - if(mod > m_modified){ - m_modified = mod; - m_modified_reason = reason; - m_modified_reason_too_long = false; - if(m_modified >= MOD_STATE_WRITE_AT_UNLOAD){ - m_disk_timestamp = m_timestamp; - } - } else if(mod == m_modified){ - if(!m_modified_reason_too_long){ - if(m_modified_reason.size() < 40) - m_modified_reason += ", " + reason; - else{ - m_modified_reason += "..."; - m_modified_reason_too_long = true; - } - } - } - } - void raiseModified(u32 mod, const char *reason) - { - if (mod > m_modified){ - m_modified = mod; - m_modified_reason = reason; - m_modified_reason_too_long = false; - - if (m_modified >= MOD_STATE_WRITE_AT_UNLOAD){ - m_disk_timestamp = m_timestamp; - } - } - else if (mod == m_modified){ - if (!m_modified_reason_too_long){ - if (m_modified_reason.size() < 40) - m_modified_reason += ", " + std::string(reason); - else{ - m_modified_reason += "..."; - m_modified_reason_too_long = true; - } - } - } - } - - u32 getModified() - { - return m_modified; - } - std::string getModifiedReason() - { - return m_modified_reason; - } - void resetModified() - { - m_modified = MOD_STATE_CLEAN; - m_modified_reason = "none"; - m_modified_reason_too_long = false; - } - // is_underground getter/setter - bool getIsUnderground() + inline bool getIsUnderground() { return is_underground; } - void setIsUnderground(bool a_is_underground) + + inline void setIsUnderground(bool a_is_underground) { is_underground = a_is_underground; - raiseModified(MOD_STATE_WRITE_NEEDED, "setIsUnderground"); + raiseModified(MOD_STATE_WRITE_NEEDED, MOD_REASON_SET_IS_UNDERGROUND); } - void setLightingExpired(bool expired) + inline void setLightingExpired(bool expired) { - if(expired != m_lighting_expired){ + if (expired != m_lighting_expired){ m_lighting_expired = expired; - raiseModified(MOD_STATE_WRITE_NEEDED, "setLightingExpired"); + raiseModified(MOD_STATE_WRITE_NEEDED, MOD_REASON_SET_LIGHTING_EXPIRED); } } - bool getLightingExpired() + + inline bool getLightingExpired() { return m_lighting_expired; } - bool isGenerated() + inline bool isGenerated() { return m_generated; } - void setGenerated(bool b) + + inline void setGenerated(bool b) { - if(b != m_generated){ - raiseModified(MOD_STATE_WRITE_NEEDED, "setGenerated"); + if (b != m_generated) { + raiseModified(MOD_STATE_WRITE_NEEDED, MOD_REASON_SET_GENERATED); m_generated = b; } } - bool isValid() + inline bool isValid() { - if(m_lighting_expired) + if (m_lighting_expired) return false; - if(data == NULL) + if (data == NULL) return false; return true; } - /* - Position stuff - */ + //// + //// Position stuff + //// - v3s16 getPos() + inline v3s16 getPos() { return m_pos; } - - v3s16 getPosRelative() + + inline v3s16 getPosRelative() { return m_pos * MAP_BLOCKSIZE; } - - core::aabbox3d getBox() + + inline core::aabbox3d getBox() { return core::aabbox3d(getPosRelative(), getPosRelative() @@ -270,140 +270,135 @@ public: - v3s16(1,1,1)); } - /* - Regular MapNode get-setters - */ - - bool isValidPosition(s16 x, s16 y, s16 z) + //// + //// Regular MapNode get-setters + //// + + inline bool isValidPosition(s16 x, s16 y, s16 z) { return data != NULL - && x >= 0 && x < MAP_BLOCKSIZE - && y >= 0 && y < MAP_BLOCKSIZE - && z >= 0 && z < MAP_BLOCKSIZE; + && x >= 0 && x < MAP_BLOCKSIZE + && y >= 0 && y < MAP_BLOCKSIZE + && z >= 0 && z < MAP_BLOCKSIZE; } - bool isValidPosition(v3s16 p) + inline bool isValidPosition(v3s16 p) { return isValidPosition(p.X, p.Y, p.Z); } - MapNode getNode(s16 x, s16 y, s16 z, bool *valid_position) + inline MapNode getNode(s16 x, s16 y, s16 z, bool *valid_position) { *valid_position = isValidPosition(x, y, z); if (!*valid_position) return MapNode(CONTENT_IGNORE); - return data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x]; + return data[z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + y * MAP_BLOCKSIZE + x]; } - - MapNode getNode(v3s16 p, bool *valid_position) + + inline MapNode getNode(v3s16 p, bool *valid_position) { return getNode(p.X, p.Y, p.Z, valid_position); } - - MapNode getNodeNoEx(v3s16 p) + + inline MapNode getNodeNoEx(v3s16 p) { bool is_valid; MapNode node = getNode(p.X, p.Y, p.Z, &is_valid); return is_valid ? node : MapNode(CONTENT_IGNORE); } - - void setNode(s16 x, s16 y, s16 z, MapNode & n) + + inline void setNode(s16 x, s16 y, s16 z, MapNode & n) { - if(data == NULL) + if (!isValidPosition(x, y, z)) throw InvalidPositionException(); - if(x < 0 || x >= MAP_BLOCKSIZE) throw InvalidPositionException(); - if(y < 0 || y >= MAP_BLOCKSIZE) throw InvalidPositionException(); - if(z < 0 || z >= MAP_BLOCKSIZE) throw InvalidPositionException(); - data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x] = n; - raiseModified(MOD_STATE_WRITE_NEEDED, "setNode"); + + data[z * zstride + y * ystride + x] = n; + raiseModified(MOD_STATE_WRITE_NEEDED, MOD_REASON_SET_NODE); } - - void setNode(v3s16 p, MapNode & n) + + inline void setNode(v3s16 p, MapNode & n) { setNode(p.X, p.Y, p.Z, n); } - /* - Non-checking variants of the above - */ + //// + //// Non-checking variants of the above + //// - MapNode getNodeNoCheck(s16 x, s16 y, s16 z, bool *valid_position) + inline MapNode getNodeNoCheck(s16 x, s16 y, s16 z, bool *valid_position) { *valid_position = data != NULL; - if(!valid_position) + if (!valid_position) return MapNode(CONTENT_IGNORE); - return data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x]; + return data[z * zstride + y * ystride + x]; } - - MapNode getNodeNoCheck(v3s16 p, bool *valid_position) + + inline MapNode getNodeNoCheck(v3s16 p, bool *valid_position) { return getNodeNoCheck(p.X, p.Y, p.Z, valid_position); } - - void setNodeNoCheck(s16 x, s16 y, s16 z, MapNode & n) + + inline void setNodeNoCheck(s16 x, s16 y, s16 z, MapNode & n) { - if(data == NULL) + if (data == NULL) throw InvalidPositionException(); - data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x] = n; - raiseModified(MOD_STATE_WRITE_NEEDED, "setNodeNoCheck"); + + data[z * zstride + y * ystride + x] = n; + raiseModified(MOD_STATE_WRITE_NEEDED, MOD_REASON_SET_NODE_NO_CHECK); } - - void setNodeNoCheck(v3s16 p, MapNode & n) + + inline void setNodeNoCheck(v3s16 p, MapNode & n) { setNodeNoCheck(p.X, p.Y, p.Z, n); } - /* - These functions consult the parent container if the position - is not valid on this MapBlock. - */ + // These functions consult the parent container if the position + // is not valid on this MapBlock. bool isValidPositionParent(v3s16 p); MapNode getNodeParent(v3s16 p, bool *is_valid_position = NULL); void setNodeParent(v3s16 p, MapNode & n); - void drawbox(s16 x0, s16 y0, s16 z0, s16 w, s16 h, s16 d, MapNode node) + inline void drawbox(s16 x0, s16 y0, s16 z0, s16 w, s16 h, s16 d, MapNode node) { - for(u16 z=0; z & light_sources, - bool remove_light=false, bool *black_air_left=NULL); - + bool propagateSunlight(std::set &light_sources, + bool remove_light=false, bool *black_air_left=NULL); + // Copies data to VoxelManipulator to getPosRelative() void copyTo(VoxelManipulator &dst); + // Copies data from VoxelManipulator getPosRelative() void copyFrom(VoxelManipulator &dst); - /* - Update day-night lighting difference flag. - Sets m_day_night_differs to appropriate value. - These methods don't care about neighboring blocks. - */ + // Update day-night lighting difference flag. + // Sets m_day_night_differs to appropriate value. + // These methods don't care about neighboring blocks. void actuallyUpdateDayNightDiff(); - /* - Call this to schedule what the previous function does to be done - when the value is actually needed. - */ + + // Call this to schedule what the previous function does to be done + // when the value is actually needed. void expireDayNightDiff(); - bool getDayNightDiff() + inline bool getDayNightDiff() { - if(m_day_night_differs_expired) + if (m_day_night_differs_expired) actuallyUpdateDayNightDiff(); return m_day_night_differs; } - /* - Miscellaneous stuff - */ - + //// + //// Miscellaneous stuff + //// + /* Tries to measure ground level. Return value: @@ -414,84 +409,99 @@ public: */ s16 getGroundLevel(v2s16 p2d); - /* - Timestamp (see m_timestamp) - NOTE: BLOCK_TIMESTAMP_UNDEFINED=0xffffffff means there is no timestamp. - */ - void setTimestamp(u32 time) + //// + //// Timestamp (see m_timestamp) + //// + + // NOTE: BLOCK_TIMESTAMP_UNDEFINED=0xffffffff means there is no timestamp. + + inline void setTimestamp(u32 time) { m_timestamp = time; - raiseModified(MOD_STATE_WRITE_AT_UNLOAD, "setTimestamp"); + raiseModified(MOD_STATE_WRITE_AT_UNLOAD, MOD_REASON_SET_TIMESTAMP); } - void setTimestampNoChangedFlag(u32 time) + + inline void setTimestampNoChangedFlag(u32 time) { m_timestamp = time; } - u32 getTimestamp() + + inline u32 getTimestamp() { return m_timestamp; } - u32 getDiskTimestamp() + + inline u32 getDiskTimestamp() { return m_disk_timestamp; } - - /* - See m_usage_timer - */ - void resetUsageTimer() + + //// + //// Usage timer (see m_usage_timer) + //// + + inline void resetUsageTimer() { m_usage_timer = 0; } - void incrementUsageTimer(float dtime) + + inline void incrementUsageTimer(float dtime) { m_usage_timer += dtime; } - float getUsageTimer() + + inline float getUsageTimer() { return m_usage_timer; } - /* - See m_refcount - */ - void refGrab() + //// + //// Reference counting (see m_refcount) + //// + + inline void refGrab() { m_refcount++; } - void refDrop() + + inline void refDrop() { m_refcount--; } - int refGet() + + inline int refGet() { return m_refcount; } - - /* - Node Timers - */ - // Get timer - NodeTimer getNodeTimer(v3s16 p){ + + //// + //// Node Timers + //// + + inline NodeTimer getNodeTimer(v3s16 p) + { return m_node_timers.get(p); } - // Deletes timer - void removeNodeTimer(v3s16 p){ + + inline void removeNodeTimer(v3s16 p) + { m_node_timers.remove(p); } - // Deletes old timer and sets a new one - void setNodeTimer(v3s16 p, NodeTimer t){ + + inline void setNodeTimer(v3s16 p, NodeTimer t) + { m_node_timers.set(p,t); } - // Deletes all timers - void clearNodeTimers(){ + + inline void clearNodeTimers() + { m_node_timers.clear(); } - /* - Serialization - */ - + //// + //// Serialization + /// + // These don't write or read version by itself // Set disk to true for on-disk format, false for over-the-network format // Precondition: version >= SER_FMT_CLIENT_VER_LOWEST @@ -514,16 +524,15 @@ private: Used only internally, because changes can't be tracked */ - MapNode & getNodeRef(s16 x, s16 y, s16 z) + inline MapNode &getNodeRef(s16 x, s16 y, s16 z) { - if(data == NULL) + if (!isValidPosition(x, y, z)) throw InvalidPositionException(); - if(x < 0 || x >= MAP_BLOCKSIZE) throw InvalidPositionException(); - if(y < 0 || y >= MAP_BLOCKSIZE) throw InvalidPositionException(); - if(z < 0 || z >= MAP_BLOCKSIZE) throw InvalidPositionException(); - return data[z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + y*MAP_BLOCKSIZE + x]; + + return data[z * zstride + y * ystride + x]; } - MapNode & getNodeRef(v3s16 &p) + + inline MapNode &getNodeRef(v3s16 &p) { return getNodeRef(p.X, p.Y, p.Z); } @@ -536,11 +545,14 @@ public: #ifndef SERVER // Only on client MapBlockMesh *mesh; #endif - + NodeMetadataList m_node_metadata; NodeTimerList m_node_timers; StaticObjectList m_static_objects; + static const u32 ystride = MAP_BLOCKSIZE; + static const u32 zstride = MAP_BLOCKSIZE * MAP_BLOCKSIZE; + private: /* Private member variables @@ -552,12 +564,12 @@ private: v3s16 m_pos; IGameDef *m_gamedef; - + /* If NULL, block is a dummy block. Dummy blocks are used for caching not-found-on-disk blocks. */ - MapNode * data; + MapNode *data; /* - On the server, this is used for telling whether the @@ -565,8 +577,7 @@ private: - On the client, this is used for nothing. */ u32 m_modified; - std::string m_modified_reason; - bool m_modified_reason_too_long; + u32 m_modified_reason; /* When propagating sunlight and the above block doesn't exist, @@ -586,13 +597,13 @@ private: If this is true, lighting might be wrong or right. */ bool m_lighting_expired; - + // Whether day and night lighting differs bool m_day_night_differs; bool m_day_night_differs_expired; bool m_generated; - + /* When block is removed from active blocks, this is set to gametime. Value BLOCK_TIMESTAMP_UNDEFINED=0xffffffff means there is no timestamp. diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index c35ad5781..028bd0424 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -178,7 +178,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam MapBlock *block = map->getBlockNoCreateNoEx(blockpos); if (block) { block->raiseModified(MOD_STATE_WRITE_NEEDED, - "NodeMetaRef::reportMetadataChange"); + MOD_REASON_REPORT_META_CHANGE); } } catch (InvalidPositionException &e) { infostream << "RollbackAction::applyRevert(): " diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 4f20e56f9..906cc3172 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -63,9 +63,10 @@ void NodeMetaRef::reportMetadataChange(NodeMetaRef *ref) ref->m_env->getMap().dispatchEvent(&event); // Set the block to be saved MapBlock *block = ref->m_env->getMap().getBlockNoCreateNoEx(blockpos); - if(block) + if (block) { block->raiseModified(MOD_STATE_WRITE_NEEDED, - "NodeMetaRef::reportMetadataChange"); + MOD_REASON_REPORT_META_CHANGE); + } } // Exported functions From 20aa78cffb6594ff8fdea4291f18d1a8bd252529 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 17 May 2015 22:32:35 -0400 Subject: [PATCH 070/670] Fix null dereference when loading schematic from definition without a NodeDefManager --- src/script/lua_api/l_mapgen.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index dc3644e1c..76e94e97e 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -215,7 +215,8 @@ Schematic *load_schematic_from_def(lua_State *L, int index, } } - ndef->pendNodeResolve(schem); + if (ndef) + ndef->pendNodeResolve(schem); return schem; } From 23984ef7f0c13f6ae011587ba0488b9ea1bb64f8 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 18 May 2015 21:01:57 +0200 Subject: [PATCH 071/670] Make nametags white again Commit 11a96e4901ce54c4646e47866f7a66cd9034c16b commented out version parsing, resulting in the version byte being parsed as part of the color, making nametags dark grey. Re-introduces version parsing and ignores the packet if the version is more recent than ours, fixing the unused variable warning (should have been done anyway). --- src/content_cao.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index bb2fb06a7..b49c64ae8 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1716,10 +1716,12 @@ void GenericCAO::processMessage(const std::string &data) m_armor_groups[name] = rating; } } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) { - //u8 version = readU8(is); // forward compatibility - m_nametag_color = readARGB8(is); - if (m_textnode != NULL) { - m_textnode->setTextColor(m_nametag_color); + u8 version = readU8(is); // forward compatibility + if (version == 1) { + m_nametag_color = readARGB8(is); + if (m_textnode != NULL) { + m_textnode->setTextColor(m_nametag_color); + } } } } From 5b03857c625633e8daea3e0118bf701a93109127 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 18 May 2015 21:24:57 +0200 Subject: [PATCH 072/670] Add more swp files to gitignore Specifically, the added rule matches .kate-swp files. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b89ad68e3..238be2676 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ ## Generic ignorable patterns and files *~ .*.swp +.*-swp *bak* tags *.vim From d2ca662569427d36642660314668e416bf68f3c8 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 18 May 2015 22:41:22 +0200 Subject: [PATCH 073/670] Enforce hiding nametag Work around irrlicht bug and hide nametag if its alpha is set to 0. Thanks @TeTpaAka for pointing out workaround. --- src/content_cao.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index b49c64ae8..d80804d4a 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1721,6 +1721,11 @@ void GenericCAO::processMessage(const std::string &data) m_nametag_color = readARGB8(is); if (m_textnode != NULL) { m_textnode->setTextColor(m_nametag_color); + + // Enforce hiding nametag, + // because if freetype is enabled, a grey + // shadow can remain. + m_textnode->setVisible(m_nametag_color.getAlpha() > 0); } } } From 497299afd62e2f9b18dbf2a366bb22996e73102b Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 19 May 2015 00:55:58 +0200 Subject: [PATCH 074/670] Lower log level for unexpected behaviour Its a possible mistake to log in to a server with twice the same name. Before, it triggered a server wide error message, now it logs to actionstream. --- src/network/serverpackethandler.cpp | 4 ++-- src/server.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 1eb7064d6..ea1528c64 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -613,7 +613,7 @@ void Server::handleCommand_Init2(NetworkPacket* pkt) playersao = StageTwoClientInit(pkt->getPeerId()); if (playersao == NULL) { - errorstream + actionstream << "TOSERVER_INIT2 stage 2 client init failed for peer " << pkt->getPeerId() << std::endl; return; @@ -710,7 +710,7 @@ void Server::handleCommand_ClientReady(NetworkPacket* pkt) PlayerSAO* playersao = StageTwoClientInit(peer_id); if (playersao == NULL) { - errorstream + actionstream << "TOSERVER_CLIENT_READY stage 2 client init failed for peer_id: " << peer_id << std::endl; m_con.DisconnectPeer(peer_id); diff --git a/src/server.cpp b/src/server.cpp index 778a93241..22b7d38f2 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1073,16 +1073,16 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) static_cast(m_env->getPlayer(playername.c_str())); // If failed, cancel - if((playersao == NULL) || (player == NULL)) { - if(player && player->peer_id != 0) { - errorstream<<"Server: "<peer_id != 0) { + actionstream << "Server: Failed to emerge player \"" << playername + << "\" (player allocated to an another client)" << std::endl; DenyAccess_Legacy(peer_id, L"Another client is connected with this " L"name. If your client closed unexpectedly, try again in " L"a minute."); } else { - errorstream<<"Server: "< Date: Mon, 18 May 2015 22:30:25 -0400 Subject: [PATCH 075/670] Split ObjDef/ObjDefManager out to objdef.cpp --- build/android/jni/Android.mk | 1 + src/CMakeLists.txt | 1 + src/mapgen.cpp | 170 +------------------------------- src/mapgen.h | 68 ------------- src/mg_biome.h | 5 +- src/mg_decoration.h | 5 +- src/mg_ore.h | 6 +- src/objdef.cpp | 185 +++++++++++++++++++++++++++++++++++ src/objdef.h | 97 ++++++++++++++++++ src/unittest/test_objdef.cpp | 3 +- src/util/string.h | 4 +- 11 files changed, 298 insertions(+), 247 deletions(-) create mode 100644 src/objdef.cpp create mode 100644 src/objdef.h diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index f78b78b9b..2c574bc41 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -182,6 +182,7 @@ LOCAL_SRC_FILES := \ jni/src/nodemetadata.cpp \ jni/src/nodetimer.cpp \ jni/src/noise.cpp \ + jni/src/objdef.cpp \ jni/src/object_properties.cpp \ jni/src/particles.cpp \ jni/src/pathfinder.cpp \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 89be91413..190f4e9bd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -330,6 +330,7 @@ set(common_SRCS nodemetadata.cpp nodetimer.cpp noise.cpp + objdef.cpp object_properties.cpp pathfinder.cpp player.cpp diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 1de7fca81..7965730e4 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -427,175 +428,8 @@ void GenerateNotifier::getEvents( m_notify_events.clear(); } - /////////////////////////////////////////////////////////////////////////////// - -ObjDefManager::ObjDefManager(IGameDef *gamedef, ObjDefType type) -{ - m_objtype = type; - m_ndef = gamedef ? gamedef->getNodeDefManager() : NULL; -} - - -ObjDefManager::~ObjDefManager() -{ - for (size_t i = 0; i != m_objects.size(); i++) - delete m_objects[i]; -} - - -ObjDefHandle ObjDefManager::add(ObjDef *obj) -{ - assert(obj); - - if (obj->name.length() && getByName(obj->name)) - return OBJDEF_INVALID_HANDLE; - - u32 index = addRaw(obj); - if (index == OBJDEF_INVALID_INDEX) - return OBJDEF_INVALID_HANDLE; - - obj->handle = createHandle(index, m_objtype, obj->uid); - return obj->handle; -} - - -ObjDef *ObjDefManager::get(ObjDefHandle handle) const -{ - u32 index = validateHandle(handle); - return (index != OBJDEF_INVALID_INDEX) ? getRaw(index) : NULL; -} - - -ObjDef *ObjDefManager::set(ObjDefHandle handle, ObjDef *obj) -{ - u32 index = validateHandle(handle); - if (index == OBJDEF_INVALID_INDEX) - return NULL; - - ObjDef *oldobj = setRaw(index, obj); - - obj->uid = oldobj->uid; - obj->index = oldobj->index; - obj->handle = oldobj->handle; - - return oldobj; -} - - -u32 ObjDefManager::addRaw(ObjDef *obj) -{ - size_t nobjects = m_objects.size(); - if (nobjects >= OBJDEF_MAX_ITEMS) - return -1; - - obj->index = nobjects; - - // Ensure UID is nonzero so that a valid handle == OBJDEF_INVALID_HANDLE - // is not possible. The slight randomness bias isn't very significant. - obj->uid = myrand() & OBJDEF_UID_MASK; - if (obj->uid == 0) - obj->uid = 1; - - m_objects.push_back(obj); - - infostream << "ObjDefManager: added " << getObjectTitle() - << ": name=\"" << obj->name - << "\" index=" << obj->index - << " uid=" << obj->uid - << std::endl; - - return nobjects; -} - - -ObjDef *ObjDefManager::getRaw(u32 index) const -{ - return m_objects[index]; -} - - -ObjDef *ObjDefManager::setRaw(u32 index, ObjDef *obj) -{ - ObjDef *old_obj = m_objects[index]; - m_objects[index] = obj; - return old_obj; -} - - -ObjDef *ObjDefManager::getByName(const std::string &name) const -{ - for (size_t i = 0; i != m_objects.size(); i++) { - ObjDef *obj = m_objects[i]; - if (obj && !strcasecmp(name.c_str(), obj->name.c_str())) - return obj; - } - - return NULL; -} - - -void ObjDefManager::clear() -{ - for (size_t i = 0; i != m_objects.size(); i++) - delete m_objects[i]; - - m_objects.clear(); -} - - -u32 ObjDefManager::validateHandle(ObjDefHandle handle) const -{ - ObjDefType type; - u32 index; - u32 uid; - - bool is_valid = - (handle != OBJDEF_INVALID_HANDLE) && - decodeHandle(handle, &index, &type, &uid) && - (type == m_objtype) && - (index < m_objects.size()) && - (m_objects[index]->uid == uid); - - return is_valid ? index : -1; -} - - -ObjDefHandle ObjDefManager::createHandle(u32 index, ObjDefType type, u32 uid) -{ - ObjDefHandle handle = 0; - set_bits(&handle, 0, 18, index); - set_bits(&handle, 18, 6, type); - set_bits(&handle, 24, 7, uid); - - u32 parity = calc_parity(handle); - set_bits(&handle, 31, 1, parity); - - return handle ^ OBJDEF_HANDLE_SALT; -} - - -bool ObjDefManager::decodeHandle(ObjDefHandle handle, u32 *index, - ObjDefType *type, u32 *uid) -{ - handle ^= OBJDEF_HANDLE_SALT; - - u32 parity = get_bits(handle, 31, 1); - set_bits(&handle, 31, 1, 0); - if (parity != calc_parity(handle)) - return false; - - *index = get_bits(handle, 0, 18); - *type = (ObjDefType)get_bits(handle, 18, 6); - *uid = get_bits(handle, 24, 7); - return true; -} - - -/////////////////////////////////////////////////////////////////////////////// - - void MapgenParams::load(const Settings &settings) { std::string seed_str; diff --git a/src/mapgen.h b/src/mapgen.h index b7fecb7a4..351a09bb2 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -186,72 +186,4 @@ struct MapgenFactory { virtual ~MapgenFactory() {} }; -typedef std::map StringMap; -typedef u32 ObjDefHandle; - -#define OBJDEF_INVALID_INDEX ((u32)(-1)) -#define OBJDEF_INVALID_HANDLE 0 -#define OBJDEF_HANDLE_SALT 0x00585e6fu -#define OBJDEF_MAX_ITEMS (1 << 18) -#define OBJDEF_UID_MASK ((1 << 7) - 1) - -enum ObjDefType { - OBJDEF_GENERIC, - OBJDEF_BIOME, - OBJDEF_ORE, - OBJDEF_DECORATION, - OBJDEF_SCHEMATIC, -}; - -class ObjDef { -public: - virtual ~ObjDef() {} - - u32 index; - u32 uid; - ObjDefHandle handle; - std::string name; -}; - -// 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 -class ObjDefManager { -public: - ObjDefManager(IGameDef *gamedef, ObjDefType type); - virtual ~ObjDefManager(); - - virtual const char *getObjectTitle() const { return "ObjDef"; } - - virtual void clear(); - virtual ObjDef *getByName(const std::string &name) const; - - //// Add new/get/set object definitions by handle - virtual ObjDefHandle add(ObjDef *obj); - virtual ObjDef *get(ObjDefHandle handle) const; - virtual ObjDef *set(ObjDefHandle handle, ObjDef *obj); - - //// Raw variants that work on indexes - virtual u32 addRaw(ObjDef *obj); - - // It is generally assumed that getRaw() will always return a valid object - // This won't be true if people do odd things such as call setRaw() with NULL - virtual ObjDef *getRaw(u32 index) const; - virtual ObjDef *setRaw(u32 index, ObjDef *obj); - - size_t getNumObjects() const { return m_objects.size(); } - ObjDefType getType() const { return m_objtype; } - INodeDefManager *getNodeDef() const { return m_ndef; } - - u32 validateHandle(ObjDefHandle handle) const; - static ObjDefHandle createHandle(u32 index, ObjDefType type, u32 uid); - static bool decodeHandle(ObjDefHandle handle, u32 *index, - ObjDefType *type, u32 *uid); - -protected: - INodeDefManager *m_ndef; - std::vector m_objects; - ObjDefType m_objtype; -}; - #endif diff --git a/src/mg_biome.h b/src/mg_biome.h index e289fb16d..8d519f808 100644 --- a/src/mg_biome.h +++ b/src/mg_biome.h @@ -20,9 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MG_BIOME_HEADER #define MG_BIOME_HEADER -#include "mapgen.h" - -struct NoiseParams; +#include "objdef.h" +#include "nodedef.h" enum BiomeType { diff --git a/src/mg_decoration.h b/src/mg_decoration.h index 8ece5d684..056748918 100644 --- a/src/mg_decoration.h +++ b/src/mg_decoration.h @@ -21,9 +21,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #define MG_DECORATION_HEADER #include -#include "mapgen.h" +#include "objdef.h" +#include "noise.h" +#include "nodedef.h" -struct NoiseParams; class Mapgen; class MMVManip; class PseudoRandom; diff --git a/src/mg_ore.h b/src/mg_ore.h index cff1622fb..ffe8cfe50 100644 --- a/src/mg_ore.h +++ b/src/mg_ore.h @@ -20,10 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MG_ORE_HEADER #define MG_ORE_HEADER -#include "util/string.h" -#include "mapgen.h" +#include "objdef.h" +#include "noise.h" +#include "nodedef.h" -struct NoiseParams; class Noise; class Mapgen; class MMVManip; diff --git a/src/objdef.cpp b/src/objdef.cpp new file mode 100644 index 000000000..bdf9c4dfc --- /dev/null +++ b/src/objdef.cpp @@ -0,0 +1,185 @@ +/* +Minetest +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "objdef.h" +#include "util/numeric.h" +#include "debug.h" +#include "log.h" +#include "gamedef.h" + +ObjDefManager::ObjDefManager(IGameDef *gamedef, ObjDefType type) +{ + m_objtype = type; + m_ndef = gamedef ? gamedef->getNodeDefManager() : NULL; +} + + +ObjDefManager::~ObjDefManager() +{ + for (size_t i = 0; i != m_objects.size(); i++) + delete m_objects[i]; +} + + +ObjDefHandle ObjDefManager::add(ObjDef *obj) +{ + assert(obj); + + if (obj->name.length() && getByName(obj->name)) + return OBJDEF_INVALID_HANDLE; + + u32 index = addRaw(obj); + if (index == OBJDEF_INVALID_INDEX) + return OBJDEF_INVALID_HANDLE; + + obj->handle = createHandle(index, m_objtype, obj->uid); + return obj->handle; +} + + +ObjDef *ObjDefManager::get(ObjDefHandle handle) const +{ + u32 index = validateHandle(handle); + return (index != OBJDEF_INVALID_INDEX) ? getRaw(index) : NULL; +} + + +ObjDef *ObjDefManager::set(ObjDefHandle handle, ObjDef *obj) +{ + u32 index = validateHandle(handle); + if (index == OBJDEF_INVALID_INDEX) + return NULL; + + ObjDef *oldobj = setRaw(index, obj); + + obj->uid = oldobj->uid; + obj->index = oldobj->index; + obj->handle = oldobj->handle; + + return oldobj; +} + + +u32 ObjDefManager::addRaw(ObjDef *obj) +{ + size_t nobjects = m_objects.size(); + if (nobjects >= OBJDEF_MAX_ITEMS) + return -1; + + obj->index = nobjects; + + // Ensure UID is nonzero so that a valid handle == OBJDEF_INVALID_HANDLE + // is not possible. The slight randomness bias isn't very significant. + obj->uid = myrand() & OBJDEF_UID_MASK; + if (obj->uid == 0) + obj->uid = 1; + + m_objects.push_back(obj); + + infostream << "ObjDefManager: added " << getObjectTitle() + << ": name=\"" << obj->name + << "\" index=" << obj->index + << " uid=" << obj->uid + << std::endl; + + return nobjects; +} + + +ObjDef *ObjDefManager::getRaw(u32 index) const +{ + return m_objects[index]; +} + + +ObjDef *ObjDefManager::setRaw(u32 index, ObjDef *obj) +{ + ObjDef *old_obj = m_objects[index]; + m_objects[index] = obj; + return old_obj; +} + + +ObjDef *ObjDefManager::getByName(const std::string &name) const +{ + for (size_t i = 0; i != m_objects.size(); i++) { + ObjDef *obj = m_objects[i]; + if (obj && !strcasecmp(name.c_str(), obj->name.c_str())) + return obj; + } + + return NULL; +} + + +void ObjDefManager::clear() +{ + for (size_t i = 0; i != m_objects.size(); i++) + delete m_objects[i]; + + m_objects.clear(); +} + + +u32 ObjDefManager::validateHandle(ObjDefHandle handle) const +{ + ObjDefType type; + u32 index; + u32 uid; + + bool is_valid = + (handle != OBJDEF_INVALID_HANDLE) && + decodeHandle(handle, &index, &type, &uid) && + (type == m_objtype) && + (index < m_objects.size()) && + (m_objects[index]->uid == uid); + + return is_valid ? index : -1; +} + + +ObjDefHandle ObjDefManager::createHandle(u32 index, ObjDefType type, u32 uid) +{ + ObjDefHandle handle = 0; + set_bits(&handle, 0, 18, index); + set_bits(&handle, 18, 6, type); + set_bits(&handle, 24, 7, uid); + + u32 parity = calc_parity(handle); + set_bits(&handle, 31, 1, parity); + + return handle ^ OBJDEF_HANDLE_SALT; +} + + +bool ObjDefManager::decodeHandle(ObjDefHandle handle, u32 *index, + ObjDefType *type, u32 *uid) +{ + handle ^= OBJDEF_HANDLE_SALT; + + u32 parity = get_bits(handle, 31, 1); + set_bits(&handle, 31, 1, 0); + if (parity != calc_parity(handle)) + return false; + + *index = get_bits(handle, 0, 18); + *type = (ObjDefType)get_bits(handle, 18, 6); + *uid = get_bits(handle, 24, 7); + return true; +} diff --git a/src/objdef.h b/src/objdef.h new file mode 100644 index 000000000..9e0c0b001 --- /dev/null +++ b/src/objdef.h @@ -0,0 +1,97 @@ +/* +Minetest +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef OBJDEF_HEADER +#define OBJDEF_HEADER + +#include +#include +#include "irrlichttypes.h" + +class IGameDef; +class INodeDefManager; + +#define OBJDEF_INVALID_INDEX ((u32)(-1)) +#define OBJDEF_INVALID_HANDLE 0 +#define OBJDEF_HANDLE_SALT 0x00585e6fu +#define OBJDEF_MAX_ITEMS (1 << 18) +#define OBJDEF_UID_MASK ((1 << 7) - 1) + +typedef u32 ObjDefHandle; + +enum ObjDefType { + OBJDEF_GENERIC, + OBJDEF_BIOME, + OBJDEF_ORE, + OBJDEF_DECORATION, + OBJDEF_SCHEMATIC, +}; + +class ObjDef { +public: + virtual ~ObjDef() {} + + u32 index; + u32 uid; + ObjDefHandle handle; + std::string name; +}; + +// 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 +class ObjDefManager { +public: + ObjDefManager(IGameDef *gamedef, ObjDefType type); + virtual ~ObjDefManager(); + + virtual const char *getObjectTitle() const { return "ObjDef"; } + + virtual void clear(); + virtual ObjDef *getByName(const std::string &name) const; + + //// Add new/get/set object definitions by handle + virtual ObjDefHandle add(ObjDef *obj); + virtual ObjDef *get(ObjDefHandle handle) const; + virtual ObjDef *set(ObjDefHandle handle, ObjDef *obj); + + //// Raw variants that work on indexes + virtual u32 addRaw(ObjDef *obj); + + // It is generally assumed that getRaw() will always return a valid object + // This won't be true if people do odd things such as call setRaw() with NULL + virtual ObjDef *getRaw(u32 index) const; + virtual ObjDef *setRaw(u32 index, ObjDef *obj); + + size_t getNumObjects() const { return m_objects.size(); } + ObjDefType getType() const { return m_objtype; } + INodeDefManager *getNodeDef() const { return m_ndef; } + + u32 validateHandle(ObjDefHandle handle) const; + static ObjDefHandle createHandle(u32 index, ObjDefType type, u32 uid); + static bool decodeHandle(ObjDefHandle handle, u32 *index, + ObjDefType *type, u32 *uid); + +protected: + INodeDefManager *m_ndef; + std::vector m_objects; + ObjDefType m_objtype; +}; + +#endif diff --git a/src/unittest/test_objdef.cpp b/src/unittest/test_objdef.cpp index ddb3bc60d..df2633b38 100644 --- a/src/unittest/test_objdef.cpp +++ b/src/unittest/test_objdef.cpp @@ -20,8 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "test.h" #include "exceptions.h" -#include "mapgen.h" - +#include "objdef.h" class TestObjDef : public TestBase { public: diff --git a/src/util/string.h b/src/util/string.h index 4ab5cf3f7..b80e3c9a8 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -25,18 +25,20 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include #include #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) +typedef std::map StringMap; + struct FlagDesc { const char *name; u32 flag; }; - // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str); From 43702ec6ac0fae7c8ef04be82bcca72ba9bec017 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 19 May 2015 02:38:48 -0400 Subject: [PATCH 076/670] Fix build with libstdc++ libstdc++ doesn't include inside of , unlike libc++. --- src/objdef.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/objdef.cpp b/src/objdef.cpp index bdf9c4dfc..465bea44c 100644 --- a/src/objdef.cpp +++ b/src/objdef.cpp @@ -17,9 +17,11 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include "objdef.h" #include "util/numeric.h" #include "debug.h" +#include "porting.h" #include "log.h" #include "gamedef.h" From 603297cc352cab685dd01dcd645999624ad17c0b Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 30 Mar 2015 11:55:29 +0100 Subject: [PATCH 077/670] Add texture overriding --- doc/texture_overrides.txt | 35 +++++++++++++++++++++ src/client.cpp | 3 ++ src/nodedef.cpp | 65 +++++++++++++++++++++++++++++++++++++-- src/nodedef.h | 6 +++- src/server.cpp | 7 +++-- 5 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 doc/texture_overrides.txt diff --git a/doc/texture_overrides.txt b/doc/texture_overrides.txt new file mode 100644 index 000000000..559591184 --- /dev/null +++ b/doc/texture_overrides.txt @@ -0,0 +1,35 @@ +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 + +Basic Format +------------ + +Each line in an override.txt file is a rule. It consists of + + nodename face-selector texture + +For example, + + default:dirt_with_grass sides default_stone.png + +You can use ^ operators as usual: + + default:dirt_with_grass sides default_stone.png^[brighten + +Face Selectors +-------------- + +| face-selector | behavior | +|---------------|---------------------------------------------------| +| left | x- | +| right | x+ | +| front | z- | +| back | z+ | +| top | z+ | +| bottom | z- | +| sides | x-, x+, z-, z+ | +| all | All faces. You can also use '*' instead of 'all'. | diff --git a/src/client.cpp b/src/client.cpp index 780b07872..1d0245c45 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1741,6 +1741,9 @@ void Client::afterContentReceived(IrrlichtDevice *device) text = wgettext("Initializing nodes..."); draw_load_screen(text, device, guienv, 0, 72); m_nodedef->updateAliases(m_itemdef); + std::string texture_path = g_settings->get("texture_path"); + if (texture_path != "" && fs::IsDir(texture_path)) + m_nodedef->applyTextureOverrides(texture_path + DIR_DELIM + "override.txt"); m_nodedef->setNodeRegistrationStatus(true); m_nodedef->runNodeResolveCallbacks(); delete[] text; diff --git a/src/nodedef.cpp b/src/nodedef.cpp index ac432d196..6c2e96c4f 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "exceptions.h" #include "debug.h" #include "gamedef.h" +#include // Used in applyTextureOverrides() /* NodeBox @@ -397,6 +398,7 @@ public: virtual content_t set(const std::string &name, const ContentFeatures &def); virtual content_t allocateDummy(const std::string &name); virtual void updateAliases(IItemDefManager *idef); + virtual void applyTextureOverrides(const std::string &override_filepath); virtual void updateTextures(IGameDef *gamedef, void (*progress_cbk)(void *progress_args, u32 progress, u32 max_progress), void *progress_cbk_args); @@ -670,7 +672,7 @@ content_t CNodeDefManager::set(const std::string &name, const ContentFeatures &d j = m_group_to_items.find(group_name); if (j == m_group_to_items.end()) { m_group_to_items[group_name].push_back( - std::make_pair(id, i->second)); + std::make_pair(id, i->second)); } else { GroupItems &items = j->second; items.push_back(std::make_pair(id, i->second)); @@ -700,7 +702,66 @@ void CNodeDefManager::updateAliases(IItemDefManager *idef) content_t id; if (m_name_id_mapping.getId(convert_to, id)) { m_name_id_mapping_with_aliases.insert( - std::make_pair(name, id)); + std::make_pair(name, id)); + } + } +} + +void CNodeDefManager::applyTextureOverrides(const std::string &override_filepath) +{ + infostream << "CNodeDefManager::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++; + if (trim(line) == "") + 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; + } + + content_t id; + if (!getId(splitted[0], id)) { + errorstream << override_filepath + << ":" << line_c << " Could not apply texture override \"" + << line << "\": Unknown node \"" + << splitted[0] << "\"" << std::endl; + continue; + } + + 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 (int i = 0; i < 6; 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; } } } diff --git a/src/nodedef.h b/src/nodedef.h index 68f6c8c37..3a5e5228d 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -335,6 +335,11 @@ public: */ virtual void updateAliases(IItemDefManager *idef)=0; + /* + Override textures from servers with ones specified in texturepack/override.txt + */ + virtual void applyTextureOverrides(const std::string &override_filepath)=0; + /* Update tile textures to latest return values of TextueSource. */ @@ -378,4 +383,3 @@ public: }; #endif - diff --git a/src/server.cpp b/src/server.cpp index 22b7d38f2..2a34c8675 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -335,6 +335,11 @@ Server::Server( // Apply item aliases in the node definition manager m_nodedef->updateAliases(m_itemdef); + // Apply texture overrides from texturepack/override.txt + std::string texture_path = g_settings->get("texture_path"); + if (texture_path != "" && fs::IsDir(texture_path)) + m_nodedef->applyTextureOverrides(texture_path + DIR_DELIM + "override.txt"); + m_nodedef->setNodeRegistrationStatus(true); // Perform pending node name resolutions @@ -3397,5 +3402,3 @@ void dedicated_server_loop(Server &server, bool &kill) } } } - - From da34a2b33e1f600ec11172f599384b9a92835403 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 19 May 2015 02:24:14 -0400 Subject: [PATCH 078/670] Replace instances of std::map with StringMap Also, clean up surrounding code style Replace by-value parameter passing with const refs when possible Fix post-increment of iterators --- src/ban.cpp | 49 ++++++++++------------- src/ban.h | 5 +-- src/client.cpp | 31 +++++++-------- src/client.h | 8 ++-- src/content_mapnode.cpp | 11 +++--- src/game.cpp | 26 ++++++------ src/guiEngine.cpp | 2 +- src/guiEngine.h | 2 +- src/guiFileSelectMenu.cpp | 2 +- src/guiFormSpecMenu.cpp | 2 +- src/guiFormSpecMenu.h | 2 +- src/httpfetch.cpp | 9 ++--- src/httpfetch.h | 5 +-- src/itemdef.cpp | 51 ++++++++++++------------ src/network/serverpackethandler.cpp | 8 ++-- src/nodemetadata.cpp | 16 ++++---- src/nodemetadata.h | 9 ++--- src/script/cpp_api/s_mainmenu.cpp | 6 +-- src/script/cpp_api/s_mainmenu.h | 4 +- src/script/cpp_api/s_node.cpp | 6 +-- src/script/cpp_api/s_node.h | 5 +-- src/script/cpp_api/s_player.cpp | 21 ++++++---- src/script/cpp_api/s_player.h | 10 ++--- src/script/lua_api/l_nodemeta.cpp | 22 ++++++----- src/shader.cpp | 61 ++++++++++++++--------------- 25 files changed, 180 insertions(+), 193 deletions(-) diff --git a/src/ban.cpp b/src/ban.cpp index 55d9b22fe..7c1a68d45 100644 --- a/src/ban.cpp +++ b/src/ban.cpp @@ -56,7 +56,7 @@ void BanManager::load() infostream<<"BanManager: failed loading from "<::iterator - i = m_ips.begin(); - i != m_ips.end(); i++) - { - ss << i->first << "|" << i->second << "\n"; - } + for (StringMap::iterator it = m_ips.begin(); it != m_ips.end(); ++it) + ss << it->first << "|" << it->second << "\n"; - if(!fs::safeWriteToFile(m_banfilepath, ss.str())) { - infostream<<"BanManager: failed saving to "<::iterator - i = m_ips.begin(); - i != m_ips.end(); i++) - { - if(i->first == ip_or_name || i->second == ip_or_name - || ip_or_name == "") - s += i->first + "|" + i->second + ", "; + for (StringMap::iterator it = m_ips.begin(); it != m_ips.end(); ++it) { + if (it->first == ip_or_name || it->second == ip_or_name + || ip_or_name == "") { + s += it->first + "|" + it->second + ", "; + } } - s = s.substr(0, s.size()-2); + s = s.substr(0, s.size() - 2); return s; } std::string BanManager::getBanName(const std::string &ip) { JMutexAutoLock lock(m_mutex); - std::map::iterator i = m_ips.find(ip); - if(i == m_ips.end()) + StringMap::iterator it = m_ips.find(ip); + if (it == m_ips.end()) return ""; - return i->second; + return it->second; } void BanManager::add(const std::string &ip, const std::string &name) @@ -133,19 +127,16 @@ void BanManager::add(const std::string &ip, const std::string &name) void BanManager::remove(const std::string &ip_or_name) { JMutexAutoLock lock(m_mutex); - for(std::map::iterator - i = m_ips.begin(); - i != m_ips.end();) - { - if((i->first == ip_or_name) || (i->second == ip_or_name)) { - m_ips.erase(i++); + for (StringMap::iterator it = m_ips.begin(); it != m_ips.end();) { + if ((it->first == ip_or_name) || (it->second == ip_or_name)) { + m_ips.erase(it++); } else { - ++i; + ++it; } } m_modified = true; } - + bool BanManager::isModified() { diff --git a/src/ban.h b/src/ban.h index 02a472f51..5db7179de 100644 --- a/src/ban.h +++ b/src/ban.h @@ -20,8 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef BAN_HEADER #define BAN_HEADER -#include -#include +#include "util/string.h" #include "jthread/jthread.h" #include "jthread/jmutex.h" #include "exceptions.h" @@ -43,7 +42,7 @@ public: private: JMutex m_mutex; std::string m_banfilepath; - std::map m_ips; + StringMap m_ips; bool m_modified; }; diff --git a/src/client.cpp b/src/client.cpp index 1d0245c45..de8131875 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1102,7 +1102,7 @@ void Client::sendRemovedSounds(std::vector &soundList) } void Client::sendNodemetaFields(v3s16 p, const std::string &formname, - const std::map &fields) + const StringMap &fields) { size_t fields_size = fields.size(); @@ -1112,10 +1112,10 @@ void Client::sendNodemetaFields(v3s16 p, const std::string &formname, pkt << p << formname << (u16) (fields_size & 0xFFFF); - for(std::map::const_iterator - i = fields.begin(); i != fields.end(); i++) { - const std::string &name = i->first; - const std::string &value = i->second; + StringMap::const_iterator it; + for (it = fields.begin(); it != fields.end(); ++it) { + const std::string &name = it->first; + const std::string &value = it->second; pkt << name; pkt.putLongString(value); } @@ -1124,7 +1124,7 @@ void Client::sendNodemetaFields(v3s16 p, const std::string &formname, } void Client::sendInventoryFields(const std::string &formname, - const std::map &fields) + const StringMap &fields) { size_t fields_size = fields.size(); FATAL_ERROR_IF(fields_size > 0xFFFF, "Unsupported number of inventory fields"); @@ -1132,10 +1132,10 @@ void Client::sendInventoryFields(const std::string &formname, NetworkPacket pkt(TOSERVER_INVENTORY_FIELDS, 0); pkt << formname << (u16) (fields_size & 0xFFFF); - for(std::map::const_iterator - i = fields.begin(); i != fields.end(); i++) { - const std::string &name = i->first; - const std::string &value = i->second; + StringMap::const_iterator it; + for (it = fields.begin(); it != fields.end(); ++it) { + const std::string &name = it->first; + const std::string &value = it->second; pkt << name; pkt.putLongString(value); } @@ -1918,14 +1918,13 @@ ParticleManager* Client::getParticleManager() scene::IAnimatedMesh* Client::getMesh(const std::string &filename) { - std::map::const_iterator i = - m_mesh_data.find(filename); - if(i == m_mesh_data.end()){ - errorstream<<"Client::getMesh(): Mesh not found: \""<second; + const std::string &data = it->second; scene::ISceneManager *smgr = m_device->getSceneManager(); // Create the mesh, remove it from cache and return it diff --git a/src/client.h b/src/client.h index 87cf8ce45..56f040909 100644 --- a/src/client.h +++ b/src/client.h @@ -405,13 +405,13 @@ public: void interact(u8 action, const PointedThing& pointed); void sendNodemetaFields(v3s16 p, const std::string &formname, - const std::map &fields); + const StringMap &fields); void sendInventoryFields(const std::string &formname, - const std::map &fields); + const StringMap &fields); void sendInventoryAction(InventoryAction *a); void sendChatMessage(const std::wstring &message); void sendChangePassword(const std::string &oldpassword, - const std::string &newpassword); + const std::string &newpassword); void sendDamage(u8 damage); void sendBreath(u16 breath); void sendRespawn(); @@ -648,7 +648,7 @@ private: std::map m_detached_inventories; // Storage for mesh data for creating multiple instances of the same mesh - std::map m_mesh_data; + StringMap m_mesh_data; // own state LocalClientState m_state; diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 44d0b8e38..5e2a5c816 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapnode.h" #include "nodedef.h" #include "nameidmapping.h" -#include +#include "util/string.h" /* Legacy node content type IDs @@ -218,14 +218,13 @@ public: } std::string get(const std::string &old) { - std::map::const_iterator i; - i = old_to_new.find(old); - if(i == old_to_new.end()) + StringMap::const_iterator it = old_to_new.find(old); + if (it == old_to_new.end()) return ""; - return i->second; + return it->second; } private: - std::map old_to_new; + StringMap old_to_new; }; NewNameGetter newnamegetter; diff --git a/src/game.cpp b/src/game.cpp index e27ec37dd..7e3ab802c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -87,11 +87,11 @@ struct TextDestNodeMetadata : public TextDest { std::string ntext = wide_to_narrow(text); infostream << "Submitting 'text' field of node at (" << m_p.X << "," << m_p.Y << "," << m_p.Z << "): " << ntext << std::endl; - std::map fields; + StringMap fields; fields["text"] = ntext; m_client->sendNodemetaFields(m_p, "", fields); } - void gotText(std::map fields) + void gotText(const StringMap &fields) { m_client->sendNodemetaFields(m_p, "", fields); } @@ -111,7 +111,7 @@ struct TextDestPlayerInventory : public TextDest { m_client = client; m_formname = formname; } - void gotText(std::map fields) + void gotText(const StringMap &fields) { m_client->sendInventoryFields(m_formname, fields); } @@ -138,7 +138,7 @@ struct LocalFormspecHandler : public TextDest { errorstream << "LocalFormspecHandler::gotText old style message received" << std::endl; } - void gotText(std::map fields) + void gotText(const StringMap &fields) { if (m_formname == "MT_PAUSE_MENU") { if (fields.find("btn_sound") != fields.end()) { @@ -180,9 +180,9 @@ struct LocalFormspecHandler : public TextDest { if ((fields.find("btn_send") != fields.end()) || (fields.find("quit") != fields.end())) { - if (fields.find("f_text") != fields.end()) { - m_client->typeChatMessage(narrow_to_wide(fields["f_text"])); - } + StringMap::const_iterator it = fields.find("f_text"); + if (it != fields.end()) + m_client->typeChatMessage(narrow_to_wide(it->second)); return; } @@ -210,12 +210,14 @@ struct LocalFormspecHandler : public TextDest { return; } - errorstream << "LocalFormspecHandler::gotText unhandled >" << m_formname << "< event" << std::endl; - int i = 0; + errorstream << "LocalFormspecHandler::gotText unhandled >" + << m_formname << "< event" << std::endl; - for (std::map::iterator iter = fields.begin(); - iter != fields.end(); iter++) { - errorstream << "\t" << i << ": " << iter->first << "=" << iter->second << std::endl; + int i = 0; + StringMap::const_iterator it; + for (it = fields.begin(); it != fields.end(); ++it) { + errorstream << "\t" << i << ": " << it->first + << "=" << it->second << std::endl; i++; } } diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp index 752f9ddd2..3248ef112 100644 --- a/src/guiEngine.cpp +++ b/src/guiEngine.cpp @@ -53,7 +53,7 @@ TextDestGuiEngine::TextDestGuiEngine(GUIEngine* engine) } /******************************************************************************/ -void TextDestGuiEngine::gotText(std::map fields) +void TextDestGuiEngine::gotText(const StringMap &fields) { m_engine->getScriptIface()->handleMainMenuButtons(fields); } diff --git a/src/guiEngine.h b/src/guiEngine.h index e57573220..d527f7222 100644 --- a/src/guiEngine.h +++ b/src/guiEngine.h @@ -73,7 +73,7 @@ public: * receive fields transmitted by guiFormSpecMenu * @param fields map containing formspec field elements currently active */ - void gotText(std::map fields); + void gotText(const StringMap &fields); /** * receive text/events transmitted by guiFormSpecMenu diff --git a/src/guiFileSelectMenu.cpp b/src/guiFileSelectMenu.cpp index e98b025c6..9b43ab602 100644 --- a/src/guiFileSelectMenu.cpp +++ b/src/guiFileSelectMenu.cpp @@ -84,7 +84,7 @@ void GUIFileSelectMenu::drawMenu() void GUIFileSelectMenu::acceptInput() { if ((m_text_dst != 0) && (this->m_formname != "")){ - std::map fields; + StringMap fields; if (m_accepted) fields[m_formname + "_accepted"] = wide_to_narrow(m_fileOpenDialog->getFileName()); diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 5f67bb22a..d53c9b3af 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -2579,7 +2579,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) { if(m_text_dst) { - std::map fields; + StringMap fields; if (quitmode == quit_mode_accept) { fields["quit"] = "true"; diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index 73dc7af62..f72595782 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -56,7 +56,7 @@ struct TextDest virtual ~TextDest() {}; // This is deprecated I guess? -celeron55 virtual void gotText(std::wstring text){} - virtual void gotText(std::map fields) = 0; + virtual void gotText(const StringMap &fields) = 0; virtual void setFormName(std::string formname) { m_formname = formname;}; diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index c60e141fc..56cdad2b1 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -266,8 +266,7 @@ HTTPFetchOngoing::HTTPFetchOngoing(HTTPFetchRequest request_, CurlHandlePool *po curl_easy_setopt(curl, CURLOPT_HTTPGET, 1); } else if (request.multipart) { curl_httppost *last = NULL; - for (std::map::iterator it = - request.post_fields.begin(); + for (StringMap::iterator it = request.post_fields.begin(); it != request.post_fields.end(); ++it) { curl_formadd(&post, &last, CURLFORM_NAMELENGTH, it->first.size(), @@ -282,10 +281,8 @@ HTTPFetchOngoing::HTTPFetchOngoing(HTTPFetchRequest request_, CurlHandlePool *po } else if (request.post_data.empty()) { curl_easy_setopt(curl, CURLOPT_POST, 1); std::string str; - for (std::map::iterator it = - request.post_fields.begin(); - it != request.post_fields.end(); - ++it) { + for (StringMap::iterator it = request.post_fields.begin(); + it != request.post_fields.end(); ++it) { if (str != "") str += "&"; str += urlencode(it->first); diff --git a/src/httpfetch.h b/src/httpfetch.h index 50a4c93d8..c44c8d2d3 100644 --- a/src/httpfetch.h +++ b/src/httpfetch.h @@ -20,9 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef HTTPFETCH_HEADER #define HTTPFETCH_HEADER -#include #include -#include +#include "util/string.h" #include "config.h" // Can be used in place of "caller" in asynchronous transfers to discard result @@ -54,7 +53,7 @@ struct HTTPFetchRequest // POST fields. Fields are escaped properly. // If this is empty a GET request is done instead. - std::map post_fields; + StringMap post_fields; // Raw POST data, overrides post_fields. std::string post_data; diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 95c1e47fc..0133b1b3f 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -280,26 +280,23 @@ public: } virtual std::string getAlias(const std::string &name) const { - std::map::const_iterator i; - i = m_aliases.find(name); - if(i != m_aliases.end()) - return i->second; + StringMap::const_iterator it = m_aliases.find(name); + if (it != m_aliases.end()) + return it->second; return name; } virtual std::set getAll() const { std::set result; - for(std::map::const_iterator - i = m_item_definitions.begin(); - i != m_item_definitions.end(); i++) - { - result.insert(i->first); + for(std::map::const_iterator + it = m_item_definitions.begin(); + it != m_item_definitions.end(); ++it) { + result.insert(it->first); } - for(std::map::const_iterator - i = m_aliases.begin(); - i != m_aliases.end(); i++) - { - result.insert(i->first); + for (StringMap::const_iterator + it = m_aliases.begin(); + it != m_aliases.end(); ++it) { + result.insert(it->first); } return result; } @@ -571,22 +568,24 @@ public: writeU8(os, 0); // version u16 count = m_item_definitions.size(); writeU16(os, count); - for(std::map::const_iterator - i = m_item_definitions.begin(); - i != m_item_definitions.end(); i++) - { - ItemDefinition *def = i->second; + + for (std::map::const_iterator + it = m_item_definitions.begin(); + it != m_item_definitions.end(); ++it) { + 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); - os<::const_iterator - i = m_aliases.begin(); i != m_aliases.end(); i++) - { - os<first); - os<second); + + for (StringMap::const_iterator + it = m_aliases.begin(); + it != m_aliases.end(); ++it) { + os << serializeString(it->first); + os << serializeString(it->second); } } void deSerialize(std::istream &is) @@ -633,7 +632,7 @@ private: // Key is name std::map m_item_definitions; // Aliases - std::map m_aliases; + StringMap m_aliases; #ifndef SERVER // The id of the thread that is allowed to use irrlicht directly threadid_t m_main_thread; diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index ea1528c64..f658e106f 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -192,7 +192,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) { std::string reason; - if(m_script->on_prejoinplayer(playername, addr_s, 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: " @@ -480,7 +480,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) { std::string reason; - if (m_script->on_prejoinplayer(playername, addr_s, 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: " @@ -1742,7 +1742,7 @@ void Server::handleCommand_NodeMetaFields(NetworkPacket* pkt) *pkt >> p >> formname >> num; - std::map fields; + StringMap fields; for (u16 k = 0; k < num; k++) { std::string fieldname; *pkt >> fieldname; @@ -1792,7 +1792,7 @@ void Server::handleCommand_InventoryFields(NetworkPacket* pkt) *pkt >> formname >> num; - std::map fields; + StringMap fields; for (u16 k = 0; k < num; k++) { std::string fieldname; *pkt >> fieldname; diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index bd54d2256..d4da7a5ed 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -45,10 +45,11 @@ void NodeMetadata::serialize(std::ostream &os) const { int num_vars = m_stringvars.size(); writeU32(os, num_vars); - for(std::map::const_iterator - i = m_stringvars.begin(); i != m_stringvars.end(); i++){ - os<first); - os<second); + for (StringMap::const_iterator + it = m_stringvars.begin(); + it != m_stringvars.end(); ++it) { + os << serializeString(it->first); + os << serializeLongString(it->second); } m_inventory->serialize(os); @@ -203,11 +204,10 @@ void NodeMetadataList::clear() std::string NodeMetadata::getString(const std::string &name, unsigned short recursion) const { - std::map::const_iterator it; - it = m_stringvars.find(name); - if (it == m_stringvars.end()) { + StringMap::const_iterator it = m_stringvars.find(name); + if (it == m_stringvars.end()) return ""; - } + return resolveString(it->second, recursion); } diff --git a/src/nodemetadata.h b/src/nodemetadata.h index acd45bdf9..8e84e5af3 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -21,10 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #define NODEMETADATA_HEADER #include "irr_v3d.h" -#include #include #include -#include +#include "util/string.h" /* NodeMetadata stores arbitary amounts of data for special blocks. @@ -54,19 +53,19 @@ public: void setString(const std::string &name, const std::string &var); // Support variable names in values std::string resolveString(const std::string &str, unsigned short recursion = 0) const; - std::map getStrings() const + StringMap getStrings() const { return m_stringvars; } // The inventory - Inventory* getInventory() + Inventory *getInventory() { return m_inventory; } private: - std::map m_stringvars; + StringMap m_stringvars; Inventory *m_inventory; }; diff --git a/src/script/cpp_api/s_mainmenu.cpp b/src/script/cpp_api/s_mainmenu.cpp index ef8cea6c9..0bb247fa0 100644 --- a/src/script/cpp_api/s_mainmenu.cpp +++ b/src/script/cpp_api/s_mainmenu.cpp @@ -53,7 +53,7 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text) scriptError(); } -void ScriptApiMainMenu::handleMainMenuButtons(std::map fields) +void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields) { SCRIPTAPI_PRECHECKHEADER @@ -69,8 +69,8 @@ void ScriptApiMainMenu::handleMainMenuButtons(std::map // Convert fields to a Lua table lua_newtable(L); - std::map::const_iterator it; - for (it = fields.begin(); it != fields.end(); it++){ + StringMap::const_iterator it; + for (it = fields.begin(); it != fields.end(); ++it) { const std::string &name = it->first; const std::string &value = it->second; lua_pushstring(L, name.c_str()); diff --git a/src/script/cpp_api/s_mainmenu.h b/src/script/cpp_api/s_mainmenu.h index 53dcd37e9..6994b578b 100644 --- a/src/script/cpp_api/s_mainmenu.h +++ b/src/script/cpp_api/s_mainmenu.h @@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define S_MAINMENU_H_ #include "cpp_api/s_base.h" -#include +#include "util/string.h" class ScriptApiMainMenu : virtual public ScriptApiBase @@ -43,7 +43,7 @@ public: * process field data recieved from formspec * @param fields data in field format */ - void handleMainMenuButtons(std::map fields); + void handleMainMenuButtons(const StringMap &fields); }; #endif /* S_MAINMENU_H_ */ diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp index e3d3fb58b..7df712ca0 100644 --- a/src/script/cpp_api/s_node.cpp +++ b/src/script/cpp_api/s_node.cpp @@ -200,7 +200,7 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) void ScriptApiNode::node_on_receive_fields(v3s16 p, const std::string &formname, - const std::map &fields, + const StringMap &fields, ServerActiveObject *sender) { SCRIPTAPI_PRECHECKHEADER @@ -220,8 +220,8 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p, push_v3s16(L, p); // pos lua_pushstring(L, formname.c_str()); // formname lua_newtable(L); // fields - std::map::const_iterator it; - for (it = fields.begin(); it != fields.end(); it++){ + StringMap::const_iterator it; + for (it = fields.begin(); it != fields.end(); it++) { const std::string &name = it->first; const std::string &value = it->second; lua_pushstring(L, name.c_str()); diff --git a/src/script/cpp_api/s_node.h b/src/script/cpp_api/s_node.h index b3a6c83b5..fe1180cb3 100644 --- a/src/script/cpp_api/s_node.h +++ b/src/script/cpp_api/s_node.h @@ -20,11 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef S_NODE_H_ #define S_NODE_H_ -#include - #include "irr_v3d.h" #include "cpp_api/s_base.h" #include "cpp_api/s_nodemeta.h" +#include "util/string.h" struct MapNode; class ServerActiveObject; @@ -47,7 +46,7 @@ public: bool node_on_timer(v3s16 p, MapNode node, f32 dtime); void node_on_receive_fields(v3s16 p, const std::string &formname, - const std::map &fields, + const StringMap &fields, ServerActiveObject *sender); void node_falling_update(v3s16 p); void node_falling_update_single(v3s16 p); diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index d56766824..9b2c3753c 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -83,7 +83,10 @@ bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player) return positioning_handled_by_some; } -bool ScriptApiPlayer::on_prejoinplayer(std::string name, std::string ip, std::string &reason) +bool ScriptApiPlayer::on_prejoinplayer( + const std::string &name, + const std::string &ip, + std::string *reason) { SCRIPTAPI_PRECHECKHEADER @@ -94,7 +97,7 @@ bool ScriptApiPlayer::on_prejoinplayer(std::string name, std::string ip, std::st lua_pushstring(L, ip.c_str()); script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR); if (lua_isstring(L, -1)) { - reason.assign(lua_tostring(L, -1)); + reason->assign(lua_tostring(L, -1)); return true; } return false; @@ -142,7 +145,7 @@ void ScriptApiPlayer::on_cheat(ServerActiveObject *player, void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player, const std::string &formname, - const std::map &fields) + const StringMap &fields) { SCRIPTAPI_PRECHECKHEADER @@ -156,17 +159,19 @@ void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player, lua_pushstring(L, formname.c_str()); // param 3 lua_newtable(L); - for(std::map::const_iterator - i = fields.begin(); i != fields.end(); i++){ - const std::string &name = i->first; - const std::string &value = i->second; + StringMap::const_iterator it; + for (it = fields.begin(); it != fields.end(); ++it) { + const std::string &name = it->first; + const std::string &value = it->second; lua_pushstring(L, name.c_str()); lua_pushlstring(L, value.c_str(), value.size()); lua_settable(L, -3); } script_run_callbacks(L, 3, RUN_CALLBACKS_MODE_OR_SC); } -ScriptApiPlayer::~ScriptApiPlayer() { + +ScriptApiPlayer::~ScriptApiPlayer() +{ } diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h index a0f764cd5..9c8d1d1ad 100644 --- a/src/script/cpp_api/s_player.h +++ b/src/script/cpp_api/s_player.h @@ -20,10 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef S_PLAYER_H_ #define S_PLAYER_H_ -#include - #include "cpp_api/s_base.h" #include "irr_v3d.h" +#include "util/string.h" struct ToolCapabilities; @@ -36,17 +35,16 @@ public: void on_newplayer(ServerActiveObject *player); void on_dieplayer(ServerActiveObject *player); bool on_respawnplayer(ServerActiveObject *player); - bool on_prejoinplayer(std::string name, std::string ip, std::string &reason); + bool on_prejoinplayer(const std::string &name, const std::string &ip, + std::string *reason); void on_joinplayer(ServerActiveObject *player); void on_leaveplayer(ServerActiveObject *player); void on_cheat(ServerActiveObject *player, const std::string &cheat_type); bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter, float time_from_last_punch, const ToolCapabilities *toolcap, v3f dir, s16 damage); - void on_playerReceiveFields(ServerActiveObject *player, - const std::string &formname, - const std::map &fields); + const std::string &formname, const StringMap &fields); }; diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 906cc3172..6cdbe5c68 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -190,32 +190,34 @@ int NodeMetaRef::l_to_table(lua_State *L) NodeMetaRef *ref = checkobject(L, 1); NodeMetadata *meta = getmeta(ref, true); - if(meta == NULL){ + if (meta == NULL) { lua_pushnil(L); return 1; } lua_newtable(L); + // fields lua_newtable(L); { - std::map fields = meta->getStrings(); - for(std::map::const_iterator - i = fields.begin(); i != fields.end(); i++){ - const std::string &name = i->first; - const std::string &value = i->second; + StringMap fields = meta->getStrings(); + for (StringMap::const_iterator + it = fields.begin(); it != fields.end(); ++it) { + const std::string &name = it->first; + const std::string &value = it->second; lua_pushlstring(L, name.c_str(), name.size()); lua_pushlstring(L, value.c_str(), value.size()); lua_settable(L, -3); } } lua_setfield(L, -2, "fields"); + // inventory lua_newtable(L); Inventory *inv = meta->getInventory(); - if(inv){ - std::vector lists = inv->getLists(); - for(std::vector::const_iterator - i = lists.begin(); i != lists.end(); i++){ + if (inv) { + std::vector lists = inv->getLists(); + for(std::vector::const_iterator + i = lists.begin(); i != lists.end(); i++) { push_inventory_list(L, inv, (*i)->getName().c_str()); lua_setfield(L, -2, (*i)->getName().c_str()); } diff --git a/src/shader.cpp b/src/shader.cpp index ea2de3f1e..a467c2ea9 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -103,10 +103,8 @@ std::string getShaderPath(const std::string &name_of_shader, class SourceShaderCache { public: - void insert(const std::string &name_of_shader, - const std::string &filename, - const std::string &program, - bool prefer_local) + void insert(const std::string &name_of_shader, const std::string &filename, + const std::string &program, bool prefer_local) { std::string combined = name_of_shader + DIR_DELIM + filename; // Try to use local shader instead if asked to @@ -122,42 +120,43 @@ public: } m_programs[combined] = program; } + std::string get(const std::string &name_of_shader, - const std::string &filename) + const std::string &filename) { std::string combined = name_of_shader + DIR_DELIM + filename; - std::map::iterator n; - n = m_programs.find(combined); - if(n != m_programs.end()) + StringMap::iterator n = m_programs.find(combined); + if (n != m_programs.end()) return n->second; return ""; } + // Primarily fetches from cache, secondarily tries to read from filesystem std::string getOrLoad(const std::string &name_of_shader, - const std::string &filename) + const std::string &filename) { std::string combined = name_of_shader + DIR_DELIM + filename; - std::map::iterator n; - n = m_programs.find(combined); - if(n != m_programs.end()) + StringMap::iterator n = m_programs.find(combined); + if (n != m_programs.end()) return n->second; std::string path = getShaderPath(name_of_shader, filename); - if(path == ""){ - infostream<<"SourceShaderCache::getOrLoad(): No path found for \"" - < m_programs; + StringMap m_programs; + std::string readFile(const std::string &path) { std::ifstream is(path.c_str(), std::ios::binary); @@ -274,23 +273,23 @@ public: The id 0 points to a null shader. Its material is EMT_SOLID. */ - u32 getShaderIdDirect(const std::string &name, + u32 getShaderIdDirect(const std::string &name, const u8 material_type, const u8 drawtype); /* If shader specified by the name pointed by the id doesn't - exist, create it, then return id. + exist, create it, then return id. Can be called from any thread. If called from some other thread and not found in cache, the call is queued to the main thread for processing. */ - + u32 getShader(const std::string &name, const u8 material_type, const u8 drawtype); - + ShaderInfo getShaderInfo(u32 id); - + // Processes queued shader requests from other threads. // Shall be called from the main thread. void processQueue(); @@ -391,7 +390,7 @@ ShaderSource::~ShaderSource() } } -u32 ShaderSource::getShader(const std::string &name, +u32 ShaderSource::getShader(const std::string &name, const u8 material_type, const u8 drawtype) { /* @@ -435,7 +434,7 @@ u32 ShaderSource::getShader(const std::string &name, /* This method generates all the shaders */ -u32 ShaderSource::getShaderIdDirect(const std::string &name, +u32 ShaderSource::getShaderIdDirect(const std::string &name, const u8 material_type, const u8 drawtype) { //infostream<<"getShaderIdDirect(): name=\""<getBool("enable_shaders"); if(!enable_shaders) return shaderinfo; @@ -648,7 +647,7 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype, "NDT_FIRELIKE", "NDT_GLASSLIKE_FRAMED_OPTIONAL" }; - + for (int i = 0; i < 14; i++){ shaders_header += "#define "; shaders_header += drawTypes[i]; @@ -741,10 +740,10 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype, shaders_header += "#define ENABLE_WAVING_LEAVES "; if (g_settings->getBool("enable_waving_leaves")) shaders_header += "1\n"; - else + else shaders_header += "0\n"; - shaders_header += "#define ENABLE_WAVING_PLANTS "; + shaders_header += "#define ENABLE_WAVING_PLANTS "; if (g_settings->getBool("enable_waving_plants")) shaders_header += "1\n"; else From 2853b40de13c69866595baf72186abb4e89e0489 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 20 May 2015 19:58:27 +0200 Subject: [PATCH 079/670] Fix documentation for texture override face selector behaviour --- doc/texture_overrides.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/texture_overrides.txt b/doc/texture_overrides.txt index 559591184..1a4e11a3c 100644 --- a/doc/texture_overrides.txt +++ b/doc/texture_overrides.txt @@ -29,7 +29,7 @@ Face Selectors | right | x+ | | front | z- | | back | z+ | -| top | z+ | -| bottom | z- | +| top | y+ | +| bottom | y- | | sides | x-, x+, z-, z+ | | all | All faces. You can also use '*' instead of 'all'. | From 9facb40738e7c51c838ad2ccffd96028862160cb Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 21 May 2015 18:58:39 +0200 Subject: [PATCH 080/670] Don't ignore nametag attribute change message for newer versions This allows newer versions to add additional information that isn't read by us, but still in a backwards compatible manner. --- src/content_cao.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index d80804d4a..9ee81e63f 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1716,17 +1716,15 @@ void GenericCAO::processMessage(const std::string &data) m_armor_groups[name] = rating; } } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) { - u8 version = readU8(is); // forward compatibility - if (version == 1) { - m_nametag_color = readARGB8(is); - if (m_textnode != NULL) { - m_textnode->setTextColor(m_nametag_color); + readU8(is); // version + m_nametag_color = readARGB8(is); + if (m_textnode != NULL) { + m_textnode->setTextColor(m_nametag_color); - // Enforce hiding nametag, - // because if freetype is enabled, a grey - // shadow can remain. - m_textnode->setVisible(m_nametag_color.getAlpha() > 0); - } + // Enforce hiding nametag, + // because if freetype is enabled, a grey + // shadow can remain. + m_textnode->setVisible(m_nametag_color.getAlpha() > 0); } } } From e13d2bafc6d0a4fb0d42cf9c229012f4a4f17131 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 22 May 2015 20:22:55 +0200 Subject: [PATCH 081/670] Deny empty username early in the protocol Thanks to @UltimateNate for pointing this out :) --- src/network/serverpackethandler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index f658e106f..4633aba86 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -164,9 +164,11 @@ void Server::handleCommand_Init(NetworkPacket* pkt) */ const char* playername = playerName.c_str(); - if (playerName.size() > PLAYERNAME_SIZE) { - actionstream << "Server: Player with an too long name " - << "tried to connect from " << addr_s << std::endl; + 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); return; } From 39869aaa25ca577faa0da2b6cb83db6db7234342 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Fri, 22 May 2015 18:26:18 +0200 Subject: [PATCH 082/670] Fix Windows build, clean up included headers Also fix a startup error caused by s_security.cpp --- src/objdef.cpp | 3 --- src/objdef.h | 4 +--- src/script/cpp_api/s_security.cpp | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/objdef.cpp b/src/objdef.cpp index 465bea44c..08d6844fc 100644 --- a/src/objdef.cpp +++ b/src/objdef.cpp @@ -17,11 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include #include "objdef.h" #include "util/numeric.h" -#include "debug.h" -#include "porting.h" #include "log.h" #include "gamedef.h" diff --git a/src/objdef.h b/src/objdef.h index 9e0c0b001..65e5c0176 100644 --- a/src/objdef.h +++ b/src/objdef.h @@ -20,9 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef OBJDEF_HEADER #define OBJDEF_HEADER -#include -#include -#include "irrlichttypes.h" +#include "porting.h" class IGameDef; class INodeDefManager; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index abe5b3e97..c46483e95 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -264,7 +264,7 @@ bool ScriptApiSecurity::safeLoadFile(lua_State *L, const char *path) fp = stdin; chunk_name = const_cast("=stdin"); } else { - fp = fopen(path, "r"); + fp = fopen(path, "rb"); if (!fp) { lua_pushfstring(L, "%s: %s", path, strerror(errno)); return false; From 3dba6d1f90f17d94b17a99863c00889fc81b211e Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 21 May 2015 03:20:41 +0100 Subject: [PATCH 083/670] Mgv5/v7: Fix generateBiomes biome recalculation logic Biomegen down to y = -192 for mgv5 deep oceans. Improve code --- src/mapgen_v5.cpp | 106 ++++++++++++++++++++++++---------------------- src/mapgen_v5.h | 1 + src/mapgen_v7.cpp | 106 ++++++++++++++++++++++++---------------------- src/mapgen_v7.h | 2 + 4 files changed, 115 insertions(+), 100 deletions(-) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 54fc13745..abea2f714 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -327,7 +327,7 @@ void MapgenV5::calculateNoise() noise_cave2->perlinMap3D(x, y, z); } - if (node_max.Y >= water_level) { + if (node_max.Y >= BIOMEGEN_BASE_V5) { noise_filler_depth->perlinMap2D(x, z); noise_heat->perlinMap2D(x, z); noise_humidity->perlinMap2D(x, z); @@ -396,7 +396,7 @@ int MapgenV5::generateBaseTerrain() MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) { - if (node_max.Y < water_level) + if (node_max.Y < BIOMEGEN_BASE_V5) return STONE; v3s16 em = vm->m_area.getExtent(); @@ -406,74 +406,80 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { Biome *biome = NULL; - s16 dfiller = 0; - s16 y0_top = 0; - s16 y0_filler = 0; - s16 depth_water_top = 0; + u16 depth_top = 0; + u16 base_filler = 0; + u16 depth_water_top = 0; + u32 vi = vm->m_area.index(x, node_max.Y, z); - s16 nplaced = 0; - u32 i = vm->m_area.index(x, node_max.Y, z); + // Check node at base of mapchunk above, either a node of a previously + // generated mapchunk or if not, a node of overgenerated base terrain. + content_t c_above = vm->m_data[vi + em.X].getContent(); + bool air_above = c_above == CONTENT_AIR; - content_t c_above = vm->m_data[i + em.X].getContent(); - bool have_air = c_above == CONTENT_AIR; + // If there is air above enable top/filler placement, otherwise force nplaced to + // stone level by setting a number that will exceed any possible filler depth. + u16 nplaced = (air_above) ? 0 : (u16)-1; for (s16 y = node_max.Y; y >= node_min.Y; y--) { - content_t c = vm->m_data[i].getContent(); + content_t c = vm->m_data[vi].getContent(); - if (c != CONTENT_IGNORE && c != CONTENT_AIR && - (y == node_max.Y || have_air)) { + // Biome is only (re)calculated for each stone/water upper surface found + // below air while working downwards. The chosen biome then remains in + // effect for all nodes below until the next biome recalculation. + // Biome is (re)calculated when a stone/water node is either: detected + // below an air node, or, is at column top and might be underground + // or underwater and therefore might not be below air. + if (c != CONTENT_AIR && (y == node_max.Y || air_above)) { biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); - dfiller = biome->depth_filler + noise_filler_depth->result[index]; - y0_top = biome->depth_top; - y0_filler = biome->depth_top + dfiller; + depth_top = biome->depth_top; + base_filler = MYMAX(depth_top + biome->depth_filler + + noise_filler_depth->result[index], 0); depth_water_top = biome->depth_water_top; + // Detect stone type for dungeons during every biome calculation. + // This is more efficient than detecting per-node and will not + // miss any desert stone or sandstone biomes. if (biome->c_stone == c_desert_stone) stone_type = DESERT_STONE; else if (biome->c_stone == c_sandstone) stone_type = SANDSTONE; } - if (c == c_stone && have_air) { - content_t c_below = vm->m_data[i - em.X].getContent(); + if (c == c_stone) { + content_t c_below = vm->m_data[vi - em.X].getContent(); - if (c_below != CONTENT_AIR && c_below != c_water_source) { - if (nplaced < y0_top) { - vm->m_data[i] = MapNode(biome->c_top); - nplaced++; - } else if (nplaced < y0_filler && nplaced >= y0_top) { - vm->m_data[i] = MapNode(biome->c_filler); - nplaced++; - } else if (c == c_stone) { - have_air = false; - nplaced = 0; - vm->m_data[i] = MapNode(biome->c_stone); - } else { - have_air = false; - nplaced = 0; - } - } else if (c == c_stone) { - have_air = false; - nplaced = 0; - vm->m_data[i] = MapNode(biome->c_stone); + // If the node below isn't solid, make this node stone, so that + // any top/filler nodes above are structurally supported. + // This is done by aborting the cycle of top/filler placement + // immediately by forcing nplaced to stone level. + if (c_below == CONTENT_AIR || c_below == c_water_source) + nplaced = (u16)-1; + + if (nplaced < depth_top) { + vm->m_data[vi] = MapNode(biome->c_top); + nplaced++; + } else if (nplaced < base_filler) { + vm->m_data[vi] = MapNode(biome->c_filler); + nplaced++; + } else { + vm->m_data[vi] = MapNode(biome->c_stone); } - } else if (c == c_stone) { - have_air = false; - nplaced = 0; - vm->m_data[i] = MapNode(biome->c_stone); + + air_above = false; } else if (c == c_water_source) { - have_air = true; - nplaced = 0; - if (y > water_level - depth_water_top) - vm->m_data[i] = MapNode(biome->c_water_top); - else - vm->m_data[i] = MapNode(biome->c_water); + vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? + biome->c_water_top : biome->c_water); + nplaced = 0; // Enable top/filler placement for next surface + air_above = false; // Biome is not recalculated underwater } else if (c == CONTENT_AIR) { - have_air = true; - nplaced = 0; + nplaced = 0; // Enable top/filler placement for next surface + air_above = true; // Biome will be recalculated at next surface + } else { // Possible various nodes overgenerated from neighbouring mapchunks + nplaced = (u16)-1; // Disable top/filler placement + air_above = false; } - vm->m_area.add_y(em, i, -1); + vm->m_area.add_y(em, vi, -1); } } diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index 5575dfe61..e8455a46f 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" #define LARGE_CAVE_DEPTH -256 +#define BIOMEGEN_BASE_V5 -192 /////////////////// Mapgen V5 flags //#define MGV5_ 0x01 diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 1733fff49..4833699f8 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -362,7 +362,7 @@ void MapgenV7::calculateNoise() noise_mount_height->perlinMap2D(x, z); } - if (node_max.Y >= water_level) { + if (node_max.Y >= BIOMEGEN_BASE_V7) { noise_filler_depth->perlinMap2D(x, z); noise_heat->perlinMap2D(x, z); noise_humidity->perlinMap2D(x, z); @@ -591,7 +591,7 @@ void MapgenV7::generateRidgeTerrain() MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) { - if (node_max.Y < water_level) + if (node_max.Y < BIOMEGEN_BASE_V7) return STONE; v3s16 em = vm->m_area.getExtent(); @@ -601,74 +601,80 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { Biome *biome = NULL; - s16 dfiller = 0; - s16 y0_top = 0; - s16 y0_filler = 0; - s16 depth_water_top = 0; + u16 depth_top = 0; + u16 base_filler = 0; + u16 depth_water_top = 0; + u32 vi = vm->m_area.index(x, node_max.Y, z); - s16 nplaced = 0; - u32 i = vm->m_area.index(x, node_max.Y, z); + // Check node at base of mapchunk above, either a node of a previously + // generated mapchunk or if not, a node of overgenerated base terrain. + content_t c_above = vm->m_data[vi + em.X].getContent(); + bool air_above = c_above == CONTENT_AIR; - content_t c_above = vm->m_data[i + em.X].getContent(); - bool have_air = c_above == CONTENT_AIR; + // If there is air above enable top/filler placement, otherwise force nplaced to + // stone level by setting a number that will exceed any possible filler depth. + u16 nplaced = (air_above) ? 0 : (u16)-1; for (s16 y = node_max.Y; y >= node_min.Y; y--) { - content_t c = vm->m_data[i].getContent(); + content_t c = vm->m_data[vi].getContent(); - if (c != CONTENT_IGNORE && c != CONTENT_AIR && - (y == node_max.Y || have_air)) { + // Biome is only (re)calculated for each stone/water upper surface found + // below air while working downwards. The chosen biome then remains in + // effect for all nodes below until the next biome recalculation. + // Biome is (re)calculated when a stone/water node is either: detected + // below an air node, or, is at column top and might be underground + // or underwater and therefore might not be below air. + if (c != CONTENT_AIR && (y == node_max.Y || air_above)) { biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); - dfiller = biome->depth_filler + noise_filler_depth->result[index]; - y0_top = biome->depth_top; - y0_filler = biome->depth_top + dfiller; + depth_top = biome->depth_top; + base_filler = MYMAX(depth_top + biome->depth_filler + + noise_filler_depth->result[index], 0); depth_water_top = biome->depth_water_top; + // Detect stone type for dungeons during every biome calculation. + // This is more efficient than detecting per-node and will not + // miss any desert stone or sandstone biomes. if (biome->c_stone == c_desert_stone) stone_type = DESERT_STONE; else if (biome->c_stone == c_sandstone) stone_type = SANDSTONE; } - if (c == c_stone && have_air) { - content_t c_below = vm->m_data[i - em.X].getContent(); + if (c == c_stone) { + content_t c_below = vm->m_data[vi - em.X].getContent(); - if (c_below != CONTENT_AIR && c_below != c_water_source) { - if (nplaced < y0_top) { - vm->m_data[i] = MapNode(biome->c_top); - nplaced++; - } else if (nplaced < y0_filler && nplaced >= y0_top) { - vm->m_data[i] = MapNode(biome->c_filler); - nplaced++; - } else if (c == c_stone) { - have_air = false; - nplaced = 0; - vm->m_data[i] = MapNode(biome->c_stone); - } else { - have_air = false; - nplaced = 0; - } - } else if (c == c_stone) { - have_air = false; - nplaced = 0; - vm->m_data[i] = MapNode(biome->c_stone); + // If the node below isn't solid, make this node stone, so that + // any top/filler nodes above are structurally supported. + // This is done by aborting the cycle of top/filler placement + // immediately by forcing nplaced to stone level. + if (c_below == CONTENT_AIR || c_below == c_water_source) + nplaced = (u16)-1; + + if (nplaced < depth_top) { + vm->m_data[vi] = MapNode(biome->c_top); + nplaced++; + } else if (nplaced < base_filler) { + vm->m_data[vi] = MapNode(biome->c_filler); + nplaced++; + } else { + vm->m_data[vi] = MapNode(biome->c_stone); } - } else if (c == c_stone) { - have_air = false; - nplaced = 0; - vm->m_data[i] = MapNode(biome->c_stone); + + air_above = false; } else if (c == c_water_source) { - have_air = true; - nplaced = 0; - if (y > water_level - depth_water_top) - vm->m_data[i] = MapNode(biome->c_water_top); - else - vm->m_data[i] = MapNode(biome->c_water); + vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? + biome->c_water_top : biome->c_water); + nplaced = 0; // Enable top/filler placement for next surface + air_above = false; // Biome is not recalculated underwater } else if (c == CONTENT_AIR) { - have_air = true; - nplaced = 0; + nplaced = 0; // Enable top/filler placement for next surface + air_above = true; // Biome will be recalculated at next surface + } else { // Possible various nodes overgenerated from neighbouring mapchunks + nplaced = (u16)-1; // Disable top/filler placement + air_above = false; } - vm->m_area.add_y(em, i, -1); + vm->m_area.add_y(em, vi, -1); } } diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index eb46c371b..84f0c9efa 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" +#define BIOMEGEN_BASE_V7 -192 + /////////////////// Mapgen V7 flags #define MGV7_MOUNTAINS 0x01 #define MGV7_RIDGES 0x02 From 774e5d17c4ca32af51e87954a24607c72f943600 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 24 May 2015 01:37:50 +0100 Subject: [PATCH 084/670] Biome API, mgv7: Increase heat/humidity spreads. Improve mgv7 noise parameters --- minetest.conf.example | 12 ++++++------ src/mapgen.h | 4 ++-- src/mapgen_v7.cpp | 22 +++++++++++----------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 392bd55bb..90a5ba48c 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -526,8 +526,8 @@ # other noise parameters are shown in positional format to save space. # Noise parameters for biome API temperature and humidity -#mg_biome_np_heat = 50, 50, (500, 500, 500), 5349, 3, 0.5, 2.0 -#mg_biome_np_humidity = 50, 50, (500, 500, 500), 842, 3, 0.5, 2.0 +#mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 +#mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 #mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 #mgv5_np_factor = 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0 @@ -557,13 +557,13 @@ #mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 #mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 -#mgv7_np_terrain_base = 4, 70, (300, 300, 300), 82341, 6, 0.7, 2.0 +#mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 6, 0.7, 2.0 #mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 #mgv7_np_terrain_persist = 0.6, 0.1, (500, 500, 500), 539, 3, 0.6, 2.0 -#mgv7_np_height_select = -0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0 +#mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.69, 2.0 #mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 4, 0.7, 2.0 -#mgv7_np_mount_height = 100, 30, (500, 500, 500), 72449, 4, 0.6, 2.0 -#mgv7_np_ridge_uwater = 0, 1, (500, 500, 500), 85039, 4, 0.6, 2.0 +#mgv7_np_mount_height = 184, 72, (500, 500, 500), 72449, 4, 0.6, 2.0 +#mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 #mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.68, 2.0 #mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 #mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 diff --git a/src/mapgen.h b/src/mapgen.h index 351a09bb2..a875e0f3d 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -125,8 +125,8 @@ struct MapgenParams { seed(0), water_level(1), flags(MG_TREES | MG_CAVES | MG_LIGHT), - np_biome_heat(NoiseParams(50, 50, v3f(500.0, 500.0, 500.0), 5349, 3, 0.5, 2.0)), - np_biome_humidity(NoiseParams(50, 50, v3f(500.0, 500.0, 500.0), 842, 3, 0.5, 2.0)), + np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)), + np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)), sparams(NULL) {} diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 4833699f8..41e35cb00 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -141,17 +141,17 @@ MapgenV7Params::MapgenV7Params() { spflags = MGV7_MOUNTAINS | MGV7_RIDGES; - np_terrain_base = NoiseParams(4, 70, v3f(300, 300, 300), 82341, 6, 0.7, 2.0); - np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); - np_terrain_persist = NoiseParams(0.6, 0.1, v3f(500, 500, 500), 539, 3, 0.6, 2.0); - np_height_select = NoiseParams(-0.5, 1, v3f(250, 250, 250), 4213, 5, 0.69, 2.0); - np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 4, 0.7, 2.0); - np_mount_height = NoiseParams(100, 30, v3f(500, 500, 500), 72449, 4, 0.6, 2.0); - np_ridge_uwater = NoiseParams(0, 1, v3f(500, 500, 500), 85039, 4, 0.6, 2.0); - np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.68, 2.0); - np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); - np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); - np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); + np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 6, 0.7, 2.0); + np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); + np_terrain_persist = NoiseParams(0.6, 0.1, v3f(500, 500, 500), 539, 3, 0.6, 2.0); + np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.69, 2.0); + np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 4, 0.7, 2.0); + np_mount_height = NoiseParams(184, 72, v3f(500, 500, 500), 72449, 4, 0.6, 2.0); + np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0); + np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.68, 2.0); + np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); + np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); + np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); } From 6b7fb591cb8d54bc8a43df6adb34a026720b4fe4 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 24 May 2015 16:33:22 +0200 Subject: [PATCH 085/670] Small clientiface ASCII art improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use v arrows except where there is only one line between two boxes, and other improvements (Yea could use ↓ but its an ASCII art not an Unicode art). --- src/clientiface.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/clientiface.h b/src/clientiface.h index 598662e2d..ec6ba9e9e 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -49,14 +49,14 @@ class EmergeManager; \-----------------/ | depending of the incoming packet +--------------------------------------- - v | + v v +-----------------------------+ +-----------------------------+ |IN: | |IN: | | TOSERVER_INIT_LEGACY |----- | TOSERVER_INIT | invalid playername, +-----------------------------+ | +-----------------------------+ password (for _LEGACY), | | | or denied by mod | Auth ok -------------------+--------------------------------- - | | | + v v | +-----------------------------+ +-----------------------------+ | |OUT: | |OUT: | | | TOCLIENT_INIT_LEGACY | | TOCLIENT_HELLO | | @@ -104,7 +104,7 @@ class EmergeManager; | +-----------------------------+ | | ^ | | | ----------------------------- | - | | + v | +-----------------------------+ --------------------------------+ |IN: | | | | TOSERVER_CLIENT_READY | v | @@ -128,13 +128,13 @@ class EmergeManager; | |--------------------------------------------------------------- ---->| Active | | | |---------------------------------------------- - | \-----------------/ timeout | + | \-----------------/ timeout v | | | +-----------------------------+ | | | |OUT: | | | | | TOCLIENT_DISCONNECT | | | | +-----------------------------+ | | | | - | | | v + | | v v | | +-----------------------------+ /-----------------\ | | |IN: | | | | | | TOSERVER_DISCONNECT |------------------->| Disconnecting | @@ -158,7 +158,7 @@ class EmergeManager; | | +-----------------------------+ | | sets password accordingly |IN: | -------------------+-------------------------------| TOSERVER_FIRST_SRP | - +-----------------------------+ + +-----------------------------+ */ namespace con { From f16ebbfecf89131b81625ef734c6607c5684c2bd Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 25 May 2015 02:12:44 +0100 Subject: [PATCH 086/670] Mgv6: Enable snowbiomes by default. Double biome noise spread. 3 octaves, 0.5 persistence for humidity --- minetest.conf.example | 6 +++--- src/defaultsettings.cpp | 2 +- src/mapgen_v6.cpp | 4 ++-- src/mapgen_v6.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 90a5ba48c..76f01bcfc 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -496,7 +496,7 @@ # Map generation attributes specific to Mapgen V6. # Currently supported: jungles, biomeblend, mudflow, snowbiomes. # When snowbiomes are enabled jungles are enabled and the jungles flag is ignored. -#mgv6_spflags = jungles, biomeblend, mudflow +#mgv6_spflags = jungles, biomeblend, mudflow, snowbiomes # Controls size of deserts and beaches in Mapgen V6 # When snowbiomes are enabled 'mgv6_freq_desert' is ignored. #mgv6_freq_desert = 0.45 @@ -551,9 +551,9 @@ #mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0 #mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0 #mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0 -#mgv6_np_biome = 0, 1, (250, 250, 250), 9130, 3, 0.50, 2.0 +#mgv6_np_biome = 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0 #mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0 -#mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 4, 0.66, 2.0 +#mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0 #mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 #mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index af1aa4140..0cf1dd770 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -299,7 +299,7 @@ void set_default_settings(Settings *settings) settings->setDefault("water_level", "1"); settings->setDefault("chunksize", "5"); settings->setDefault("mg_flags", "dungeons"); - settings->setDefault("mgv6_spflags", "jungles"); + settings->setDefault("mgv6_spflags", "jungles, snowbiomes"); settings->setDefault("enable_floating_dungeons", "true"); // IPv6 diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index a6beb710b..50126ecf0 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -138,9 +138,9 @@ MapgenV6Params::MapgenV6Params() np_height_select = NoiseParams(0, 1.0, v3f(250.0, 250.0, 250.0), 4213, 5, 0.69, 2.0); np_mud = NoiseParams(4, 2.0, v3f(200.0, 200.0, 200.0), 91013, 3, 0.55, 2.0); np_beach = NoiseParams(0, 1.0, v3f(250.0, 250.0, 250.0), 59420, 3, 0.50, 2.0); - np_biome = NoiseParams(0, 1.0, v3f(250.0, 250.0, 250.0), 9130, 3, 0.50, 2.0); + np_biome = NoiseParams(0, 1.0, v3f(500.0, 500.0, 500.0), 9130, 3, 0.50, 2.0); np_cave = NoiseParams(6, 6.0, v3f(250.0, 250.0, 250.0), 34329, 3, 0.50, 2.0); - np_humidity = NoiseParams(0.5, 0.5, v3f(500.0, 500.0, 500.0), 72384, 4, 0.66, 2.0); + np_humidity = NoiseParams(0.5, 0.5, v3f(500.0, 500.0, 500.0), 72384, 3, 0.50, 2.0); np_trees = NoiseParams(0, 1.0, v3f(125.0, 125.0, 125.0), 2, 4, 0.66, 2.0); np_apple_trees = NoiseParams(0, 1.0, v3f(100.0, 100.0, 100.0), 342902, 3, 0.45, 2.0); } diff --git a/src/mapgen_v6.h b/src/mapgen_v6.h index a540c4b02..c71cf3c53 100644 --- a/src/mapgen_v6.h +++ b/src/mapgen_v6.h @@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define FREQ_HOT 0.4 #define FREQ_SNOW -0.4 #define FREQ_TAIGA 0.5 -#define FREQ_JUNGLE 0.7 +#define FREQ_JUNGLE 0.5 //////////// Mapgen V6 flags #define MGV6_JUNGLES 0x01 From 21878c9d5c364faa1f43c84c51804d9b7dbe376f Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 27 May 2015 11:45:40 +0200 Subject: [PATCH 087/670] Spare some string copies --- src/content_sao.cpp | 8 ++++---- src/content_sao.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 1f7323c9c..b644bdff7 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -541,13 +541,13 @@ void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_ m_animation_sent = false; } -void LuaEntitySAO::setBonePosition(std::string bone, v3f position, v3f rotation) +void LuaEntitySAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) { m_bone_position[bone] = core::vector2d(position, rotation); m_bone_position_sent = false; } -void LuaEntitySAO::setAttachment(int parent_id, std::string bone, v3f position, v3f rotation) +void LuaEntitySAO::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 @@ -1142,14 +1142,14 @@ void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_ble m_animation_sent = false; } -void PlayerSAO::setBonePosition(std::string bone, v3f position, v3f rotation) +void PlayerSAO::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 PlayerSAO::setAttachment(int parent_id, std::string bone, v3f position, v3f rotation) +void PlayerSAO::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 diff --git a/src/content_sao.h b/src/content_sao.h index 4a8c70e16..05b5fa7e1 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -59,8 +59,8 @@ public: s16 getHP() const; void setArmorGroups(const ItemGroupList &armor_groups); void setAnimation(v2f frame_range, float frame_speed, float frame_blend); - void setBonePosition(std::string bone, v3f position, v3f rotation); - void setAttachment(int parent_id, std::string bone, v3f position, v3f rotation); + void setBonePosition(const std::string &bone, v3f position, v3f rotation); + void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); /* LuaEntitySAO-specific */ @@ -193,8 +193,8 @@ public: void setBreath(u16 breath); void setArmorGroups(const ItemGroupList &armor_groups); void setAnimation(v2f frame_range, float frame_speed, float frame_blend); - void setBonePosition(std::string bone, v3f position, v3f rotation); - void setAttachment(int parent_id, std::string bone, v3f position, v3f rotation); + void setBonePosition(const std::string &bone, v3f position, v3f rotation); + void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); void setNametagColor(video::SColor color); From 990a96578f20244626b6b9f67f8e79a7e2e614ea Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 27 May 2015 13:23:09 +0200 Subject: [PATCH 088/670] Consistent const string params Parent commit broke behaviour. Thanks @TeTpaAka for testing the fix. --- src/serverobject.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/serverobject.h b/src/serverobject.h index 5c4d13e3b..a8ec325a6 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -151,9 +151,9 @@ public: {} virtual void setAnimation(v2f frames, float frame_speed, float frame_blend) {} - virtual void setBonePosition(std::string bone, v3f position, v3f rotation) + virtual void setBonePosition(const std::string &bone, v3f position, v3f rotation) {} - virtual void setAttachment(int parent_id, std::string bone, v3f position, v3f rotation) + virtual void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation) {} virtual ObjectProperties* accessObjectProperties() { return NULL; } From c0335f7d13ee46c6a46d0ceebea96960439ec9fd Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Tue, 26 May 2015 14:10:08 +0200 Subject: [PATCH 089/670] Add some missing getter functions to the lua API ObjectRef: get_properties get_armor_groups get_animation get_attach get_bone_position Players: get_physics_override hud_get_hotbar_itemcount hud_get_hotbar_image hud_get_hotbar_selected_image get_sky get_day_night_ratio get_local_animation get_eye_offset Global: minetest.get_gen_notify minetest.get_noiseparams --- doc/lua_api.txt | 18 +- src/content_sao.cpp | 54 ++++++ src/content_sao.h | 8 + src/localplayer.cpp | 4 +- src/localplayer.h | 2 - src/player.h | 61 +++++++ src/script/common/c_content.cpp | 99 +++++++++++ src/script/common/c_content.h | 5 + src/script/common/c_converter.cpp | 35 ++++ src/script/common/c_converter.h | 5 + src/script/lua_api/l_mapgen.cpp | 35 ++++ src/script/lua_api/l_mapgen.h | 6 + src/script/lua_api/l_object.cpp | 262 +++++++++++++++++++++++++++++- src/script/lua_api/l_object.h | 41 ++++- src/server.cpp | 27 +++ src/server.h | 3 + src/serverobject.h | 8 + 17 files changed, 665 insertions(+), 8 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 2acb94a68..f8dc31875 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1932,6 +1932,7 @@ and `minetest.auth_reload` call the authetification handler. * `flags` is a flag field with the available flags: `dungeon`, `temple`, `cave_begin`, `cave_end`, `large_cave_begin`, `large_cave_end`, `decoration` * The second parameter is a list of IDS of decorations which notification is requested for +* `get_gen_notify()`: returns a flagstring and a table with the deco_ids * `minetest.get_mapgen_object(objectname)` * Return requested mapgen object if available (see "Mapgen objects") * `minetest.get_mapgen_params()` Returns mapgen parameters, a table containing @@ -1950,6 +1951,7 @@ and `minetest.auth_reload` call the authetification handler. * Sets the noiseparams setting of `name` to the noiseparams table specified in `noiseparams`. * `set_default` is an optional boolean (default: `true`) that specifies whether the setting should be applied to the default config or current active config +* `minetest.get_noiseparams(name)`: returns a table of the noiseparams for name * `minetest.generate_ores(vm, pos1, pos2)` * Generate all registered ores within the VoxelManip `vm` and in the area from `pos1` to `pos2`. * `pos1` and `pos2` are optional and default to mapchunk minp and maxp. @@ -2412,17 +2414,22 @@ This is basically a reference to a C++ `ServerActiveObject` * `get_wielded_item()`: returns an `ItemStack` * `set_wielded_item(item)`: replaces the wielded item, returns `true` if successful * `set_armor_groups({group1=rating, group2=rating, ...})` +* `get_armor_groups()`: returns a table with the armor group ratings * `set_animation({x=1,y=1}, frame_speed=15, frame_blend=0)` +* `get_animation()`: returns range, frame_speed and frame_blend * `set_attach(parent, bone, position, rotation)` * `bone`: string * `position`: `{x=num, y=num, z=num}` (relative) * `rotation`: `{x=num, y=num, z=num}` +* `get_attach()`: returns parent, bone, position, rotation or nil if it isn't attached * `set_detach()` * `set_bone_position(bone, position, rotation)` * `bone`: string * `position`: `{x=num, y=num, z=num}` (relative) * `rotation`: `{x=num, y=num, z=num}` +* `get_bone_position(bone)`: returns position and rotation of the bone * `set_properties(object property table)` +* `get_properties()`: returns object property table * `is_player()`: returns true for players, false otherwise ##### LuaEntitySAO-only (no-op for other objects) @@ -2468,6 +2475,7 @@ This is basically a reference to a C++ `ServerActiveObject` * `gravity`: multiplier to default gravity value (default: `1`) * `sneak`: whether player can sneak (default: `true`) * `sneak_glitch`: whether player can use the sneak glitch (default: `true`) +* `get_physics_override()`: returns the table given to set_physics_override * `hud_add(hud definition)`: add a HUD element described by HUD def, returns ID number on success * `hud_remove(id)`: remove the HUD element of the specified id @@ -2482,10 +2490,13 @@ This is basically a reference to a C++ `ServerActiveObject` * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true }` * `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar * `count`: number of items, must be between `1` and `23` +* `hud_get_hotbar_itemcount`: returns number of visible items * `hud_set_hotbar_image(texturename)` * sets background image for hotbar +* `hud_get_hotbar_image`: returns texturename * `hud_set_hotbar_selected_image(texturename)` * sets image for selected item of hotbar +* `hud_get_hotbar_selected_image`: returns texturename * `hud_replace_builtin(name, hud_definition)` * replace definition of a builtin hud element * `name`: `"breath"` or `"health"` @@ -2498,10 +2509,12 @@ This is basically a reference to a C++ `ServerActiveObject` * `"plain"`: Uses 0 textures, `bgcolor` used * **Note**: currently does not work directly in `on_joinplayer`; use `minetest.after(0)` in there. +* `get_sky()`: returns bgcolor, type and a table with the textures * `override_day_night_ratio(ratio or nil)` * `0`...`1`: Overrides day-night ratio, controlling sunlight to a specific amount * `nil`: Disables override, defaulting to sunlight based on day-night cycle -* `set_local_animation(walk, dig, walk+dig, frame_speed=frame_speed)` +* `get_day_night_ratio()`: returns the ratio or nil if it isn't overridden +* `set_local_animation(stand/idle, walk, dig, walk+dig, frame_speed=frame_speed)` set animation for player model in third person view @@ -2510,10 +2523,11 @@ This is basically a reference to a C++ `ServerActiveObject` {x=189, y=198}, -- < dig animation key frames {x=200, y=219}, -- < walk+dig animation key frames frame_speed=30): -- < animation frame speed - +* `get_local_animation()`: returns stand, walk, dig, dig+walk tables and frame_speed * `set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})`: defines offset value for camera per player * in first person view * in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`) +* `get_eye_offset()`: returns offset_first and offset_third * `get_nametag_attributes()` * returns a table with the attributes of the nametag of the player * { diff --git a/src/content_sao.cpp b/src/content_sao.cpp index b644bdff7..1a0fce0bb 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -533,6 +533,11 @@ void LuaEntitySAO::setArmorGroups(const ItemGroupList &armor_groups) m_armor_groups_sent = false; } +ItemGroupList LuaEntitySAO::getArmorGroups() +{ + return m_armor_groups; +} + void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend) { m_animation_range = frame_range; @@ -541,12 +546,25 @@ void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_ m_animation_sent = false; } +void LuaEntitySAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend) +{ + *frame_range = m_animation_range; + *frame_speed = m_animation_speed; + *frame_blend = m_animation_blend; +} + void LuaEntitySAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) { m_bone_position[bone] = core::vector2d(position, rotation); m_bone_position_sent = false; } +void LuaEntitySAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation) +{ + *position = m_bone_position[bone].X; + *rotation = m_bone_position[bone].Y; +} + void LuaEntitySAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation) { // Attachments need to be handled on both the server and client. @@ -564,6 +582,15 @@ void LuaEntitySAO::setAttachment(int parent_id, const std::string &bone, v3f pos m_attachment_sent = false; } +void LuaEntitySAO::getAttachment(int *parent_id, std::string *bone, v3f *position, + v3f *rotation) +{ + *parent_id = m_attachment_parent_id; + *bone = m_attachment_bone; + *position = m_attachment_position; + *rotation = m_attachment_rotation; +} + ObjectProperties* LuaEntitySAO::accessObjectProperties() { return &m_prop; @@ -1133,6 +1160,11 @@ void PlayerSAO::setArmorGroups(const ItemGroupList &armor_groups) m_armor_groups_sent = false; } +ItemGroupList PlayerSAO::getArmorGroups() +{ + return m_armor_groups; +} + void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend) { // store these so they can be updated to clients @@ -1142,6 +1174,13 @@ void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_ble m_animation_sent = false; } +void PlayerSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend) +{ + *frame_range = m_animation_range; + *frame_speed = m_animation_speed; + *frame_blend = m_animation_blend; +} + void PlayerSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) { // store these so they can be updated to clients @@ -1149,6 +1188,12 @@ void PlayerSAO::setBonePosition(const std::string &bone, v3f position, v3f rotat m_bone_position_sent = false; } +void PlayerSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation) +{ + *position = m_bone_position[bone].X; + *rotation = m_bone_position[bone].Y; +} + void PlayerSAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation) { // Attachments need to be handled on both the server and client. @@ -1166,6 +1211,15 @@ void PlayerSAO::setAttachment(int parent_id, const std::string &bone, v3f positi m_attachment_sent = false; } +void PlayerSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, + v3f *rotation) +{ + *parent_id = m_attachment_parent_id; + *bone = m_attachment_bone; + *position = m_attachment_position; + *rotation = m_attachment_rotation; +} + ObjectProperties* PlayerSAO::accessObjectProperties() { return &m_prop; diff --git a/src/content_sao.h b/src/content_sao.h index 05b5fa7e1..241788066 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -58,9 +58,13 @@ public: void setHP(s16 hp); s16 getHP() const; void setArmorGroups(const ItemGroupList &armor_groups); + ItemGroupList getArmorGroups(); void setAnimation(v2f frame_range, float frame_speed, float frame_blend); + void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend); 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); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); /* LuaEntitySAO-specific */ @@ -192,9 +196,13 @@ public: u16 getBreath() const; void setBreath(u16 breath); void setArmorGroups(const ItemGroupList &armor_groups); + ItemGroupList getArmorGroups(); void setAnimation(v2f frame_range, float frame_speed, float frame_blend); + void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend); 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); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); void setNametagColor(video::SColor color); diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 51d9bdd4b..e533dc605 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -42,8 +42,6 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name): last_pitch(0), last_yaw(0), last_keyPressed(0), - eye_offset_first(v3f(0,0,0)), - eye_offset_third(v3f(0,0,0)), last_animation(NO_ANIM), hotbar_image(""), hotbar_selected_image(""), @@ -59,6 +57,8 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name): // Initialize hp to 0, so that no hearts will be shown if server // doesn't support health points hp = 0; + eye_offset_first = v3f(0,0,0); + eye_offset_third = v3f(0,0,0); } LocalPlayer::~LocalPlayer() diff --git a/src/localplayer.h b/src/localplayer.h index b60e156be..b71253275 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -62,8 +62,6 @@ public: unsigned int last_keyPressed; float camera_impact; - v3f eye_offset_first; - v3f eye_offset_third; int last_animation; float last_animation_speed; diff --git a/src/player.h b/src/player.h index 7d8d245e3..4db0e4c58 100644 --- a/src/player.h +++ b/src/player.h @@ -215,6 +215,56 @@ public: return size; } + void setHotbarItemcount(s32 hotbar_itemcount) { + hud_hotbar_itemcount = hotbar_itemcount; + } + s32 getHotbarItemcount() { + return hud_hotbar_itemcount; + } + void setHotbarImage(std::string name) { + hud_hotbar_image = name; + } + std::string getHotbarImage() { + return hud_hotbar_image; + } + void setHotbarSelectedImage(std::string name) { + hud_hotbar_selected_image = name; + } + std::string getHotbarSelectedImage() { + return hud_hotbar_selected_image; + } + + void setSky(const video::SColor &bgcolor, const std::string &type, + const std::vector ¶ms) { + m_sky_bgcolor = bgcolor; + m_sky_type = type; + m_sky_params = params; + } + void getSky(video::SColor *bgcolor, std::string *type, + std::vector *params) { + *bgcolor = m_sky_bgcolor; + *type = m_sky_type; + *params = m_sky_params; + } + void overrideDayNightRatio(bool do_override, float ratio) { + m_day_night_ratio_do_override = do_override; + m_day_night_ratio = ratio; + } + void getDayNightRatio(bool *do_override, float *ratio) { + *do_override = m_day_night_ratio_do_override; + *ratio = m_day_night_ratio; + } + void setLocalAnimations(v2s32 frames[4], float frame_speed) { + for (int i = 0; i < 4; i++) + local_animations[i] = frames[i]; + local_animation_speed = frame_speed; + } + void getLocalAnimations(v2s32 *frames, float *frame_speed) { + for (int i = 0; i < 4; i++) + frames[i] = local_animations[i]; + *frame_speed = local_animation_speed; + } + virtual bool isLocal() const { return false; } virtual PlayerSAO *getPlayerSAO() @@ -255,6 +305,8 @@ public: bool is_climbing; bool swimming_vertical; bool camera_barely_in_ceiling; + v3f eye_offset_first; + v3f eye_offset_third; Inventory inventory; @@ -308,6 +360,8 @@ public: u32 hud_flags; s32 hud_hotbar_itemcount; + std::string hud_hotbar_image; + std::string hud_hotbar_selected_image; protected: IGameDef *m_gamedef; @@ -322,6 +376,13 @@ protected: bool m_dirty; std::vector hud; + + std::string m_sky_type; + video::SColor m_sky_bgcolor; + std::vector m_sky_params; + + bool m_day_night_ratio_do_override; + float m_day_night_ratio; private: // Protect some critical areas // hud for example can be modified by EmergeThread diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index c0728177f..94fcdecbb 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -199,6 +199,64 @@ void read_object_properties(lua_State *L, int index, lua_pop(L, 1); } +/******************************************************************************/ +void push_object_properties(lua_State *L, ObjectProperties *prop) +{ + lua_newtable(L); + lua_pushnumber(L, prop->hp_max); + lua_setfield(L, -2, "hp_max"); + lua_pushboolean(L, prop->physical); + lua_setfield(L, -2, "physical"); + lua_pushboolean(L, prop->collideWithObjects); + lua_setfield(L, -2, "collide_with_objects"); + lua_pushnumber(L, prop->weight); + lua_setfield(L, -2, "weight"); + push_aabb3f(L, prop->collisionbox); + lua_setfield(L, -2, "collisionbox"); + lua_pushlstring(L, prop->visual.c_str(), prop->visual.size()); + lua_setfield(L, -2, "visual"); + lua_pushlstring(L, prop->mesh.c_str(), prop->mesh.size()); + lua_setfield(L, -2, "mesh"); + push_v2f(L, prop->visual_size); + lua_setfield(L, -2, "visual_size"); + + lua_newtable(L); + u16 i = 1; + for (std::vector::iterator it = prop->textures.begin(); + it != prop->textures.end(); ++it) { + lua_pushlstring(L, it->c_str(), it->size()); + lua_rawseti(L, -2, i); + } + lua_setfield(L, -2, "textures"); + + lua_newtable(L); + i = 1; + for (std::vector::iterator it = prop->colors.begin(); + it != prop->colors.end(); ++it) { + push_ARGB8(L, *it); + lua_rawseti(L, -2, i); + } + lua_setfield(L, -2, "colors"); + + push_v2s16(L, prop->spritediv); + lua_setfield(L, -2, "spritediv"); + push_v2s16(L, prop->initial_sprite_basepos); + lua_setfield(L, -2, "initial_sprite_basepos"); + lua_pushboolean(L, prop->is_visible); + lua_setfield(L, -2, "is_visible"); + lua_pushboolean(L, prop->makes_footstep_sound); + lua_setfield(L, -2, "makes_footstep_sound"); + lua_pushnumber(L, prop->automatic_rotate); + lua_setfield(L, -2, "automatic_rotate"); + lua_pushnumber(L, prop->stepheight / BS); + lua_setfield(L, -2, "stepheight"); + if (prop->automatic_face_movement_dir) + lua_pushnumber(L, prop->automatic_face_movement_dir_offset); + else + lua_pushboolean(L, false); + lua_setfield(L, -2, "automatic_face_movement_dir"); +} + /******************************************************************************/ TileDef read_tiledef(lua_State *L, int index) { @@ -896,6 +954,12 @@ u32 read_flags_table(lua_State *L, int table, FlagDesc *flagdesc, u32 *flagmask) return flags; } +void push_flags_string(lua_State *L, FlagDesc *flagdesc, u32 flags, u32 flagmask) +{ + std::string flagstring = writeFlagString(flags, flagdesc, flagmask); + lua_pushlstring(L, flagstring.c_str(), flagstring.size()); +} + /******************************************************************************/ /* Lua Stored data! */ /******************************************************************************/ @@ -920,6 +984,17 @@ void read_groups(lua_State *L, int index, } } +/******************************************************************************/ +void push_groups(lua_State *L, std::map groups) +{ + lua_newtable(L); + for (std::map::iterator it = groups.begin(); + it != groups.end(); ++it) { + lua_pushnumber(L, it->second); + lua_setfield(L, -2, it->first.c_str()); + } +} + /******************************************************************************/ void push_items(lua_State *L, const std::vector &items) { @@ -997,6 +1072,30 @@ bool read_noiseparams(lua_State *L, int index, NoiseParams *np) return true; } +void push_noiseparams(lua_State *L, NoiseParams *np) +{ + lua_newtable(L); + lua_pushnumber(L, np->offset); + lua_setfield(L, -2, "offset"); + lua_pushnumber(L, np->scale); + lua_setfield(L, -2, "scale"); + lua_pushnumber(L, np->persist); + lua_setfield(L, -2, "persistence"); + lua_pushnumber(L, np->lacunarity); + lua_setfield(L, -2, "lacunarity"); + lua_pushnumber(L, np->seed); + lua_setfield(L, -2, "seed"); + lua_pushnumber(L, np->octaves); + lua_setfield(L, -2, "octaves"); + + push_flags_string(L, flagdesc_noiseparams, np->flags, + np->flags); + lua_setfield(L, -2, "flags"); + + push_v3f(L, np->spread); + lua_setfield(L, -2, "spread"); +} + /******************************************************************************/ // Returns depth of json value tree static int push_json_value_getdepth(const Json::Value &value) diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h index 241b1ca76..69b2a8355 100644 --- a/src/script/common/c_content.h +++ b/src/script/common/c_content.h @@ -88,6 +88,8 @@ ItemDefinition read_item_definition (lua_State *L, void read_object_properties (lua_State *L, int index, ObjectProperties *prop); +void push_object_properties (lua_State *L, + ObjectProperties *prop); void push_inventory_list (lua_State *L, Inventory *inv, @@ -127,6 +129,8 @@ bool getflagsfield (lua_State *L, int table, bool read_flags (lua_State *L, int index, FlagDesc *flagdesc, u32 *flags, u32 *flagmask); +void push_flags_string (lua_State *L, FlagDesc *flagdesc, + u32 flags, u32 flagmask); u32 read_flags_table (lua_State *L, int table, FlagDesc *flagdesc, u32 *flagmask); @@ -149,6 +153,7 @@ bool string_to_enum (const EnumString *spec, bool read_noiseparams (lua_State *L, int index, NoiseParams *np); +void push_noiseparams (lua_State *L, NoiseParams *np); void luaentity_get (lua_State *L,u16 id); diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index 211121552..f1d3cc421 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -88,6 +88,24 @@ v2s16 check_v2s16(lua_State *L, int index) return p; } +void push_v2s16(lua_State *L, v2s16 p) +{ + lua_newtable(L); + lua_pushnumber(L, p.X); + lua_setfield(L, -2, "x"); + lua_pushnumber(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_setfield(L, -2, "x"); + lua_pushnumber(L, p.Y); + lua_setfield(L, -2, "y"); +} + v2s32 read_v2s32(lua_State *L, int index) { v2s32 p; @@ -277,6 +295,23 @@ aabb3f read_aabb3f(lua_State *L, int index, f32 scale) return box; } +void push_aabb3f(lua_State *L, aabb3f box) +{ + lua_newtable(L); + lua_pushnumber(L, box.MinEdge.X); + lua_rawseti(L, -2, 1); + lua_pushnumber(L, box.MinEdge.Y); + lua_rawseti(L, -2, 2); + lua_pushnumber(L, box.MinEdge.Z); + lua_rawseti(L, -2, 3); + lua_pushnumber(L, box.MaxEdge.X); + lua_rawseti(L, -2, 4); + lua_pushnumber(L, box.MaxEdge.Y); + lua_rawseti(L, -2, 5); + lua_pushnumber(L, box.MaxEdge.Z); + lua_rawseti(L, -2, 6); +} + std::vector read_aabb3f_vector(lua_State *L, int index, f32 scale) { std::vector boxes; diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index e4466d97f..8a49c7a73 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -96,11 +96,16 @@ std::vector read_aabb3f_vector (lua_State *L, int index, f32 scale); size_t read_stringlist (lua_State *L, int index, std::vector *result); +void push_v2s16 (lua_State *L, v2s16 p); +void push_v2s32 (lua_State *L, v2s32 p); void push_v3s16 (lua_State *L, v3s16 p); +void push_aabb3f (lua_State *L, aabb3f box); void push_ARGB8 (lua_State *L, video::SColor color); void pushFloatPos (lua_State *L, v3f p); void push_v3f (lua_State *L, v3f p); void push_v2f (lua_State *L, v2f p); +void push_groups (lua_State *L, + std::map groups); void warn_if_field_exists(lua_State *L, int table, const char *fieldname, diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 76e94e97e..57090a58f 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -637,6 +637,20 @@ int ModApiMapgen::l_set_noiseparams(lua_State *L) } +// get_noiseparams(name) +int ModApiMapgen::l_get_noiseparams(lua_State *L) +{ + std::string name = luaL_checkstring(L, 1); + + NoiseParams np; + if (!g_settings->getNoiseParams(name, np)) + return 0; + + push_noiseparams(L, &np); + return 1; +} + + // set_gen_notify(flags, {deco_id_table}) int ModApiMapgen::l_set_gen_notify(lua_State *L) { @@ -661,6 +675,25 @@ int ModApiMapgen::l_set_gen_notify(lua_State *L) } +// get_gen_notify() +int ModApiMapgen::l_get_gen_notify(lua_State *L) +{ + EmergeManager *emerge = getServer(L)->getEmergeManager(); + push_flags_string(L, flagdesc_gennotify, emerge->gen_notify_on, + emerge->gen_notify_on); + + lua_newtable(L); + int i = 1; + for (std::set::iterator it = emerge->gen_notify_on_deco_ids.begin(); + it != emerge->gen_notify_on_deco_ids.end(); ++it) { + lua_pushnumber(L, *it); + lua_rawseti(L, -2, i); + i++; + } + return 2; +} + + // register_biome({lots of stuff}) int ModApiMapgen::l_register_biome(lua_State *L) { @@ -1187,7 +1220,9 @@ void ModApiMapgen::Initialize(lua_State *L, int top) API_FCT(get_mapgen_params); API_FCT(set_mapgen_params); API_FCT(set_noiseparams); + API_FCT(get_noiseparams); API_FCT(set_gen_notify); + API_FCT(get_gen_notify); API_FCT(register_biome); API_FCT(register_decoration); diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h index 84e556f63..7440d1285 100644 --- a/src/script/lua_api/l_mapgen.h +++ b/src/script/lua_api/l_mapgen.h @@ -39,9 +39,15 @@ private: // set_noiseparam_defaults(name, noiseparams, set_default) static int l_set_noiseparams(lua_State *L); + // get_noiseparam_defaults(name) + static int l_get_noiseparams(lua_State *L); + // set_gen_notify(flagstring) static int l_set_gen_notify(lua_State *L); + // set_gen_notify(flagstring) + static int l_get_gen_notify(lua_State *L); + // register_biome({lots of stuff}) static int l_register_biome(lua_State *L); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index c83c8c747..48d054dcd 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -29,7 +29,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "server.h" #include "hud.h" +#include "scripting_game.h" +#define GET_ENV_PTR ServerEnvironment* env = \ + dynamic_cast(getEnv(L)); \ + if (env == NULL) return 0 struct EnumString es_HudElementType[] = { @@ -376,6 +380,20 @@ int ObjectRef::l_set_armor_groups(lua_State *L) return 0; } +// get_armor_groups(self) +int ObjectRef::l_get_armor_groups(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + ServerActiveObject *co = getobject(ref); + if (co == NULL) + return 0; + // Do it + ItemGroupList groups = co->getArmorGroups(); + push_groups(L, groups); + return 1; +} + // set_physics_override(self, physics_override_speed, physics_override_jump, // physics_override_gravity, sneak, sneak_glitch) int ObjectRef::l_set_physics_override(lua_State *L) @@ -409,6 +427,28 @@ int ObjectRef::l_set_physics_override(lua_State *L) return 0; } +// get_physics_override(self) +int ObjectRef::l_get_physics_override(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + PlayerSAO *co = (PlayerSAO *)getobject(ref); + if (co == NULL) + return 0; + // Do it + lua_newtable(L); + lua_pushnumber(L, co->m_physics_override_speed); + lua_setfield(L, -2, "speed"); + lua_pushnumber(L, co->m_physics_override_jump); + lua_setfield(L, -2, "jump"); + lua_pushnumber(L, co->m_physics_override_gravity); + lua_setfield(L, -2, "gravity"); + lua_pushboolean(L, co->m_physics_override_sneak); + lua_setfield(L, -2, "sneak"); + lua_pushboolean(L, co->m_physics_override_sneak_glitch); + lua_setfield(L, -2, "sneak_glitch"); + return 1; +} + // set_animation(self, frame_range, frame_speed, frame_blend) int ObjectRef::l_set_animation(lua_State *L) { @@ -430,6 +470,26 @@ int ObjectRef::l_set_animation(lua_State *L) return 0; } +// get_animation(self) +int ObjectRef::l_get_animation(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + ServerActiveObject *co = getobject(ref); + if (co == NULL) + return 0; + // Do it + v2f frames = v2f(1,1); + float frame_speed = 15; + float frame_blend = 0; + co->getAnimation(&frames, &frame_speed, &frame_blend); + + push_v2f(L, frames); + lua_pushnumber(L, frame_speed); + lua_pushnumber(L, frame_blend); + return 3; +} + // set_local_animation(self, {stand/idle}, {walk}, {dig}, {walk+dig}, frame_speed) int ObjectRef::l_set_local_animation(lua_State *L) { @@ -455,6 +515,27 @@ int ObjectRef::l_set_local_animation(lua_State *L) return 0; } +// get_local_animation(self) +int ObjectRef::l_get_local_animation(lua_State *L) +{ + //NO_MAP_LOCK_REQUIRED + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + + v2s32 frames[4]; + float frame_speed; + player->getLocalAnimations(frames, &frame_speed); + + for (int i = 0; i < 4; i++) { + push_v2s32(L, frames[i]); + } + + lua_pushnumber(L, frame_speed); + return 5; +} + // set_eye_offset(self, v3f first pv, v3f third pv) int ObjectRef::l_set_eye_offset(lua_State *L) { @@ -485,6 +566,20 @@ int ObjectRef::l_set_eye_offset(lua_State *L) return 0; } +// get_eye_offset(self) +int ObjectRef::l_get_eye_offset(lua_State *L) +{ + //NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + // Do it + push_v3f(L, player->eye_offset_first); + push_v3f(L, player->eye_offset_third); + return 2; +} + // set_bone_position(self, std::string bone, v3f position, v3f rotation) int ObjectRef::l_set_bone_position(lua_State *L) { @@ -506,6 +601,28 @@ int ObjectRef::l_set_bone_position(lua_State *L) return 0; } +// get_bone_position(self, bone) +int ObjectRef::l_get_bone_position(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + ServerActiveObject *co = getobject(ref); + if (co == NULL) + return 0; + // Do it + std::string bone = ""; + if(!lua_isnil(L, 2)) + bone = lua_tostring(L, 2); + + v3f position = v3f(0, 0, 0); + v3f rotation = v3f(0, 0, 0); + co->getBonePosition(bone, &position, &rotation); + + push_v3f(L, position); + push_v3f(L, rotation); + return 2; +} + // set_attach(self, parent, bone, position, rotation) int ObjectRef::l_set_attach(lua_State *L) { @@ -530,6 +647,34 @@ int ObjectRef::l_set_attach(lua_State *L) return 0; } +// get_attach(self) +int ObjectRef::l_get_attach(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + + ObjectRef *ref = checkobject(L, 1); + ServerActiveObject *co = getobject(ref); + if (co == NULL) + return 0; + + // Do it + int parent_id = 0; + std::string bone = ""; + v3f position = v3f(0, 0, 0); + v3f rotation = v3f(0, 0, 0); + co->getAttachment(&parent_id, &bone, &position, &rotation); + if (!parent_id) + return 0; + ServerActiveObject *parent = env->getActiveObject(parent_id); + + getScriptApiBase(L)->objectrefGetOrCreate(L, parent); + lua_pushlstring(L, bone.c_str(), bone.size()); + push_v3f(L, position); + push_v3f(L, rotation); + return 4; +} + // set_detach(self) int ObjectRef::l_set_detach(lua_State *L) { @@ -557,6 +702,21 @@ int ObjectRef::l_set_properties(lua_State *L) return 0; } +// get_properties(self) +int ObjectRef::l_get_properties(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + ServerActiveObject *co = getobject(ref); + if (co == NULL) + return 0; + ObjectProperties *prop = co->accessObjectProperties(); + if (!prop) + return 0; + push_object_properties(L, prop); + return 1; +} + // is_player(self) int ObjectRef::l_is_player(lua_State *L) { @@ -1185,6 +1345,20 @@ int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L) return 1; } +// hud_get_hotbar_itemcount(self) +int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + + s32 hotbar_itemcount = getServer(L)->hudGetHotbarItemcount(player); + + lua_pushnumber(L, hotbar_itemcount); + return 1; +} + // hud_set_hotbar_image(self, name) int ObjectRef::l_hud_set_hotbar_image(lua_State *L) { @@ -1199,6 +1373,19 @@ int ObjectRef::l_hud_set_hotbar_image(lua_State *L) return 1; } +// hud_get_hotbar_image(self) +int ObjectRef::l_hud_get_hotbar_image(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + + std::string name = getServer(L)->hudGetHotbarImage(player); + lua_pushlstring(L, name.c_str(), name.size()); + return 1; +} + // hud_set_hotbar_selected_image(self, name) int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L) { @@ -1213,6 +1400,19 @@ int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L) return 1; } +// hud_get_hotbar_selected_image(self) +int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + + std::string name = getServer(L)->hudGetHotbarSelectedImage(player); + lua_pushlstring(L, name.c_str(), name.size()); + return 1; +} + // set_sky(self, bgcolor, type, list) int ObjectRef::l_set_sky(lua_State *L) { @@ -1251,6 +1451,33 @@ int ObjectRef::l_set_sky(lua_State *L) return 1; } +// get_sky(self) +int ObjectRef::l_get_sky(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + video::SColor bgcolor(255, 255, 255, 255); + std::string type; + std::vector params; + + player->getSky(&bgcolor, &type, ¶ms); + type = type == "" ? "regular" : type; + + push_ARGB8(L, bgcolor); + lua_pushlstring(L, type.c_str(), type.size()); + lua_newtable(L); + s16 i = 1; + for (std::vector::iterator it = params.begin(); + it != params.end(); ++it) { + lua_pushlstring(L, it->c_str(), it->size()); + lua_rawseti(L, -2, i); + i++; + } + return 3; +} + // override_day_night_ratio(self, brightness=0...1) int ObjectRef::l_override_day_night_ratio(lua_State *L) { @@ -1273,6 +1500,26 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L) return 1; } +// get_day_night_ratio(self) +int ObjectRef::l_get_day_night_ratio(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) + return 0; + + bool do_override; + float ratio; + player->getDayNightRatio(&do_override, &ratio); + + if (do_override) + lua_pushnumber(L, ratio); + else + lua_pushnil(L); + + return 1; +} + // set_nametag_attributes(self, attributes) int ObjectRef::l_set_nametag_attributes(lua_State *L) { @@ -1389,12 +1636,16 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, get_wielded_item), luamethod(ObjectRef, set_wielded_item), luamethod(ObjectRef, set_armor_groups), - luamethod(ObjectRef, set_physics_override), + luamethod(ObjectRef, get_armor_groups), luamethod(ObjectRef, set_animation), + luamethod(ObjectRef, get_animation), luamethod(ObjectRef, set_bone_position), + luamethod(ObjectRef, get_bone_position), luamethod(ObjectRef, set_attach), + luamethod(ObjectRef, get_attach), luamethod(ObjectRef, set_detach), luamethod(ObjectRef, set_properties), + luamethod(ObjectRef, get_properties), // LuaEntitySAO-only luamethod(ObjectRef, setvelocity), luamethod(ObjectRef, getvelocity), @@ -1421,6 +1672,8 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, get_inventory_formspec), luamethod(ObjectRef, get_player_control), luamethod(ObjectRef, get_player_control_bits), + luamethod(ObjectRef, set_physics_override), + luamethod(ObjectRef, get_physics_override), luamethod(ObjectRef, hud_add), luamethod(ObjectRef, hud_remove), luamethod(ObjectRef, hud_change), @@ -1428,12 +1681,19 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, hud_set_flags), luamethod(ObjectRef, hud_get_flags), luamethod(ObjectRef, hud_set_hotbar_itemcount), + luamethod(ObjectRef, hud_get_hotbar_itemcount), luamethod(ObjectRef, hud_set_hotbar_image), + luamethod(ObjectRef, hud_get_hotbar_image), luamethod(ObjectRef, hud_set_hotbar_selected_image), + luamethod(ObjectRef, hud_get_hotbar_selected_image), luamethod(ObjectRef, set_sky), + luamethod(ObjectRef, get_sky), luamethod(ObjectRef, override_day_night_ratio), + luamethod(ObjectRef, get_day_night_ratio), luamethod(ObjectRef, set_local_animation), + luamethod(ObjectRef, get_local_animation), luamethod(ObjectRef, set_eye_offset), + luamethod(ObjectRef, get_eye_offset), luamethod(ObjectRef, set_nametag_attributes), luamethod(ObjectRef, get_nametag_attributes), {0,0} diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index af3ed5ef0..02bb06ecc 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -101,25 +101,43 @@ private: // set_armor_groups(self, groups) static int l_set_armor_groups(lua_State *L); + // get_armor_groups(self) + static int l_get_armor_groups(lua_State *L); + // set_physics_override(self, physics_override_speed, physics_override_jump, // physics_override_gravity, sneak, sneak_glitch) static int l_set_physics_override(lua_State *L); + // get_physics_override(self) + static int l_get_physics_override(lua_State *L); + // set_animation(self, frame_range, frame_speed, frame_blend) static int l_set_animation(lua_State *L); + // get_animation(self) + static int l_get_animation(lua_State *L); + // set_bone_position(self, std::string bone, v3f position, v3f rotation) static int l_set_bone_position(lua_State *L); + // get_bone_position(self, bone) + static int l_get_bone_position(lua_State *L); + // set_attach(self, parent, bone, position, rotation) static int l_set_attach(lua_State *L); + // get_attach(self) + static int l_get_attach(lua_State *L); + // set_detach(self) static int l_set_detach(lua_State *L); // set_properties(self, properties) static int l_set_properties(lua_State *L); + // get_properties(self) + static int l_get_properties(lua_State *L); + // is_player(self) static int l_is_player(lua_State *L); @@ -222,24 +240,45 @@ private: // hud_set_hotbar_itemcount(self, hotbar_itemcount) static int l_hud_set_hotbar_itemcount(lua_State *L); + // hud_get_hotbar_itemcount(self) + static int l_hud_get_hotbar_itemcount(lua_State *L); + // hud_set_hotbar_image(self, name) static int l_hud_set_hotbar_image(lua_State *L); + // hud_get_hotbar_image(self) + static int l_hud_get_hotbar_image(lua_State *L); + // hud_set_hotbar_selected_image(self, name) static int l_hud_set_hotbar_selected_image(lua_State *L); + // hud_get_hotbar_selected_image(self) + static int l_hud_get_hotbar_selected_image(lua_State *L); + // set_sky(self, type, list) static int l_set_sky(lua_State *L); - // override_day_night_ratio(self, type, list) + // get_sky(self, type, list) + static int l_get_sky(lua_State *L); + + // override_day_night_ratio(self, type) static int l_override_day_night_ratio(lua_State *L); + // get_day_night_ratio(self) + static int l_get_day_night_ratio(lua_State *L); + // set_local_animation(self, {stand/idle}, {walk}, {dig}, {walk+dig}, frame_speed) static int l_set_local_animation(lua_State *L); + // get_local_animation(self) + static int l_get_local_animation(lua_State *L); + // set_eye_offset(self, v3f first pv, v3f third pv) static int l_set_eye_offset(lua_State *L); + // get_eye_offset(self) + static int l_get_eye_offset(lua_State *L); + // set_nametag_attributes(self, attributes) static int l_set_nametag_attributes(lua_State *L); diff --git a/src/server.cpp b/src/server.cpp index 2a34c8675..7cd92ed65 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2915,31 +2915,54 @@ bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) { if (hotbar_itemcount <= 0 || hotbar_itemcount > HUD_HOTBAR_ITEMCOUNT_MAX) return false; + player->setHotbarItemcount(hotbar_itemcount); std::ostringstream os(std::ios::binary); writeS32(os, hotbar_itemcount); SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_ITEMCOUNT, os.str()); return true; } +s32 Server::hudGetHotbarItemcount(Player *player) { + if (!player) + return 0; + return player->getHotbarItemcount(); +} + void Server::hudSetHotbarImage(Player *player, std::string name) { if (!player) return; + player->setHotbarImage(name); SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_IMAGE, name); } +std::string Server::hudGetHotbarImage(Player *player) { + if (!player) + return ""; + return player->getHotbarImage(); +} + void Server::hudSetHotbarSelectedImage(Player *player, std::string name) { if (!player) return; + player->setHotbarSelectedImage(name); SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_SELECTED_IMAGE, name); } +std::string Server::hudGetHotbarSelectedImage(Player *player) { + if (!player) + return ""; + + return player->getHotbarSelectedImage(); +} + bool Server::setLocalPlayerAnimations(Player *player, v2s32 animation_frames[4], f32 frame_speed) { if (!player) return false; + player->setLocalAnimations(animation_frames, frame_speed); SendLocalPlayerAnimations(player->peer_id, animation_frames, frame_speed); return true; } @@ -2949,6 +2972,8 @@ bool Server::setPlayerEyeOffset(Player *player, v3f first, v3f third) if (!player) return false; + player->eye_offset_first = first; + player->eye_offset_third = third; SendEyeOffset(player->peer_id, first, third); return true; } @@ -2959,6 +2984,7 @@ bool Server::setSky(Player *player, const video::SColor &bgcolor, if (!player) return false; + player->setSky(bgcolor, type, params); SendSetSky(player->peer_id, bgcolor, type, params); return true; } @@ -2969,6 +2995,7 @@ bool Server::overrideDayNightRatio(Player *player, bool do_override, if (!player) return false; + player->overrideDayNightRatio(do_override, ratio); SendOverrideDayNightRatio(player->peer_id, do_override, ratio); return true; } diff --git a/src/server.h b/src/server.h index 2030d6669..131c3c67b 100644 --- a/src/server.h +++ b/src/server.h @@ -343,8 +343,11 @@ public: bool hudChange(Player *player, u32 id, HudElementStat stat, void *value); bool hudSetFlags(Player *player, u32 flags, u32 mask); bool hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount); + s32 hudGetHotbarItemcount(Player *player); void hudSetHotbarImage(Player *player, std::string name); + std::string hudGetHotbarImage(Player *player); void hudSetHotbarSelectedImage(Player *player, std::string name); + std::string hudGetHotbarSelectedImage(Player *player); inline Address getPeerAddress(u16 peer_id) { return m_con.GetPeerAddress(peer_id); } diff --git a/src/serverobject.h b/src/serverobject.h index a8ec325a6..5873e4ab8 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -147,14 +147,22 @@ public: virtual void setArmorGroups(const ItemGroupList &armor_groups) {} + virtual ItemGroupList getArmorGroups() + { return ItemGroupList(); } 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) {} + virtual void getAnimation(v2f *frames, float *frame_spee, float *frame_blend) + {} virtual void setBonePosition(const std::string &bone, v3f position, v3f rotation) {} + virtual void getBonePosition(const std::string &bone, v3f *position, v3f *lotation) + {} virtual void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation) {} + virtual void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation) + {} virtual ObjectProperties* accessObjectProperties() { return NULL; } virtual void notifyObjectPropertiesModified() From 0f15488eae058bfb2143f837b179a6631286192c Mon Sep 17 00:00:00 2001 From: Kahrl Date: Thu, 28 May 2015 20:47:15 +0200 Subject: [PATCH 090/670] Fix typo in variable name --- src/serverobject.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serverobject.h b/src/serverobject.h index 5873e4ab8..5de1071d1 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -153,7 +153,7 @@ public: {} virtual void setAnimation(v2f frames, float frame_speed, float frame_blend) {} - virtual void getAnimation(v2f *frames, float *frame_spee, float *frame_blend) + virtual void getAnimation(v2f *frames, float *frame_speed, float *frame_blend) {} virtual void setBonePosition(const std::string &bone, v3f position, v3f rotation) {} From 522acf920fbeb034b1636df68a3db282bf823d00 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 28 May 2015 20:04:40 -0400 Subject: [PATCH 091/670] Make get_biome_list() error message more helpful --- src/script/lua_api/l_mapgen.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 57090a58f..1a462adf7 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -416,7 +416,9 @@ size_t get_biome_list(lua_State *L, int index, if (is_single) { Biome *biome = get_or_load_biome(L, index, biomemgr); if (!biome) { - errorstream << "get_biome_list: failed to get biome" << std::endl; + errorstream << "get_biome_list: failed to get biome '" + << (lua_isstring(L, index) ? lua_tostring(L, index) : "") + << "'." << std::endl; return 1; } @@ -433,8 +435,9 @@ size_t get_biome_list(lua_State *L, int index, Biome *biome = get_or_load_biome(L, -1, biomemgr); if (!biome) { fail_count++; - errorstream << "get_biome_list: failed to load biome (index " - << count << ")" << std::endl; + errorstream << "get_biome_list: failed to get biome '" + << (lua_isstring(L, -1) ? lua_tostring(L, -1) : "") + << "'" << std::endl; continue; } From addf3ee16559a0e1173bae1e59d9bdbd54e3526c Mon Sep 17 00:00:00 2001 From: Craig Robbins Date: Fri, 29 May 2015 22:32:13 +1000 Subject: [PATCH 092/670] (Android) Only simulate holding down fast key if fast_move is toggled to true --- src/game.cpp | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 7e3ab802c..125fc7c74 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1620,6 +1620,11 @@ private: bool m_cache_enable_fog; f32 m_cache_mouse_sensitivity; f32 m_repeat_right_click_time; + +#ifdef __ANDROID__ + bool m_cache_hold_aux1; +#endif + }; Game::Game() : @@ -1653,6 +1658,11 @@ Game::Game() : m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0); + +#ifdef __ANDROID__ + m_cache_hold_aux1 = false; // This is initialised properly later +#endif + } @@ -1759,6 +1769,11 @@ void Game::run() set_light_table(g_settings->getFloat("display_gamma")); +#ifdef __ANDROID__ + m_cache_hold_aux1 = g_settings->getBool("fast_move") + && client->checkPrivilege("fast"); +#endif + while (device->run() && !(*kill || g_gamecallback->shutdown_requested)) { /* Must be called immediately after a device->run() call because it @@ -2747,8 +2762,14 @@ void Game::toggleFast(float *statustext_time) *statustext_time = 0; statustext = msg[fast_move]; - if (fast_move && !client->checkPrivilege("fast")) + bool has_fast_privs = client->checkPrivilege("fast"); + + if (fast_move && !has_fast_privs) statustext += L" (note: no 'fast' privilege)"; + +#ifdef __ANDROID__ + m_cache_hold_aux1 = fast_move && has_fast_privs; +#endif } @@ -2998,11 +3019,15 @@ void Game::updatePlayerControl(const CameraOrientation &cam) ); #ifdef ANDROID - /* For Android, invert the meaning of holding down the fast button (i.e. - * holding down the fast button -- if there is one -- means walk) + /* For Android, simulate holding down AUX1 (fast move) if the user has + * the fast_move setting toggled on. If there is an aux1 key defined for + * Android then its meaning is inverted (i.e. holding aux1 means walk and + * not fast) */ - control.aux1 = control.aux1 ^ true; - keypress_bits ^= ((u32)(1U << 5)); + if (m_cache_hold_aux1) { + control.aux1 = control.aux1 ^ true; + keypress_bits ^= ((u32)(1U << 5)); + } #endif client->setPlayerControl(control); From b4dfaa3a7a9251cdb0f0867fc29240c808268b1b Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 30 May 2015 22:24:49 +0200 Subject: [PATCH 093/670] Only retrieve always_fly_fast setting once --- src/localplayer.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/localplayer.cpp b/src/localplayer.cpp index e533dc605..d06015e06 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -86,9 +86,8 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, bool noclip = m_gamedef->checkLocalPrivilege("noclip") && g_settings->getBool("noclip"); bool free_move = noclip && fly_allowed && g_settings->getBool("free_move"); - if(free_move) - { - position += m_speed * dtime; + if (free_move) { + position += m_speed * dtime; setPosition(position); m_sneak_node_exists = false; return; @@ -408,11 +407,12 @@ void LocalPlayer::applyControl(float dtime) // When aux1_descends is enabled the fast key is used to go down, so fast isn't possible bool fast_climb = fast_move && control.aux1 && !g_settings->getBool("aux1_descends"); bool continuous_forward = g_settings->getBool("continuous_forward"); + bool always_fly_fast = g_settings->getBool("always_fly_fast"); // Whether superspeed mode is used or not bool superspeed = false; - if(g_settings->getBool("always_fly_fast") && free_move && fast_move) + if (always_fly_fast && free_move && fast_move) superspeed = true; // Old descend control @@ -470,7 +470,7 @@ void LocalPlayer::applyControl(float dtime) if(free_move) { // In free movement mode, sneak descends - if(fast_move && (control.aux1 || g_settings->getBool("always_fly_fast"))) + if (fast_move && (control.aux1 || always_fly_fast)) speedV.Y = -movement_speed_fast; else speedV.Y = -movement_speed_walk; @@ -517,11 +517,9 @@ void LocalPlayer::applyControl(float dtime) } if(control.jump) { - if(free_move) - { - if(g_settings->getBool("aux1_descends") || g_settings->getBool("always_fly_fast")) - { - if(fast_move) + if (free_move) { + if (g_settings->getBool("aux1_descends") || always_fly_fast) { + if (fast_move) speedV.Y = movement_speed_fast; else speedV.Y = movement_speed_walk; From 06a2eee692e0e55c1dfb9f14e982ad146ba4ce49 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 31 May 2015 06:23:10 +0200 Subject: [PATCH 094/670] Mapblock: nodecount refactor Spare direct multoplication, use constant MapBlock::nodecount instead of local nodecount variables. Also use strides at one place instead of multiplications. --- src/mapblock.cpp | 16 +++++----------- src/mapblock.h | 9 +++++---- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 7ad67c589..9eb64a76e 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -132,7 +132,7 @@ MapNode MapBlock::getNodeParent(v3s16 p, bool *is_valid_position) } if (is_valid_position) *is_valid_position = true; - return data[p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X]; + return data[p.Z * zstride + p.Y * ystride + p.X]; } std::string MapBlock::getModifiedReasonString() @@ -388,7 +388,7 @@ void MapBlock::actuallyUpdateDayNightDiff() /* Check if any lighting value differs */ - for (u32 i = 0; i < MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++) { + for (u32 i = 0; i < nodecount; i++) { MapNode &n = data[i]; differs = !n.isLightDayNightEq(nodemgr); @@ -402,7 +402,7 @@ void MapBlock::actuallyUpdateDayNightDiff() */ if (differs) { bool only_air = true; - for (u32 i = 0; i < MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++) { + for (u32 i = 0; i < nodecount; i++) { MapNode &n = data[i]; if (n.getContent() != CONTENT_AIR) { only_air = false; @@ -473,8 +473,7 @@ static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes, std::set unknown_contents; content_t id_counter = 0; - for(u32 i=0; i unnamed_contents; std::set unallocatable_contents; - for(u32 i=0; igetName(local_id, name); @@ -583,7 +581,6 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk) Bulk node data */ NameIdMapping nimap; - u32 nodecount = MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; if(disk) { MapNode *tmp_nodes = new MapNode[nodecount]; @@ -683,7 +680,6 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk) */ TRACESTREAM(<<"MapBlock::deSerialize "< Date: Mon, 1 Jun 2015 16:58:57 +0200 Subject: [PATCH 095/670] Make split method static --- src/guiFormSpecMenu.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index d53c9b3af..ac230e425 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -236,28 +236,27 @@ GUITable* GUIFormSpecMenu::getTable(std::wstring tablename) return 0; } -std::vector split(const std::string &s, char delim) { +static std::vector split(const std::string &s, char delim) +{ std::vector tokens; std::string current = ""; bool last_was_escape = false; - for(unsigned int i=0; i < s.size(); i++) { + for (unsigned int i = 0; i < s.size(); i++) { + char si = s.c_str()[i]; if (last_was_escape) { current += '\\'; - current += s.c_str()[i]; + current += si; last_was_escape = false; - } - else { - if (s.c_str()[i] == delim) { + } else { + if (si == delim) { tokens.push_back(current); current = ""; last_was_escape = false; - } - else if (s.c_str()[i] == '\\'){ + } else if (si == '\\') { last_was_escape = true; - } - else { - current += s.c_str()[i]; + } else { + current += si; last_was_escape = false; } } From 6df6b2a0e050da70ac5de9e99d4f440512888955 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 1 Jun 2015 18:16:07 +0200 Subject: [PATCH 096/670] Localize inside whole misc_helpers.lua --- builtin/common/misc_helpers.lua | 43 +++++++++++++++++---------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 39fca7d1e..d8615b6bb 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -1,5 +1,10 @@ -- Minetest: builtin/misc_helpers.lua +-------------------------------------------------------------------------------- +-- Localize functions to avoid table lookups (better performance). +local table_insert = table.insert +local string_sub, string_sub = string.sub, string.find + -------------------------------------------------------------------------------- function basic_dump(o) local tp = type(o) @@ -89,13 +94,13 @@ function dump2(o, name, dumped) -- the form _G["table: 0xFFFFFFF"] keyStr = string.format("_G[%q]", tostring(k)) -- Dump key table - table.insert(t, dump2(k, keyStr, dumped)) + table_insert(t, dump2(k, keyStr, dumped)) end else keyStr = basic_dump(k) end local vname = string.format("%s[%s]", name, keyStr) - table.insert(t, dump2(v, vname, dumped)) + table_insert(t, dump2(v, vname, dumped)) end return string.format("%s = {}\n%s", name, table.concat(t)) end @@ -130,7 +135,7 @@ function dump(o, indent, nested, level) local t = {} local dumped_indexes = {} for i, v in ipairs(o) do - table.insert(t, dump(v, indent, nested, level + 1)) + table_insert(t, dump(v, indent, nested, level + 1)) dumped_indexes[i] = true end for k, v in pairs(o) do @@ -139,7 +144,7 @@ function dump(o, indent, nested, level) k = "["..dump(k, indent, nested, level + 1).."]" end v = dump(v, indent, nested, level + 1) - table.insert(t, k.." = "..v) + table_insert(t, k.." = "..v) end end nested[o] = nil @@ -154,10 +159,6 @@ function dump(o, indent, nested, level) return "{"..table.concat(t, ", ").."}" end --------------------------------------------------------------------------------- --- Localize functions to avoid table lookups (better performance). -local table_insert = table.insert -local str_sub, str_find = string.sub, string.find function string.split(str, delim, include_empty, max_splits, sep_is_pattern) delim = delim or "," max_splits = max_splits or -1 @@ -166,13 +167,13 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern) local plain = not sep_is_pattern max_splits = max_splits + 1 repeat - local np, npe = str_find(str, delim, pos, plain) + local np, npe = string_sub(str, delim, pos, plain) np, npe = (np or (len+1)), (npe or (len+1)) if (not np) or (max_splits == 1) then np = len + 1 npe = np end - local s = str_sub(str, pos, np - 1) + local s = string_sub(str, pos, np - 1) if include_empty or (s ~= "") then max_splits = max_splits - 1 table_insert(items, s) @@ -298,8 +299,8 @@ function core.splittext(text,charlimit) local current_idx = 1 - local start,stop = string.find(text," ",current_idx) - local nl_start,nl_stop = string.find(text,"\n",current_idx) + local start,stop = string_find(text, " ", current_idx) + local nl_start,nl_stop = string_find(text, "\n", current_idx) local gotnewline = false if nl_start ~= nil and (start == nil or nl_start < start) then start = nl_start @@ -309,7 +310,7 @@ function core.splittext(text,charlimit) local last_line = "" while start ~= nil do if string.len(last_line) + (stop-start) > charlimit then - table.insert(retval,last_line) + table_insert(retval, last_line) last_line = "" end @@ -317,17 +318,17 @@ function core.splittext(text,charlimit) last_line = last_line .. " " end - last_line = last_line .. string.sub(text,current_idx,stop -1) + last_line = last_line .. string_sub(text, current_idx, stop - 1) if gotnewline then - table.insert(retval,last_line) + table_insert(retval, last_line) last_line = "" gotnewline = false end current_idx = stop+1 - start,stop = string.find(text," ",current_idx) - nl_start,nl_stop = string.find(text,"\n",current_idx) + start,stop = string_find(text, " ", current_idx) + nl_start,nl_stop = string_find(text, "\n", current_idx) if nl_start ~= nil and (start == nil or nl_start < start) then start = nl_start @@ -338,11 +339,11 @@ function core.splittext(text,charlimit) --add last part of text if string.len(last_line) + (string.len(text) - current_idx) > charlimit then - table.insert(retval,last_line) - table.insert(retval,string.sub(text,current_idx)) + table_insert(retval, last_line) + table_insert(retval, string_sub(text, current_idx)) else - last_line = last_line .. " " .. string.sub(text,current_idx) - table.insert(retval,last_line) + last_line = last_line .. " " .. string_sub(text, current_idx) + table_insert(retval, last_line) end return retval From e479337c1a69c68e4e9b0e7d0a6cc96550039bb1 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 2 Jun 2015 00:20:12 +0200 Subject: [PATCH 097/670] Fix wrong replace from previous commit --- builtin/common/misc_helpers.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index d8615b6bb..1c9f2a48f 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -3,7 +3,7 @@ -------------------------------------------------------------------------------- -- Localize functions to avoid table lookups (better performance). local table_insert = table.insert -local string_sub, string_sub = string.sub, string.find +local string_sub, string_find = string.sub, string.find -------------------------------------------------------------------------------- function basic_dump(o) @@ -167,7 +167,7 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern) local plain = not sep_is_pattern max_splits = max_splits + 1 repeat - local np, npe = string_sub(str, delim, pos, plain) + local np, npe = string_find(str, delim, pos, plain) np, npe = (np or (len+1)), (npe or (len+1)) if (not np) or (max_splits == 1) then np = len + 1 From b8a8be9c86cf6249d7c1be1c01d27deb02bcb58c Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 2 Jun 2015 06:45:21 +0200 Subject: [PATCH 098/670] Nicer time setting logging Now logs ACTION[ServerThread]: player sets time to 6:03 instead of ACTION[ServerThread]: player sets time to 6:3 --- builtin/game/chatcommands.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index fbc91ef01..d5d9c3d25 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -713,7 +713,7 @@ core.register_chatcommand("time", { return false, "Invalid minute (must be between 0 and 59 inclusive)." end core.set_timeofday((hour * 60 + minute) / 1440) - core.log("action", name .. " sets time to " .. hour .. ":" .. minute) + core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute)) return true, "Time of day changed." end, }) From ba3ff5ef39d768da4a0511d22a220b9aafa3d3f6 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 2 Jun 2015 13:55:02 +0200 Subject: [PATCH 099/670] Fix uninitialized variable error If you run minetest with valgrind, you'll quickly notice uninitialized jump depend error messages that point to s_base.cpp:131. This commit fixes those. --- src/script/cpp_api/s_base.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 4fb8411ef..8b0b16bfb 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -103,6 +103,11 @@ ScriptApiBase::ScriptApiBase() lua_pushstring(m_luastack, porting::getPlatformName()); lua_setglobal(m_luastack, "PLATFORM"); + // m_secure gets set to true inside + // ScriptApiSecurity::initializeSecurity(), if neccessary. + // Default to false otherwise + m_secure = false; + m_server = NULL; m_environment = NULL; m_guiengine = NULL; From 74d8b341bc7df3a24710c3b14d39530026516686 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 2 Jun 2015 08:38:14 +0100 Subject: [PATCH 100/670] Mgv5/mgv7: Trigger biome recalculation at underwater surfaces --- src/mapgen_v5.cpp | 31 +++++++++++++++++++------------ src/mapgen_v7.cpp | 31 +++++++++++++++++++------------ 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index abea2f714..7c2a149fb 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -415,21 +415,24 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) // generated mapchunk or if not, a node of overgenerated base terrain. content_t c_above = vm->m_data[vi + em.X].getContent(); bool air_above = c_above == CONTENT_AIR; + bool water_above = c_above == c_water_source; - // If there is air above enable top/filler placement, otherwise force nplaced to - // stone level by setting a number that will exceed any possible filler depth. - u16 nplaced = (air_above) ? 0 : (u16)-1; + // If there is air or water above enable top/filler placement, otherwise force + // nplaced to stone level by setting a number exceeding any possible filler depth. + u16 nplaced = (air_above || water_above) ? 0 : (u16)-1; for (s16 y = node_max.Y; y >= node_min.Y; y--) { content_t c = vm->m_data[vi].getContent(); - // Biome is only (re)calculated for each stone/water upper surface found - // below air while working downwards. The chosen biome then remains in - // effect for all nodes below until the next biome recalculation. - // Biome is (re)calculated when a stone/water node is either: detected - // below an air node, or, is at column top and might be underground - // or underwater and therefore might not be below air. - if (c != CONTENT_AIR && (y == node_max.Y || air_above)) { + // Biome is recalculated each time an upper surface is detected while + // working down a column. The selected biome then remains in effect for + // all nodes below until the next surface and biome recalculation. + // Biome is recalculated: + // 1. At the surface of stone below air or water. + // 2. At the surface of water below air. + // 3. When stone or water is detected but biome has not yet been calculated. + if ((c == c_stone && (air_above || water_above || !biome)) || + (c == c_water_source && (air_above || !biome))) { biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); depth_top = biome->depth_top; base_filler = MYMAX(depth_top + biome->depth_filler @@ -466,17 +469,21 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) } air_above = false; + water_above = false; } else if (c == c_water_source) { vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? biome->c_water_top : biome->c_water); nplaced = 0; // Enable top/filler placement for next surface - air_above = false; // Biome is not recalculated underwater + air_above = false; + water_above = true; } else if (c == CONTENT_AIR) { nplaced = 0; // Enable top/filler placement for next surface - air_above = true; // Biome will be recalculated at next surface + air_above = true; + water_above = false; } else { // Possible various nodes overgenerated from neighbouring mapchunks nplaced = (u16)-1; // Disable top/filler placement air_above = false; + water_above = false; } vm->m_area.add_y(em, vi, -1); diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 41e35cb00..be7212e0e 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -610,21 +610,24 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) // generated mapchunk or if not, a node of overgenerated base terrain. content_t c_above = vm->m_data[vi + em.X].getContent(); bool air_above = c_above == CONTENT_AIR; + bool water_above = c_above == c_water_source; - // If there is air above enable top/filler placement, otherwise force nplaced to - // stone level by setting a number that will exceed any possible filler depth. - u16 nplaced = (air_above) ? 0 : (u16)-1; + // If there is air or water above enable top/filler placement, otherwise force + // nplaced to stone level by setting a number exceeding any possible filler depth. + u16 nplaced = (air_above || water_above) ? 0 : (u16)-1; for (s16 y = node_max.Y; y >= node_min.Y; y--) { content_t c = vm->m_data[vi].getContent(); - // Biome is only (re)calculated for each stone/water upper surface found - // below air while working downwards. The chosen biome then remains in - // effect for all nodes below until the next biome recalculation. - // Biome is (re)calculated when a stone/water node is either: detected - // below an air node, or, is at column top and might be underground - // or underwater and therefore might not be below air. - if (c != CONTENT_AIR && (y == node_max.Y || air_above)) { + // Biome is recalculated each time an upper surface is detected while + // working down a column. The selected biome then remains in effect for + // all nodes below until the next surface and biome recalculation. + // Biome is recalculated: + // 1. At the surface of stone below air or water. + // 2. At the surface of water below air. + // 3. When stone or water is detected but biome has not yet been calculated. + if ((c == c_stone && (air_above || water_above || !biome)) || + (c == c_water_source && (air_above || !biome))) { biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); depth_top = biome->depth_top; base_filler = MYMAX(depth_top + biome->depth_filler @@ -661,17 +664,21 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) } air_above = false; + water_above = false; } else if (c == c_water_source) { vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? biome->c_water_top : biome->c_water); nplaced = 0; // Enable top/filler placement for next surface - air_above = false; // Biome is not recalculated underwater + air_above = false; + water_above = true; } else if (c == CONTENT_AIR) { nplaced = 0; // Enable top/filler placement for next surface - air_above = true; // Biome will be recalculated at next surface + air_above = true; + water_above = false; } else { // Possible various nodes overgenerated from neighbouring mapchunks nplaced = (u16)-1; // Disable top/filler placement air_above = false; + water_above = false; } vm->m_area.add_y(em, vi, -1); From 8383a61eac5b4702040000c7ae62895254dda40e Mon Sep 17 00:00:00 2001 From: HybridDog Date: Wed, 3 Jun 2015 15:58:38 +0200 Subject: [PATCH 101/670] Decrease minetest.after globalstep lag * abort if theres no active timer * only reduce the timer.time of all timers when its necessary * move updating timers_to_add into a seperate function --- builtin/game/misc.lua | 68 +++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index a71d5d02a..7fa95742e 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -4,40 +4,72 @@ -- Misc. API functions -- -core.timers_to_add = {} -core.timers = {} -core.register_globalstep(function(dtime) - for _, timer in ipairs(core.timers_to_add) do - table.insert(core.timers, timer) - end - core.timers_to_add = {} - local index = 1 - while index <= #core.timers do - local timer = core.timers[index] - timer.time = timer.time - dtime +local timers = {} +local mintime +local function update_timers(delay) + mintime = false + local sub = 0 + for index = 1, #timers do + index = index - sub + local timer = timers[index] + timer.time = timer.time - delay if timer.time <= 0 then timer.func(unpack(timer.args or {})) - table.remove(core.timers,index) + table.remove(timers, index) + sub = sub + 1 + elseif mintime then + mintime = math.min(mintime, timer.time) else - index = index + 1 + mintime = timer.time end end +end + +local timers_to_add +local function add_timers() + for _, timer in ipairs(timers_to_add) do + table.insert(timers, timer) + end + timers_to_add = false +end + +local delay = 0 +core.register_globalstep(function(dtime) + if not mintime then + -- abort if no timers are running + return + end + if timers_to_add then + add_timers() + end + delay = delay + dtime + if delay < mintime then + return + end + update_timers(delay) + delay = 0 end) function core.after(time, func, ...) assert(tonumber(time) and type(func) == "function", "Invalid core.after invocation") - table.insert(core.timers_to_add, {time=time, func=func, args={...}}) + if not mintime then + mintime = time + timers_to_add = {{time=time+delay, func=func, args={...}}} + return + end + mintime = math.min(mintime, time) + timers_to_add = timers_to_add or {} + timers_to_add[#timers_to_add+1] = {time=time+delay, func=func, args={...}} end function core.check_player_privs(name, privs) local player_privs = core.get_player_privs(name) local missing_privileges = {} for priv, val in pairs(privs) do - if val then - if not player_privs[priv] then - table.insert(missing_privileges, priv) - end + if val + and not player_privs[priv] then + table.insert(missing_privileges, priv) end end if #missing_privileges > 0 then From e4817454338d43b853a52ce757b69df122e864c1 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 7 Jun 2015 05:36:40 +0100 Subject: [PATCH 102/670] Minimal: Edit mapgen aliases. Use blob ore for clay, update other ores. Update simple biomes. Cleanup code --- games/minimal/mods/default/init.lua | 36 ++---- games/minimal/mods/default/mapgen.lua | 167 ++++++++++++++------------ 2 files changed, 99 insertions(+), 104 deletions(-) diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index 01bf65b95..7b5869bc0 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -452,9 +452,7 @@ minetest.register_craft({ } }) --- --- Crafting (tool repair) --- +-- Tool repair minetest.register_craft({ type = "toolrepair", additional_wear = -0.02, @@ -707,7 +705,7 @@ function default.node_sound_glass_defaults(table) return table end --- +-- Register nodes minetest.register_node("default:stone", { description = "Stone", @@ -1496,6 +1494,9 @@ minetest.register_node("default:apple", { sounds = default.node_sound_defaults(), }) +-- +-- Grow tree function +-- local c_air = minetest.get_content_id("air") local c_ignore = minetest.get_content_id("ignore") @@ -1568,6 +1569,10 @@ function default.grow_tree(data, a, pos, is_apple_tree, seed) end end +-- +-- ABMs +-- + minetest.register_abm({ nodenames = {"default:sapling"}, interval = 10, @@ -1674,29 +1679,9 @@ minetest.register_craftitem("default:scorched_stuff", { }) -- --- Aliases for the current map generator outputs +-- Support old code -- -minetest.register_alias("mapgen_air", "air") -minetest.register_alias("mapgen_stone", "default:stone") -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_water_source", "default:water_source") -minetest.register_alias("mapgen_dirt", "default:dirt") -minetest.register_alias("mapgen_sand", "default:sand") -minetest.register_alias("mapgen_gravel", "default:gravel") -minetest.register_alias("mapgen_clay", "default:clay") -minetest.register_alias("mapgen_lava_source", "default:lava_source") -minetest.register_alias("mapgen_cobble", "default:cobble") -minetest.register_alias("mapgen_mossycobble", "default:mossycobble") -minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") -minetest.register_alias("mapgen_junglegrass", "default:junglegrass") -minetest.register_alias("mapgen_stone_with_coal", "default:stone_with_coal") -minetest.register_alias("mapgen_stone_with_iron", "default:stone_with_iron") -minetest.register_alias("mapgen_mese", "default:mese") - --- Support old code function default.spawn_falling_node(p, nodename) spawn_falling_node(p, nodename) end @@ -1795,3 +1780,4 @@ test_get_craft_result() --dump2(minetest.registered_entities) -- END + diff --git a/games/minimal/mods/default/mapgen.lua b/games/minimal/mods/default/mapgen.lua index dd839b9a0..8d203fbb2 100644 --- a/games/minimal/mods/default/mapgen.lua +++ b/games/minimal/mods/default/mapgen.lua @@ -1,52 +1,61 @@ --- minetest/default/mapgen.lua - -- -- 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_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_water_source", "default:water_source") -minetest.register_alias("mapgen_dirt", "default:dirt") -minetest.register_alias("mapgen_sand", "default:sand") -minetest.register_alias("mapgen_gravel", "default:gravel") -minetest.register_alias("mapgen_clay", "default:clay") -minetest.register_alias("mapgen_lava_source", "default:lava_source") -minetest.register_alias("mapgen_cobble", "default:cobble") -minetest.register_alias("mapgen_mossycobble", "default:mossycobble") -minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass") minetest.register_alias("mapgen_junglegrass", "default:junglegrass") -minetest.register_alias("mapgen_stone_with_coal", "default:stone_with_coal") -minetest.register_alias("mapgen_stone_with_iron", "default:stone_with_iron") -minetest.register_alias("mapgen_mese", "default:mese") + +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_threshhold = 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 = 5, + clust_num_ores = 8, clust_size = 3, - height_min = -31000, - height_max = 64, -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_iron", - wherein = "default:stone", - clust_scarcity = 16*16*16, - clust_num_ores = 5, - clust_size = 3, - height_min = -5, - height_max = 7, + y_min = -31000, + y_max = 64, }) minetest.register_ore({ @@ -54,10 +63,10 @@ minetest.register_ore({ ore = "default:stone_with_iron", wherein = "default:stone", clust_scarcity = 12*12*12, - clust_num_ores = 5, - clust_size = 3, - height_min = -16, - height_max = -5, + clust_num_ores = 3, + clust_size = 2, + y_min = -15, + y_max = 2, }) minetest.register_ore({ @@ -67,60 +76,60 @@ minetest.register_ore({ clust_scarcity = 9*9*9, clust_num_ores = 5, clust_size = 3, - height_min = -31000, - height_max = -17, + 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, }) -minetest.register_on_generated(function(minp, maxp, seed) - -- Generate clay - if maxp.y >= 2 and minp.y <= 0 then - -- Assume X and Z lengths are equal - local divlen = 4 - local divs = (maxp.x-minp.x)/divlen+1; - for divx=0+1,divs-1-1 do - for divz=0+1,divs-1-1 do - local cx = minp.x + math.floor((divx+0.5)*divlen) - local cz = minp.z + math.floor((divz+0.5)*divlen) - if minetest.get_node({x=cx,y=1,z=cz}).name == "default:water_source" and - minetest.get_node({x=cx,y=0,z=cz}).name == "default:sand" then - local is_shallow = true - local num_water_around = 0 - if minetest.get_node({x=cx-divlen*2,y=1,z=cz+0}).name == "default:water_source" then - num_water_around = num_water_around + 1 end - if minetest.get_node({x=cx+divlen*2,y=1,z=cz+0}).name == "default:water_source" then - num_water_around = num_water_around + 1 end - if minetest.get_node({x=cx+0,y=1,z=cz-divlen*2}).name == "default:water_source" then - num_water_around = num_water_around + 1 end - if minetest.get_node({x=cx+0,y=1,z=cz+divlen*2}).name == "default:water_source" then - num_water_around = num_water_around + 1 end - if num_water_around >= 2 then - is_shallow = false - end - if is_shallow then - for x1=-divlen,divlen do - for z1=-divlen,divlen do - if minetest.get_node({x=cx+x1,y=0,z=cz+z1}).name == "default:sand" then - minetest.set_node({x=cx+x1,y=0,z=cz+z1}, {name="default:clay"}) - end - end - end - end - end - end - end - end -end) -- --- Register biome for biome API +-- Register biomes for biome API -- + +minetest.clear_registered_biomes() + minetest.register_biome({ - name = "Grassland", - -- Will use defaults of omitted parameters - y_min = -31000, - y_max = 31000, - heat_point = 50, + 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, }) From 05f4e9ee08f93b17c3dbaf2b6a1022cc28a226ce Mon Sep 17 00:00:00 2001 From: HybridDog Date: Sat, 30 May 2015 16:18:09 +0200 Subject: [PATCH 103/670] More reliable serverlist behaviour -> remember the previously loaded serverlist, and use if new one failed -> show a "loading" serverlist --- builtin/mainmenu/common.lua | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index d6e2588fa..6126c61a4 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -234,7 +234,13 @@ end -------------------------------------------------------------------------------- function asyncOnlineFavourites() - menudata.favorites = {} + if not menudata.public_known then + menudata.public_known = {{ + name = fgettext("Loading..."), + description = fgettext("Try reenabling public serverlist and check your internet connection.") + }} + end + menudata.favorites = menudata.public_known core.handle_async( function(param) return core.get_favorites("online") @@ -242,11 +248,15 @@ function asyncOnlineFavourites() nil, function(result) if core.setting_getbool("public_serverlist") then - menudata.favorites = order_favorite_list(result) + local favs = order_favorite_list(result) + if favs[1] then + menudata.public_known = favs + menudata.favorites = menudata.public_known + end core.event_handler("Refresh") end end - ) + ) end -------------------------------------------------------------------------------- From c849d32a1063be8d4e7e766341422d3f8d9d7a37 Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 11 Jun 2015 23:56:54 +0200 Subject: [PATCH 104/670] Reposition irrlicht timestamp in makefile --- build/android/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build/android/Makefile b/build/android/Makefile index b11d73972..1b33a4599 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -399,12 +399,6 @@ freetype_download : git clone ${FREETYPE_URL_GIT} || 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 - freetype : $(FREETYPE_LIB) $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) @@ -454,6 +448,12 @@ irrlicht_download : patch -p1 < ../../irrlicht-texturehack.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) From 0b187ede4bd117d1163951b8eae744d2927da631 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 12 Jun 2015 05:07:44 +0100 Subject: [PATCH 105/670] Minimal: Add snow biome and jungleleaves nodes. Add mapgen aliases Treegen: Remove alias checks from jungletree generation for speed --- games/minimal/mods/default/init.lua | 84 +++++++++++++++++- games/minimal/mods/default/mapgen.lua | 8 ++ .../mods/default/textures/default_ice.png | Bin 0 -> 254 bytes .../default/textures/default_jungleleaves.png | Bin 0 -> 184 bytes .../default/textures/default_pine_needles.png | Bin 0 -> 203 bytes .../default/textures/default_pinetree.png | Bin 0 -> 280 bytes .../default/textures/default_pinetree_top.png | Bin 0 -> 574 bytes .../mods/default/textures/default_snow.png | Bin 0 -> 164 bytes .../default/textures/default_snow_side.png | Bin 0 -> 360 bytes .../default/textures/default_snowball.png | Bin 0 -> 183 bytes src/treegen.cpp | 11 +-- 11 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 games/minimal/mods/default/textures/default_ice.png create mode 100644 games/minimal/mods/default/textures/default_jungleleaves.png create mode 100644 games/minimal/mods/default/textures/default_pine_needles.png create mode 100644 games/minimal/mods/default/textures/default_pinetree.png create mode 100644 games/minimal/mods/default/textures/default_pinetree_top.png create mode 100644 games/minimal/mods/default/textures/default_snow.png create mode 100644 games/minimal/mods/default/textures/default_snow_side.png create mode 100644 games/minimal/mods/default/textures/default_snowball.png diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index 7b5869bc0..120f004b7 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -834,7 +834,6 @@ minetest.register_node("default:leaves", { visual_scale = 1.3, tiles ={"default_leaves.png"}, paramtype = "light", - is_ground_content = false, groups = {snappy=3}, drop = { max_items = 1, @@ -854,6 +853,17 @@ minetest.register_node("default:leaves", { sounds = default.node_sound_leaves_defaults(), }) +minetest.register_node("default:jungleleaves", { + description = "Jungle Leaves", + drawtype = "allfaces_optional", + waving = 1, + visual_scale = 1.3, + tiles = {"default_jungleleaves.png"}, + paramtype = "light", + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, + 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"}, @@ -976,6 +986,7 @@ minetest.register_node("default:water_flowing", { pointable = false, diggable = false, buildable_to = true, + is_ground_content = false, drowning = 1, liquidtype = "flowing", liquid_alternative_flowing = "default:water_flowing", @@ -1000,6 +1011,7 @@ minetest.register_node("default:water_source", { pointable = false, diggable = false, buildable_to = true, + is_ground_content = false, drowning = 1, liquidtype = "source", liquid_alternative_flowing = "default:water_flowing", @@ -1032,6 +1044,7 @@ minetest.register_node("default:lava_flowing", { pointable = false, diggable = false, buildable_to = true, + is_ground_content = false, drowning = 1, liquidtype = "flowing", liquid_alternative_flowing = "default:lava_flowing", @@ -1060,6 +1073,7 @@ minetest.register_node("default:lava_source", { pointable = false, diggable = false, buildable_to = true, + is_ground_content = false, drowning = 1, liquidtype = "source", liquid_alternative_flowing = "default:lava_flowing", @@ -1494,6 +1508,74 @@ minetest.register_node("default:apple", { sounds = default.node_sound_defaults(), }) +minetest.register_node("default:dirt_with_snow", { + description = "Dirt with Snow", + tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"}, + groups = {crumbly=3,soil=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:snow", { + description = "Snow", + tiles = {"default_snow.png"}, + inventory_image = "default_snowball.png", + wield_image = "default_snowball.png", + paramtype = "light", + buildable_to = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5}, + }, + }, + groups = {crumbly=3,falling_node=1}, + sounds = default.node_sound_dirt_defaults(), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name="default:dirt_with_snow"}) + end + end, +}) + +minetest.register_node("default:snowblock", { + description = "Snow Block", + tiles = {"default_snow.png"}, + groups = {crumbly=3}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("default:ice", { + description = "Ice", + tiles = {"default_ice.png"}, + is_ground_content = false, + paramtype = "light", + groups = {cracky=3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("default:pinetree", { + description = "Pine Tree", + tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"}, + paramtype2 = "facedir", + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:pine_needles",{ + description = "Pine Needles", + drawtype = "allfaces_optional", + visual_scale = 1.3, + tiles = {"default_pine_needles.png"}, + waving = 1, + paramtype = "light", + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, + sounds = default.node_sound_leaves_defaults(), +}) + -- -- Grow tree function -- diff --git a/games/minimal/mods/default/mapgen.lua b/games/minimal/mods/default/mapgen.lua index 8d203fbb2..7b0c7f467 100644 --- a/games/minimal/mods/default/mapgen.lua +++ b/games/minimal/mods/default/mapgen.lua @@ -10,11 +10,19 @@ minetest.register_alias("mapgen_sand", "default:sand") minetest.register_alias("mapgen_water_source", "default:water_source") minetest.register_alias("mapgen_lava_source", "default:lava_source") minetest.register_alias("mapgen_gravel", "default:gravel") +minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow") +minetest.register_alias("mapgen_snowblock", "default:snowblock") +minetest.register_alias("mapgen_snow", "default:snow") +minetest.register_alias("mapgen_ice", "default:ice") 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_jungletree", "default:jungletree") +minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") minetest.register_alias("mapgen_junglegrass", "default:junglegrass") +minetest.register_alias("mapgen_pinetree", "default:pinetree") +minetest.register_alias("mapgen_pine_needles", "default:pine_needles") minetest.register_alias("mapgen_cobble", "default:cobble") minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") diff --git a/games/minimal/mods/default/textures/default_ice.png b/games/minimal/mods/default/textures/default_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..2046eac6faf03dc0cf49e5af5919b3b6cc38c47e GIT binary patch literal 254 zcmV4DMB6 znH*{m``t{)7A{wfeS{mR(d#pd3R6>}8$B6_T_j^=u>JBLZMuTylhj5VSoM4Rx*P+d z7nxv>|)d8WH9MfLGw!qWWy4Yf8$RT4~nv0U;qFB07*qoM6N<$ Eg5#fXJpcdz literal 0 HcmV?d00001 diff --git a/games/minimal/mods/default/textures/default_jungleleaves.png b/games/minimal/mods/default/textures/default_jungleleaves.png new file mode 100644 index 0000000000000000000000000000000000000000..870b4bb27e9debc742a57ecda1fa9857cbc56499 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0WbkkXuAfK+!q)500lxjSe4~&GV0EuRF^fi91s7HW+R&U7MJakP>s~fWr9+291g9c7EV( eoB6Cqo54Xs(tpMM)1p9I7(8A5T-G@yGywptnLhFW literal 0 HcmV?d00001 diff --git a/games/minimal/mods/default/textures/default_pine_needles.png b/games/minimal/mods/default/textures/default_pine_needles.png new file mode 100644 index 0000000000000000000000000000000000000000..1a32f632da9b382172280a617b805168aa0f2aff GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=50gQXIm3TylbvPRa+& zABh2l7)yfuf*Bm1-ADs+vOHZJLpZLBo;@hoV!*?4F!m>tfHzanLk0)I6*WJfxBNVp zEaiBqhi%=eGSd?IGdsP{1^m2f!1;56h5YFcLL2sU*E&DXpKemHD(t7ri)y=;<1!by w&OBk~Fun4w{?J@ycIoSCPplZsE8@N}l|1G?_26RB9-yrZp00i_>zopr04>W$9{>OV literal 0 HcmV?d00001 diff --git a/games/minimal/mods/default/textures/default_pinetree.png b/games/minimal/mods/default/textures/default_pinetree.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5328ff385ebe307f299a8aeb7866da0713aa8d GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VtB;eVuZxw3t*Mi_UWliI ztEEA7pnIr~W1yR@qp41WpG$J2UqYx?Ot7cDv6h#Ed4Pv)?nWj%p!NlxE{-7*mt{|T zim@niuv}!B=@Rh1{+3?#?|7DFN}F;Pu8(Xn-B6lC~-{7CUZ0?hkzhXCjFmNxm`?5dh?T-ZyKQ|h`pEi5foD7>AhSILZ zHw)_)oIRTTT1djq!bLA)joJ>o4e3Uf*Qa_g)^2c)+!5o)YA?ZlJRs!75oTM(X`-If b9DgylSg_5@k7{TKx|PAx)z4*}Q$iB}eJx~| literal 0 HcmV?d00001 diff --git a/games/minimal/mods/default/textures/default_pinetree_top.png b/games/minimal/mods/default/textures/default_pinetree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8705710ed825fcf7cbbf6edf0de6b5b5ddb8b4f5 GIT binary patch literal 574 zcmV-E0>S->P)DQSwTtT2tLMz6=gy+x#+={6nb@+5^5)F#+qv%B zvhUlk?Aov6%A(`Pn%=*d-Mf&~se!P7VDaS1@ZrSk*t6-=vgp#T>({I2(5vFepy9-u z;KG*Nyq4g>l-|9O)~C_+`^pY!IRjylGU}3+p~||xsKho zjL)r$)~$%erG?9BtagZNU$m zooDc#TuBKj7V@^OxwoLa`;s+^TDep$Xzm>-b2W*MN!}(k!n_oesUFj2IVx362UiB5 z%*<x5Jc_WaU3WZ z=IP=X!XcaN5t^8ia>6Ha#{|VAt`jCU9&~o-PLyJwurbGV6^C<&yOuO_^JHde=M}*> zOxXOEx3RJH3b=`}>9#QlvgrwSGO+PAibgr8_9*hmMJeepj>FVdQ I&MBb@0QoR5y#N3J literal 0 HcmV?d00001 diff --git a/games/minimal/mods/default/textures/default_snow_side.png b/games/minimal/mods/default/textures/default_snow_side.png new file mode 100644 index 0000000000000000000000000000000000000000..3e98915131310783a3632d7622c61bdc0ca107b2 GIT binary patch literal 360 zcmV-u0hj)XP)M|AjkO|Lev+((u1ckg~msv8W%AZ_5A#t}!bA85tRS zLF_b;sX)vG#Eejy4GF6Ou>b@k0F*DnKn#EzfCG$zQ2+p#UIIeZnL}6r0000peCA)iIU?`2{mLJiCzwoU z!m4Ppc~TqWjKn2Zj3ix*wK6O8L>UZCV$xb0C3QDDT|UTjere`a1-9nUh@WX4-@arq d?`W)GWDx$!UF&1y7zH$p!PC{xWt~$(699CwN&^4@ literal 0 HcmV?d00001 diff --git a/src/treegen.cpp b/src/treegen.cpp index 1c915ca39..a85d88815 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -656,15 +656,8 @@ void make_jungletree(MMVManip &vmanip, v3s16 p0, INodeDefManager *ndef, int seed and in games that have saplings; both are deprecated but not replaced yet */ - content_t c_tree = ndef->getId("mapgen_jungletree"); - content_t c_leaves = ndef->getId("mapgen_jungleleaves"); - if (c_tree == CONTENT_IGNORE) - c_tree = ndef->getId("mapgen_tree"); - if (c_leaves == CONTENT_IGNORE) - c_leaves = ndef->getId("mapgen_leaves"); - - MapNode treenode(c_tree); - MapNode leavesnode(c_leaves); + MapNode treenode(ndef->getId("mapgen_jungletree")); + MapNode leavesnode(ndef->getId("mapgen_jungleleaves")); PseudoRandom pr(seed); for (s16 x= -1; x <= 1; x++) From 502e40a649137461947c36ea52205f058f81296f Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 12 Jun 2015 20:00:50 +0200 Subject: [PATCH 106/670] dofile error reporting for syntax errors According to doc, dofile() raises an error when parsing failed due to syntax errors. Fixes #2775 --- src/script/cpp_api/s_security.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index c46483e95..6a6d40307 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -407,7 +407,8 @@ int ScriptApiSecurity::sl_g_dofile(lua_State *L) { int nret = sl_g_loadfile(L); if (nret != 1) { - return nret; + lua_error(L); + // code after this function isn't executed } int top_precall = lua_gettop(L); lua_call(L, 0, LUA_MULTRET); From e50aa4ed06f36c74a892ec68d576c52ba9dc0b2c Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Sat, 30 May 2015 20:53:21 +0200 Subject: [PATCH 107/670] Add return list of individual counts to find_node_in_area --- doc/lua_api.txt | 1 + src/script/lua_api/l_env.cpp | 29 +++++++++++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f8dc31875..4301762e2 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1917,6 +1917,7 @@ and `minetest.auth_reload` call the authetification handler. * `minetest.find_node_near(pos, radius, nodenames)`: returns pos or `nil` * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `minetest.find_nodes_in_area(minp, maxp, nodenames)`: returns a list of positions + * returns as second value a table with the count of the individual nodes found * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `minetest.find_nodes_in_area_under_air(minp, maxp, nodenames)`: returns a list of positions * returned positions are nodes with a node air above diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 9581d1ef3..50c445d50 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -572,19 +572,28 @@ int ModApiEnvMod::l_find_nodes_in_area(lua_State *L) ndef->getIds(lua_tostring(L, 3), filter); } + std::map individual_count; + lua_newtable(L); u64 i = 0; - for(s16 x = minp.X; x <= maxp.X; x++) - for(s16 y = minp.Y; y <= maxp.Y; y++) - for(s16 z = minp.Z; z <= maxp.Z; z++) { - v3s16 p(x, y, z); - content_t c = env->getMap().getNodeNoEx(p).getContent(); - if(filter.count(c) != 0) { - push_v3s16(L, p); - lua_rawseti(L, -2, ++i); - } + for (s16 x = minp.X; x <= maxp.X; x++) + for (s16 y = minp.Y; y <= maxp.Y; y++) + for (s16 z = minp.Z; z <= maxp.Z; z++) { + v3s16 p(x, y, z); + content_t c = env->getMap().getNodeNoEx(p).getContent(); + if (filter.count(c) != 0) { + push_v3s16(L, p); + lua_rawseti(L, -2, ++i); + individual_count[c]++; + } } - return 1; + lua_newtable(L); + for (std::set::iterator it = filter.begin(); + it != filter.end(); ++it) { + lua_pushnumber(L, individual_count[*it]); + lua_setfield(L, -2, ndef->get(*it).name.c_str()); + } + return 2; } // find_nodes_in_area_under_air(minp, maxp, nodenames) -> list of positions From aa13baa30a45b0f834c23bd5c0407895eb8ec0ee Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Sat, 30 May 2015 16:56:42 +0200 Subject: [PATCH 108/670] Add minetest.register_on_player_hpchange --- builtin/game/register.lua | 28 ++++++++++++++++++++++++++++ doc/lua_api.txt | 7 +++++++ src/content_sao.cpp | 6 ++++++ src/script/cpp_api/s_player.cpp | 19 +++++++++++++++++++ src/script/cpp_api/s_player.h | 1 + 5 files changed, 61 insertions(+) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index e5ba88f7d..3a13abfb3 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -407,6 +407,34 @@ local function make_registration_wrap(reg_fn_name, clear_fn_name) return list end +core.registered_on_player_hpchanges = { modifiers = { }, loggers = { } } +function core.registered_on_player_hpchange(player, hp_change) + local last = false + for i = #core.registered_on_player_hpchanges.modifiers, 1, -1 do + local func = core.registered_on_player_hpchanges.modifiers[i] + hp_change, last = func(player, hp_change) + if type(hp_change) ~= "number" then + local debuginfo = debug.getinfo(func) + error("The register_on_hp_changes function has to return a number at " .. + debuginfo.short_src .. " line " .. debuginfo.linedefined) + end + if last then + break + end + end + for i, func in ipairs(core.registered_on_player_hpchanges.loggers) do + func(player, hp_change) + end + return hp_change +end +function core.register_on_player_hpchange(func, modifier) + if modifier then + table.insert(core.registered_on_player_hpchanges.modifiers, func) + else + table.insert(core.registered_on_player_hpchanges.loggers, func) + end +end + core.registered_biomes = make_registration_wrap("register_biome", "clear_registered_biomes") core.registered_ores = make_registration_wrap("register_ore", "clear_registered_ores") core.registered_decorations = make_registration_wrap("register_decoration", "clear_registered_decorations") diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 4301762e2..012c6eae1 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1785,6 +1785,13 @@ Call these functions only at load time! the puncher to the punched. * `damage` - number that represents the damage calculated by the engine * should return `true` to prevent the default damage mechanism +* `minetest.register_on_player_hpchange(func(player, hp_change), modifier)` + * Called when the player gets damaged or healed + * `player`: ObjectRef of the player + * `hp_change`: the amount of change. Negative when it is damage. + * `modifier`: when true, the function should return the actual hp_change. + Note: modifiers only get a temporary hp_change that can be modified by later modifiers. + modifiers can return true as a second argument to stop the execution of further functions. * `minetest.register_on_respawnplayer(func(ObjectRef))` * Called when player is to be respawned * Called _before_ repositioning of player occurs diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 1a0fce0bb..318dd367a 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1125,6 +1125,12 @@ void PlayerSAO::setHP(s16 hp) { s16 oldhp = m_player->hp; + s16 hp_change = m_env->getScriptIface()->on_player_hpchange(this, + hp - oldhp); + if (hp_change == 0) + return; + hp = oldhp + hp_change; + if (hp < 0) hp = 0; else if (hp > PLAYER_MAX_HP) diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index 9b2c3753c..a499130c7 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -69,6 +69,25 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, return lua_toboolean(L, -1); } +s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player, + s16 hp_change) +{ + SCRIPTAPI_PRECHECKHEADER + + // Get core.registered_on_player_hpchange + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_player_hpchange"); + lua_remove(L, -2); + + objectrefGetOrCreate(L, player); + lua_pushnumber(L, hp_change); + if (lua_pcall(L, 2, 1, m_errorhandler)) + scriptError(); + hp_change = lua_tointeger(L, -1); + lua_pop(L, -1); + return hp_change; +} + bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h index 9c8d1d1ad..2e4dc2222 100644 --- a/src/script/cpp_api/s_player.h +++ b/src/script/cpp_api/s_player.h @@ -43,6 +43,7 @@ public: bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter, float time_from_last_punch, const ToolCapabilities *toolcap, v3f dir, s16 damage); + s16 on_player_hpchange(ServerActiveObject *player, s16 hp_change); void on_playerReceiveFields(ServerActiveObject *player, const std::string &formname, const StringMap &fields); }; From 572990dcd3f43386860b5b14015ad722fb96ea83 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 10 Jun 2015 00:35:21 +0200 Subject: [PATCH 109/670] Add utf-8 conversion utilities and re-add intlGUIEditBox --- build/android/Makefile | 69 +- build/android/jni/Android.mk | 9 +- build/android/libiconv_android.patch | 39 + build/android/libiconv_android_mk.patch | 51 + build/android/libiconv_stdio.patch | 10 + src/CMakeLists.txt | 1 + src/intlGUIEditBox.cpp | 1509 +++++++++++++++++++++++ src/intlGUIEditBox.h | 178 +++ src/util/string.cpp | 94 ++ src/util/string.h | 10 +- 10 files changed, 1966 insertions(+), 4 deletions(-) create mode 100644 build/android/libiconv_android.patch create mode 100644 build/android/libiconv_android_mk.patch create mode 100644 build/android/libiconv_stdio.patch create mode 100644 src/intlGUIEditBox.cpp create mode 100644 src/intlGUIEditBox.h diff --git a/build/android/Makefile b/build/android/Makefile index 1b33a4599..798d56037 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -131,6 +131,13 @@ FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp FREETYPE_TIMESTAMP_INT = $(ROOT)/deps/freetype_timestamp FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android +ICONV_VERSION = 1.14 +ICONV_DIR = $(ROOT)/deps/libiconv/ +ICONV_LIB = $(ICONV_DIR)/iconv.so +ICONV_TIMESTAMP = $(ICONV_DIR)timestamp +ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp +ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz + SQLITE3_FOLDER = sqlite-amalgamation-3080704 SQLITE3_URL = http://www.sqlite.org/2014/$(SQLITE3_FOLDER).zip @@ -431,6 +438,64 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) clean_freetype : $(RM) -rf ${FREETYPE_DIR} +$(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 ${ROOT}/deps; \ + cd ${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; \ + cd ${ICONV_DIR}; \ + patch -p1 < ${ROOT}/libiconv_android.patch; \ + patch -p1 < ${ROOT}/libiconv_android_mk.patch; \ + patch -p1 < ${ROOT}/libiconv_stdio.patch; \ + cd jni; \ + ln -s .. src; \ + 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}; \ + export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ + echo "changed timestamp for iconv detected building..."; \ + cd ${ICONV_DIR}; \ + ./configure; \ + make; \ + export NDK_PROJECT_PATH=${ICONV_DIR}; \ + ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \ + APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \ + TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ + TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \ + TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \ + touch ${ICONV_TIMESTAMP}; \ + touch ${ICONV_TIMESTAMP_INT}; \ + else \ + echo "nothing to be done for iconv"; \ + fi + +clean_iconv : + $(RM) -rf ${ICONV_DIR} + #Note: Texturehack patch is required for gpu's not supporting color format # correctly. Known bad GPU: # -geforce on emulator @@ -736,7 +801,7 @@ assets : $(ASSETS_TIMESTAMP) clean_assets : @$(RM) -r assets -apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ +apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \ sqlite3_download @export NDEBUG=$$NDEBUG; $(MAKE) manifest; \ @@ -778,7 +843,7 @@ envpaths : clean_all : @$(MAKE) clean_apk; \ - $(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \ + $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl clean_openssl \ clean_openal clean_ogg clean_gmp clean_manifest; \ sleep 1; \ $(RM) -r gen libs obj deps bin Debug and_env diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 2c574bc41..d62698ce4 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -24,6 +24,11 @@ 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/obj/local/$(TARGET_ARCH_ABI)/libiconv.a +include $(PREBUILT_STATIC_LIBRARY) + include $(CLEAR_VARS) LOCAL_MODULE := openal LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so @@ -97,6 +102,7 @@ LOCAL_C_INCLUDES := \ jni/src/json \ jni/src/cguittfont \ deps/irrlicht/include \ + deps/libiconv/include \ deps/freetype2-android/include \ deps/curl/include \ deps/openal-soft/jni/OpenAL/include \ @@ -153,6 +159,7 @@ LOCAL_SRC_FILES := \ jni/src/httpfetch.cpp \ jni/src/hud.cpp \ jni/src/imagefilters.cpp \ + jni/src/intlGUIEditBox.cpp \ jni/src/inventory.cpp \ jni/src/inventorymanager.cpp \ jni/src/itemdef.cpp \ @@ -346,7 +353,7 @@ LOCAL_SRC_FILES += \ LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp -LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) +LOCAL_STATIC_LIBRARIES := Irrlicht iconv freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) ifeq ($(HAVE_LEVELDB), 1) LOCAL_STATIC_LIBRARIES += LevelDB diff --git a/build/android/libiconv_android.patch b/build/android/libiconv_android.patch new file mode 100644 index 000000000..4eca0a4ef --- /dev/null +++ b/build/android/libiconv_android.patch @@ -0,0 +1,39 @@ +--- a/libcharset/lib/localcharset.c 2015-06-10 11:55:25.933870724 +0200 ++++ b/libcharset/lib/localcharset.c 2015-06-10 11:55:39.578063493 +0200 +@@ -47,7 +47,7 @@ + + #if !defined WIN32_NATIVE + # include +-# if HAVE_LANGINFO_CODESET ++# if HAVE_LANGINFO_CODESET && !(defined __ANDROID__) + # include + # else + # if 0 /* see comment below */ +@@ -124,7 +124,7 @@ get_charset_aliases (void) + cp = charset_aliases; + if (cp == NULL) + { +-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) ++#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__ || defined __ANDROID__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; +@@ -338,6 +338,9 @@ get_charset_aliases (void) + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; + # endif ++# if defined __ANDROID__ ++ cp = "*" "\0" "UTF-8" "\0"; ++# endif + #endif + + charset_aliases = cp; +@@ -361,7 +364,7 @@ locale_charset (void) + const char *codeset; + const char *aliases; + +-#if !(defined WIN32_NATIVE || defined OS2) ++#if !(defined WIN32_NATIVE || defined OS2 || defined __ANDROID__) + + # if HAVE_LANGINFO_CODESET + diff --git a/build/android/libiconv_android_mk.patch b/build/android/libiconv_android_mk.patch new file mode 100644 index 000000000..9eb7a1915 --- /dev/null +++ b/build/android/libiconv_android_mk.patch @@ -0,0 +1,51 @@ +From fe27aae178d65b06d5f4104158343b0d2d33e3f0 Mon Sep 17 00:00:00 2001 +From: Pierre Zurek +Date: Sat, 2 Apr 2011 23:11:57 +0200 +Subject: [PATCH] Added Android.mk. + +This makefile first executes the configure script, that will +generate the config.h files necessary to build iconv. +--- + Android.mk | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + create mode 100644 Android.mk + +diff --git a/jni/Android.mk b/jni/Android.mk +new file mode 100644 +index 0000000..799b22d +--- /dev/null ++++ b/jni/Android.mk +@@ -0,0 +1,32 @@ ++LOCAL_PATH := $(call my-dir) ++include $(CLEAR_VARS) ++ ++LOCAL_ARM_MODE := arm ++ ++LOCAL_SRC_FILES := src/lib/iconv.c \ ++ src/libcharset/lib/localcharset.c \ ++ src/lib/relocatable.c ++ ++LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/include \ ++ $(LOCAL_PATH)/src/libcharset \ ++ $(LOCAL_PATH)/src/libcharset/include ++ ++LOCAL_CFLAGS := \ ++ -DLIBDIR="\"c\"" \ ++ -D_ANDROID \ ++ -DBUILDING_LIBCHARSET \ ++ -DBUILDING_LIBICONV \ ++ -DBUILDING_LIBICONV \ ++ -DIN_LIBRARY ++ ++LOCAL_MODULE:= iconv ++ ++$(info Configuring iconv...) ++COMMAND := $(shell \ ++ export PATH=$(TOOLCHAIN_INSTALL_DIR)/bin:$$PATH; \ ++ cd $(LOCAL_PATH); \ ++ make distclean; \ ++ ./configure --host="arm-linux-androideabi") ++$(info iconv configured.) ++ ++include $(BUILD_STATIC_LIBRARY) ++ diff --git a/build/android/libiconv_stdio.patch b/build/android/libiconv_stdio.patch new file mode 100644 index 000000000..19cb6aa09 --- /dev/null +++ b/build/android/libiconv_stdio.patch @@ -0,0 +1,10 @@ +--- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200 ++++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200 +@@ -695,7 +696,8 @@ _GL_CXXALIASWARN (gets); + /* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ ++#define gets(a) fgets( a, sizeof(*(a)), stdin) + #endif \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 190f4e9bd..ef508d9b8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -417,6 +417,7 @@ set(client_SRCS guiVolumeChange.cpp hud.cpp imagefilters.cpp + intlGUIEditBox.cpp keycode.cpp localplayer.cpp main.cpp diff --git a/src/intlGUIEditBox.cpp b/src/intlGUIEditBox.cpp new file mode 100644 index 000000000..33bf8a13c --- /dev/null +++ b/src/intlGUIEditBox.cpp @@ -0,0 +1,1509 @@ +// 11.11.2011 11:11 ValkaTR +// +// This is a copy of intlGUIEditBox from the irrlicht, but with a +// fix in the OnEvent function, which doesn't allowed input of +// other keyboard layouts than latin-1 +// +// Characters like: ä ö ü õ ы й ю я ъ № € ° ... +// +// This fix is only needed for linux, because of a bug +// in the CIrrDeviceLinux.cpp:1014-1015 of the irrlicht +// +// Also locale in the programm should not be changed to +// a "C", "POSIX" or whatever, it should be set to "", +// or XLookupString will return nothing for the international +// characters. +// +// From the "man setlocale": +// +// On startup of the main program, the portable "C" locale +// is selected as default. A program may be made +// portable to all locales by calling: +// +// setlocale(LC_ALL, ""); +// +// after program initialization.... +// + +// Copyright (C) 2002-2013 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#include "intlGUIEditBox.h" + +#if defined(_IRR_COMPILE_WITH_GUI_) && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 + +#include "IGUISkin.h" +#include "IGUIEnvironment.h" +#include "IGUIFont.h" +#include "IVideoDriver.h" +//#include "rect.h" +//#include "irrlicht/os.cpp" +#include "porting.h" +//#include "Keycodes.h" +#include "log.h" + +/* + todo: + optional scrollbars + ctrl+left/right to select word + double click/ctrl click: word select + drag to select whole words, triple click to select line + optional? dragging selected text + numerical +*/ + +namespace irr +{ +namespace gui +{ + +//! constructor +intlGUIEditBox::intlGUIEditBox(const wchar_t* text, bool border, + IGUIEnvironment* environment, IGUIElement* parent, s32 id, + const core::rect& rectangle) + : IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false), + Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0), + OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0), + Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0), + WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false), + PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER), + CurrentTextRect(0,0,1,1), FrameRect(rectangle) +{ + #ifdef _DEBUG + setDebugName("intlintlGUIEditBox"); + #endif + + Text = text; + + if (Environment) + Operator = Environment->getOSOperator(); + + if (Operator) + Operator->grab(); + + // this element can be tabbed to + setTabStop(true); + setTabOrder(-1); + + IGUISkin *skin = 0; + if (Environment) + skin = Environment->getSkin(); + if (Border && skin) + { + FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + } + + breakText(); + + calculateScrollPos(); +} + + +//! destructor +intlGUIEditBox::~intlGUIEditBox() +{ + if (OverrideFont) + OverrideFont->drop(); + + if (Operator) + Operator->drop(); +} + + +//! Sets another skin independent font. +void intlGUIEditBox::setOverrideFont(IGUIFont* font) +{ + if (OverrideFont == font) + return; + + if (OverrideFont) + OverrideFont->drop(); + + OverrideFont = font; + + if (OverrideFont) + OverrideFont->grab(); + + breakText(); +} + +IGUIFont * intlGUIEditBox::getOverrideFont() const +{ + return OverrideFont; +} + +//! Get the font which is used right now for drawing +IGUIFont* intlGUIEditBox::getActiveFont() const +{ + if ( OverrideFont ) + return OverrideFont; + IGUISkin* skin = Environment->getSkin(); + if (skin) + return skin->getFont(); + return 0; +} + +//! Sets another color for the text. +void intlGUIEditBox::setOverrideColor(video::SColor color) +{ + OverrideColor = color; + OverrideColorEnabled = true; +} + +video::SColor intlGUIEditBox::getOverrideColor() const +{ + return OverrideColor; +} + +//! Turns the border on or off +void intlGUIEditBox::setDrawBorder(bool border) +{ + Border = border; +} + +//! Sets whether to draw the background +void intlGUIEditBox::setDrawBackground(bool draw) +{ +} + +//! Sets if the text should use the overide color or the color in the gui skin. +void intlGUIEditBox::enableOverrideColor(bool enable) +{ + OverrideColorEnabled = enable; +} + +bool intlGUIEditBox::isOverrideColorEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return OverrideColorEnabled; +} + +//! Enables or disables word wrap +void intlGUIEditBox::setWordWrap(bool enable) +{ + WordWrap = enable; + breakText(); +} + + +void intlGUIEditBox::updateAbsolutePosition() +{ + core::rect oldAbsoluteRect(AbsoluteRect); + IGUIElement::updateAbsolutePosition(); + if ( oldAbsoluteRect != AbsoluteRect ) + { + breakText(); + } +} + + +//! Checks if word wrap is enabled +bool intlGUIEditBox::isWordWrapEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return WordWrap; +} + + +//! Enables or disables newlines. +void intlGUIEditBox::setMultiLine(bool enable) +{ + MultiLine = enable; +} + + +//! Checks if multi line editing is enabled +bool intlGUIEditBox::isMultiLineEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return MultiLine; +} + + +void intlGUIEditBox::setPasswordBox(bool passwordBox, wchar_t passwordChar) +{ + PasswordBox = passwordBox; + if (PasswordBox) + { + PasswordChar = passwordChar; + setMultiLine(false); + setWordWrap(false); + BrokenText.clear(); + } +} + + +bool intlGUIEditBox::isPasswordBox() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return PasswordBox; +} + + +//! Sets text justification +void intlGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) +{ + HAlign = horizontal; + VAlign = vertical; +} + + +//! called if an event happened. +bool intlGUIEditBox::OnEvent(const SEvent& event) +{ + if (IsEnabled) + { + + switch(event.EventType) + { + case EET_GUI_EVENT: + if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) + { + if (event.GUIEvent.Caller == this) + { + MouseMarking = false; + setTextMarkers(0,0); + } + } + break; + case EET_KEY_INPUT_EVENT: + { +#if (defined(linux) || defined(__linux) || defined(__FreeBSD__)) + // ################################################################ + // ValkaTR: + // This part is the difference from the original intlGUIEditBox + // It converts UTF-8 character into a UCS-2 (wchar_t) + wchar_t wc = L'_'; + mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) ); + + //printf( "char: %lc (%u) \r\n", wc, wc ); + + SEvent irrevent(event); + irrevent.KeyInput.Char = wc; + // ################################################################ + + if (processKey(irrevent)) + return true; +#else + if (processKey(event)) + return true; +#endif // defined(linux) + + break; + } + case EET_MOUSE_INPUT_EVENT: + if (processMouse(event)) + return true; + break; + default: + break; + } + } + + return IGUIElement::OnEvent(event); +} + + +bool intlGUIEditBox::processKey(const SEvent& event) +{ + if (!event.KeyInput.PressedDown) + return false; + + bool textChanged = false; + s32 newMarkBegin = MarkBegin; + s32 newMarkEnd = MarkEnd; + + // control shortcut handling + + if (event.KeyInput.Control) + { + // german backlash '\' entered with control + '?' + if ( event.KeyInput.Char == '\\' ) + { + inputChar(event.KeyInput.Char); + return true; + } + + switch(event.KeyInput.Key) + { + case KEY_KEY_A: + // select all + newMarkBegin = 0; + newMarkEnd = Text.size(); + break; + case KEY_KEY_C: + // copy to clipboard + if (!PasswordBox && Operator && MarkBegin != MarkEnd) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + core::stringc s; + s = Text.subString(realmbgn, realmend - realmbgn).c_str(); + Operator->copyToClipboard(s.c_str()); + } + break; + case KEY_KEY_X: + // cut to the clipboard + if (!PasswordBox && Operator && MarkBegin != MarkEnd) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + // copy + core::stringc sc; + sc = Text.subString(realmbgn, realmend - realmbgn).c_str(); + Operator->copyToClipboard(sc.c_str()); + + if (IsEnabled) + { + // delete + core::stringw s; + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + + CursorPos = realmbgn; + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + } + break; + case KEY_KEY_V: + if ( !IsEnabled ) + break; + + // paste from the clipboard + if (Operator) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + // add new character + const c8* p = Operator->getTextFromClipboard(); + if (p) + { + if (MarkBegin == MarkEnd) + { + // insert text + core::stringw s = Text.subString(0, CursorPos); + s.append(p); + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + + if (!Max || s.size()<=Max) // thx to Fish FH for fix + { + Text = s; + s = p; + CursorPos += s.size(); + } + } + else + { + // replace text + + core::stringw s = Text.subString(0, realmbgn); + s.append(p); + s.append( Text.subString(realmend, Text.size()-realmend) ); + + if (!Max || s.size()<=Max) // thx to Fish FH for fix + { + Text = s; + s = p; + CursorPos = realmbgn + s.size(); + } + } + } + + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + case KEY_HOME: + // move/highlight to start of text + if (event.KeyInput.Shift) + { + newMarkEnd = CursorPos; + newMarkBegin = 0; + CursorPos = 0; + } + else + { + CursorPos = 0; + newMarkBegin = 0; + newMarkEnd = 0; + } + break; + case KEY_END: + // move/highlight to end of text + if (event.KeyInput.Shift) + { + newMarkBegin = CursorPos; + newMarkEnd = Text.size(); + CursorPos = 0; + } + else + { + CursorPos = Text.size(); + newMarkBegin = 0; + newMarkEnd = 0; + } + break; + default: + return false; + } + } + // default keyboard handling + else + switch(event.KeyInput.Key) + { + case KEY_END: + { + s32 p = Text.size(); + if (WordWrap || MultiLine) + { + p = getLineFromPos(CursorPos); + p = BrokenTextPositions[p] + (s32)BrokenText[p].size(); + if (p > 0 && (Text[p-1] == L'\r' || Text[p-1] == L'\n' )) + p-=1; + } + + if (event.KeyInput.Shift) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + + newMarkEnd = p; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + CursorPos = p; + BlinkStartTime = porting::getTimeMs(); + } + break; + case KEY_HOME: + { + + s32 p = 0; + if (WordWrap || MultiLine) + { + p = getLineFromPos(CursorPos); + p = BrokenTextPositions[p]; + } + + if (event.KeyInput.Shift) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + newMarkEnd = p; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + CursorPos = p; + BlinkStartTime = porting::getTimeMs(); + } + break; + case KEY_RETURN: + if (MultiLine) + { + inputChar(L'\n'); + return true; + } + else + { + sendGuiEvent( EGET_EDITBOX_ENTER ); + } + break; + case KEY_LEFT: + + if (event.KeyInput.Shift) + { + if (CursorPos > 0) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + + newMarkEnd = CursorPos-1; + } + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + if (CursorPos > 0) CursorPos--; + BlinkStartTime = porting::getTimeMs(); + break; + + case KEY_RIGHT: + if (event.KeyInput.Shift) + { + if (Text.size() > (u32)CursorPos) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + + newMarkEnd = CursorPos+1; + } + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + if (Text.size() > (u32)CursorPos) CursorPos++; + BlinkStartTime = porting::getTimeMs(); + break; + case KEY_UP: + if (MultiLine || (WordWrap && BrokenText.size() > 1) ) + { + s32 lineNo = getLineFromPos(CursorPos); + s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd); + if (lineNo > 0) + { + s32 cp = CursorPos - BrokenTextPositions[lineNo]; + if ((s32)BrokenText[lineNo-1].size() < cp) + CursorPos = BrokenTextPositions[lineNo-1] + (s32)BrokenText[lineNo-1].size()-1; + else + CursorPos = BrokenTextPositions[lineNo-1] + cp; + } + + if (event.KeyInput.Shift) + { + newMarkBegin = mb; + newMarkEnd = CursorPos; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + } + else + { + return false; + } + break; + case KEY_DOWN: + if (MultiLine || (WordWrap && BrokenText.size() > 1) ) + { + s32 lineNo = getLineFromPos(CursorPos); + s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd); + if (lineNo < (s32)BrokenText.size()-1) + { + s32 cp = CursorPos - BrokenTextPositions[lineNo]; + if ((s32)BrokenText[lineNo+1].size() < cp) + CursorPos = BrokenTextPositions[lineNo+1] + BrokenText[lineNo+1].size()-1; + else + CursorPos = BrokenTextPositions[lineNo+1] + cp; + } + + if (event.KeyInput.Shift) + { + newMarkBegin = mb; + newMarkEnd = CursorPos; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + } + else + { + return false; + } + break; + + case KEY_BACK: + if ( !this->IsEnabled ) + break; + + if (Text.size()) + { + core::stringw s; + + if (MarkBegin != MarkEnd) + { + // delete marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + + CursorPos = realmbgn; + } + else + { + // delete text behind cursor + if (CursorPos>0) + s = Text.subString(0, CursorPos-1); + else + s = L""; + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + Text = s; + --CursorPos; + } + + if (CursorPos < 0) + CursorPos = 0; + BlinkStartTime = porting::getTimeMs(); + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + case KEY_DELETE: + if ( !this->IsEnabled ) + break; + + if (Text.size() != 0) + { + core::stringw s; + + if (MarkBegin != MarkEnd) + { + // delete marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + + CursorPos = realmbgn; + } + else + { + // delete text before cursor + s = Text.subString(0, CursorPos); + s.append( Text.subString(CursorPos+1, Text.size()-CursorPos-1) ); + Text = s; + } + + if (CursorPos > (s32)Text.size()) + CursorPos = (s32)Text.size(); + + BlinkStartTime = porting::getTimeMs(); + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + + case KEY_ESCAPE: + case KEY_TAB: + case KEY_SHIFT: + case KEY_F1: + case KEY_F2: + case KEY_F3: + case KEY_F4: + case KEY_F5: + case KEY_F6: + case KEY_F7: + case KEY_F8: + case KEY_F9: + case KEY_F10: + case KEY_F11: + case KEY_F12: + case KEY_F13: + case KEY_F14: + case KEY_F15: + case KEY_F16: + case KEY_F17: + case KEY_F18: + case KEY_F19: + case KEY_F20: + case KEY_F21: + case KEY_F22: + case KEY_F23: + case KEY_F24: + // ignore these keys + return false; + + default: + inputChar(event.KeyInput.Char); + return true; + } + + // Set new text markers + setTextMarkers( newMarkBegin, newMarkEnd ); + + // break the text if it has changed + if (textChanged) + { + breakText(); + sendGuiEvent(EGET_EDITBOX_CHANGED); + } + + calculateScrollPos(); + + return true; +} + + +//! draws the element and its children +void intlGUIEditBox::draw() +{ + if (!IsVisible) + return; + + const bool focus = Environment->hasFocus(this); + + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + + FrameRect = AbsoluteRect; + + // draw the border + + if (Border) + { + skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW), + false, true, FrameRect, &AbsoluteClippingRect); + + FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + } + core::rect localClipRect = FrameRect; + localClipRect.clipAgainst(AbsoluteClippingRect); + + // draw the text + + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(); + + s32 cursorLine = 0; + s32 charcursorpos = 0; + + if (font) + { + if (LastBreakFont != font) + { + breakText(); + } + + // calculate cursor pos + + core::stringw *txtLine = &Text; + s32 startPos = 0; + + core::stringw s, s2; + + // get mark position + const bool ml = (!PasswordBox && (WordWrap || MultiLine)); + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0; + const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1; + const s32 lineCount = ml ? BrokenText.size() : 1; + + // Save the override color information. + // Then, alter it if the edit box is disabled. + const bool prevOver = OverrideColorEnabled; + const video::SColor prevColor = OverrideColor; + + if (Text.size()) + { + if (!IsEnabled && !OverrideColorEnabled) + { + OverrideColorEnabled = true; + OverrideColor = skin->getColor(EGDC_GRAY_TEXT); + } + + for (s32 i=0; i < lineCount; ++i) + { + setTextRect(i); + + // clipping test - don't draw anything outside the visible area + core::rect c = localClipRect; + c.clipAgainst(CurrentTextRect); + if (!c.isValid()) + continue; + + // get current line + if (PasswordBox) + { + if (BrokenText.size() != 1) + { + BrokenText.clear(); + BrokenText.push_back(core::stringw()); + } + if (BrokenText[0].size() != Text.size()) + { + BrokenText[0] = Text; + for (u32 q = 0; q < Text.size(); ++q) + { + BrokenText[0] [q] = PasswordChar; + } + } + txtLine = &BrokenText[0]; + startPos = 0; + } + else + { + txtLine = ml ? &BrokenText[i] : &Text; + startPos = ml ? BrokenTextPositions[i] : 0; + } + + + // draw normal text + font->draw(txtLine->c_str(), CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT), + false, true, &localClipRect); + + // draw mark and marked text + if (focus && MarkBegin != MarkEnd && i >= hlineStart && i < hlineStart + hlineCount) + { + + s32 mbegin = 0, mend = 0; + s32 lineStartPos = 0, lineEndPos = txtLine->size(); + + if (i == hlineStart) + { + // highlight start is on this line + s = txtLine->subString(0, realmbgn - startPos); + mbegin = font->getDimension(s.c_str()).Width; + + // deal with kerning + mbegin += font->getKerningWidth( + &((*txtLine)[realmbgn - startPos]), + realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0); + + lineStartPos = realmbgn - startPos; + } + if (i == hlineStart + hlineCount - 1) + { + // highlight end is on this line + s2 = txtLine->subString(0, realmend - startPos); + mend = font->getDimension(s2.c_str()).Width; + lineEndPos = (s32)s2.size(); + } + else + mend = font->getDimension(txtLine->c_str()).Width; + + CurrentTextRect.UpperLeftCorner.X += mbegin; + CurrentTextRect.LowerRightCorner.X = CurrentTextRect.UpperLeftCorner.X + mend - mbegin; + + // draw mark + skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), CurrentTextRect, &localClipRect); + + // draw marked text + s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos); + + if (s.size()) + font->draw(s.c_str(), CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_HIGH_LIGHT_TEXT), + false, true, &localClipRect); + + } + } + + // Return the override color information to its previous settings. + OverrideColorEnabled = prevOver; + OverrideColor = prevColor; + } + + // draw cursor + + if (WordWrap || MultiLine) + { + cursorLine = getLineFromPos(CursorPos); + txtLine = &BrokenText[cursorLine]; + startPos = BrokenTextPositions[cursorLine]; + } + s = txtLine->subString(0,CursorPos-startPos); + charcursorpos = font->getDimension(s.c_str()).Width + + font->getKerningWidth(L"_", CursorPos-startPos > 0 ? &((*txtLine)[CursorPos-startPos-1]) : 0); + + if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 < 350) + { + setTextRect(cursorLine); + CurrentTextRect.UpperLeftCorner.X += charcursorpos; + + font->draw(L"_", CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT), + false, true, &localClipRect); + } + } + + // draw children + IGUIElement::draw(); +} + + +//! Sets the new caption of this element. +void intlGUIEditBox::setText(const wchar_t* text) +{ + Text = text; + if (u32(CursorPos) > Text.size()) + CursorPos = Text.size(); + HScrollPos = 0; + breakText(); +} + + +//! Enables or disables automatic scrolling with cursor position +//! \param enable: If set to true, the text will move around with the cursor position +void intlGUIEditBox::setAutoScroll(bool enable) +{ + AutoScroll = enable; +} + + +//! Checks to see if automatic scrolling is enabled +//! \return true if automatic scrolling is enabled, false if not +bool intlGUIEditBox::isAutoScrollEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return AutoScroll; +} + + +//! Gets the area of the text in the edit box +//! \return Returns the size in pixels of the text +core::dimension2du intlGUIEditBox::getTextDimension() +{ + core::rect ret; + + setTextRect(0); + ret = CurrentTextRect; + + for (u32 i=1; i < BrokenText.size(); ++i) + { + setTextRect(i); + ret.addInternalPoint(CurrentTextRect.UpperLeftCorner); + ret.addInternalPoint(CurrentTextRect.LowerRightCorner); + } + + return core::dimension2du(ret.getSize()); +} + + +//! Sets the maximum amount of characters which may be entered in the box. +//! \param max: Maximum amount of characters. If 0, the character amount is +//! infinity. +void intlGUIEditBox::setMax(u32 max) +{ + Max = max; + + if (Text.size() > Max && Max != 0) + Text = Text.subString(0, Max); +} + + +//! Returns maximum amount of characters, previously set by setMax(); +u32 intlGUIEditBox::getMax() const +{ + return Max; +} + + +bool intlGUIEditBox::processMouse(const SEvent& event) +{ + switch(event.MouseInput.Event) + { + case irr::EMIE_LMOUSE_LEFT_UP: + if (Environment->hasFocus(this)) + { + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + if (MouseMarking) + { + setTextMarkers( MarkBegin, CursorPos ); + } + MouseMarking = false; + calculateScrollPos(); + return true; + } + break; + case irr::EMIE_MOUSE_MOVED: + { + if (MouseMarking) + { + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + setTextMarkers( MarkBegin, CursorPos ); + calculateScrollPos(); + return true; + } + } + break; + case EMIE_LMOUSE_PRESSED_DOWN: + if (!Environment->hasFocus(this)) + { + BlinkStartTime = porting::getTimeMs(); + MouseMarking = true; + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + setTextMarkers(CursorPos, CursorPos ); + calculateScrollPos(); + return true; + } + else + { + if (!AbsoluteClippingRect.isPointInside( + core::position2d(event.MouseInput.X, event.MouseInput.Y))) + { + return false; + } + else + { + // move cursor + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + + s32 newMarkBegin = MarkBegin; + if (!MouseMarking) + newMarkBegin = CursorPos; + + MouseMarking = true; + setTextMarkers( newMarkBegin, CursorPos); + calculateScrollPos(); + return true; + } + } + default: + break; + } + + return false; +} + + +s32 intlGUIEditBox::getCursorPos(s32 x, s32 y) +{ + IGUIFont* font = OverrideFont; + IGUISkin* skin = Environment->getSkin(); + if (!OverrideFont) + font = skin->getFont(); + + const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; + + core::stringw *txtLine=0; + s32 startPos=0; + x+=3; + + for (u32 i=0; i < lineCount; ++i) + { + setTextRect(i); + if (i == 0 && y < CurrentTextRect.UpperLeftCorner.Y) + y = CurrentTextRect.UpperLeftCorner.Y; + if (i == lineCount - 1 && y > CurrentTextRect.LowerRightCorner.Y ) + y = CurrentTextRect.LowerRightCorner.Y; + + // is it inside this region? + if (y >= CurrentTextRect.UpperLeftCorner.Y && y <= CurrentTextRect.LowerRightCorner.Y) + { + // we've found the clicked line + txtLine = (WordWrap || MultiLine) ? &BrokenText[i] : &Text; + startPos = (WordWrap || MultiLine) ? BrokenTextPositions[i] : 0; + break; + } + } + + if (x < CurrentTextRect.UpperLeftCorner.X) + x = CurrentTextRect.UpperLeftCorner.X; + + s32 idx = font->getCharacterFromPos(Text.c_str(), x - CurrentTextRect.UpperLeftCorner.X); + + // click was on or left of the line + if (idx != -1) + return idx + startPos; + + // click was off the right edge of the line, go to end. + return txtLine->size() + startPos; +} + + +//! Breaks the single text line. +void intlGUIEditBox::breakText() +{ + IGUISkin* skin = Environment->getSkin(); + + if ((!WordWrap && !MultiLine) || !skin) + return; + + BrokenText.clear(); // need to reallocate :/ + BrokenTextPositions.set_used(0); + + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(); + + if (!font) + return; + + LastBreakFont = font; + + core::stringw line; + core::stringw word; + core::stringw whitespace; + s32 lastLineStart = 0; + s32 size = Text.size(); + s32 length = 0; + s32 elWidth = RelativeRect.getWidth() - 6; + wchar_t c; + + for (s32 i=0; igetDimension(whitespace.c_str()).Width; + s32 worldlgth = font->getDimension(word.c_str()).Width; + + if (WordWrap && length + worldlgth + whitelgth > elWidth) + { + // break to next line + length = worldlgth; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); + lastLineStart = i - (s32)word.size(); + line = word; + } + else + { + // add word to line + line += whitespace; + line += word; + length += whitelgth + worldlgth; + } + + word = L""; + whitespace = L""; + } + + whitespace += c; + + // compute line break + if (lineBreak) + { + line += whitespace; + line += word; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); + lastLineStart = i+1; + line = L""; + word = L""; + whitespace = L""; + length = 0; + } + } + else + { + // yippee this is a word.. + word += c; + } + } + + line += whitespace; + line += word; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); +} + + +void intlGUIEditBox::setTextRect(s32 line) +{ + core::dimension2du d; + + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + + IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); + + if (!font) + return; + + // get text dimension + const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; + if (WordWrap || MultiLine) + { + d = font->getDimension(BrokenText[line].c_str()); + } + else + { + d = font->getDimension(Text.c_str()); + d.Height = AbsoluteRect.getHeight(); + } + d.Height += font->getKerningHeight(); + + // justification + switch (HAlign) + { + case EGUIA_CENTER: + // align to h centre + CurrentTextRect.UpperLeftCorner.X = (FrameRect.getWidth()/2) - (d.Width/2); + CurrentTextRect.LowerRightCorner.X = (FrameRect.getWidth()/2) + (d.Width/2); + break; + case EGUIA_LOWERRIGHT: + // align to right edge + CurrentTextRect.UpperLeftCorner.X = FrameRect.getWidth() - d.Width; + CurrentTextRect.LowerRightCorner.X = FrameRect.getWidth(); + break; + default: + // align to left edge + CurrentTextRect.UpperLeftCorner.X = 0; + CurrentTextRect.LowerRightCorner.X = d.Width; + + } + + switch (VAlign) + { + case EGUIA_CENTER: + // align to v centre + CurrentTextRect.UpperLeftCorner.Y = + (FrameRect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line; + break; + case EGUIA_LOWERRIGHT: + // align to bottom edge + CurrentTextRect.UpperLeftCorner.Y = + FrameRect.getHeight() - lineCount*d.Height + d.Height*line; + break; + default: + // align to top edge + CurrentTextRect.UpperLeftCorner.Y = d.Height*line; + break; + } + + CurrentTextRect.UpperLeftCorner.X -= HScrollPos; + CurrentTextRect.LowerRightCorner.X -= HScrollPos; + CurrentTextRect.UpperLeftCorner.Y -= VScrollPos; + CurrentTextRect.LowerRightCorner.Y = CurrentTextRect.UpperLeftCorner.Y + d.Height; + + CurrentTextRect += FrameRect.UpperLeftCorner; + +} + + +s32 intlGUIEditBox::getLineFromPos(s32 pos) +{ + if (!WordWrap && !MultiLine) + return 0; + + s32 i=0; + while (i < (s32)BrokenTextPositions.size()) + { + if (BrokenTextPositions[i] > pos) + return i-1; + ++i; + } + return (s32)BrokenTextPositions.size() - 1; +} + + +void intlGUIEditBox::inputChar(wchar_t c) +{ + if (!IsEnabled) + return; + + if (c != 0) + { + if (Text.size() < Max || Max == 0) + { + core::stringw s; + + if (MarkBegin != MarkEnd) + { + // replace marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + s = Text.subString(0, realmbgn); + s.append(c); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + CursorPos = realmbgn+1; + } + else + { + // add new character + s = Text.subString(0, CursorPos); + s.append(c); + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + Text = s; + ++CursorPos; + } + + BlinkStartTime = porting::getTimeMs(); + setTextMarkers(0, 0); + } + } + breakText(); + sendGuiEvent(EGET_EDITBOX_CHANGED); + calculateScrollPos(); +} + + +void intlGUIEditBox::calculateScrollPos() +{ + if (!AutoScroll) + return; + + // calculate horizontal scroll position + s32 cursLine = getLineFromPos(CursorPos); + setTextRect(cursLine); + + // don't do horizontal scrolling when wordwrap is enabled. + if (!WordWrap) + { + // get cursor position + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); + if (!font) + return; + + core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text; + s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine] : CursorPos; + + s32 cStart = CurrentTextRect.UpperLeftCorner.X + HScrollPos + + font->getDimension(txtLine->subString(0, cPos).c_str()).Width; + + s32 cEnd = cStart + font->getDimension(L"_ ").Width; + + if (FrameRect.LowerRightCorner.X < cEnd) + HScrollPos = cEnd - FrameRect.LowerRightCorner.X; + else if (FrameRect.UpperLeftCorner.X > cStart) + HScrollPos = cStart - FrameRect.UpperLeftCorner.X; + else + HScrollPos = 0; + + // todo: adjust scrollbar + } + + // vertical scroll position + if (FrameRect.LowerRightCorner.Y < CurrentTextRect.LowerRightCorner.Y + VScrollPos) + VScrollPos = CurrentTextRect.LowerRightCorner.Y - FrameRect.LowerRightCorner.Y + VScrollPos; + + else if (FrameRect.UpperLeftCorner.Y > CurrentTextRect.UpperLeftCorner.Y + VScrollPos) + VScrollPos = CurrentTextRect.UpperLeftCorner.Y - FrameRect.UpperLeftCorner.Y + VScrollPos; + else + VScrollPos = 0; + + // todo: adjust scrollbar +} + +//! set text markers +void intlGUIEditBox::setTextMarkers(s32 begin, s32 end) +{ + if ( begin != MarkBegin || end != MarkEnd ) + { + MarkBegin = begin; + MarkEnd = end; + sendGuiEvent(EGET_EDITBOX_MARKING_CHANGED); + } +} + +//! send some gui event to parent +void intlGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type) +{ + if ( Parent ) + { + SEvent e; + e.EventType = EET_GUI_EVENT; + e.GUIEvent.Caller = this; + e.GUIEvent.Element = 0; + e.GUIEvent.EventType = type; + + Parent->OnEvent(e); + } +} + +//! Writes attributes of the element. +void intlGUIEditBox::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const +{ + // IGUIEditBox::serializeAttributes(out,options); + + out->addBool ("OverrideColorEnabled",OverrideColorEnabled ); + out->addColor ("OverrideColor", OverrideColor); + // out->addFont("OverrideFont",OverrideFont); + out->addInt ("MaxChars", Max); + out->addBool ("WordWrap", WordWrap); + out->addBool ("MultiLine", MultiLine); + out->addBool ("AutoScroll", AutoScroll); + out->addBool ("PasswordBox", PasswordBox); + core::stringw ch = L" "; + ch[0] = PasswordChar; + out->addString("PasswordChar", ch.c_str()); + out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames); + out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames); + + IGUIEditBox::serializeAttributes(out,options); +} + + +//! Reads attributes of the element +void intlGUIEditBox::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) +{ + IGUIEditBox::deserializeAttributes(in,options); + + setOverrideColor(in->getAttributeAsColor("OverrideColor")); + enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled")); + setMax(in->getAttributeAsInt("MaxChars")); + setWordWrap(in->getAttributeAsBool("WordWrap")); + setMultiLine(in->getAttributeAsBool("MultiLine")); + setAutoScroll(in->getAttributeAsBool("AutoScroll")); + core::stringw ch = in->getAttributeAsStringW("PasswordChar"); + + if (!ch.size()) + setPasswordBox(in->getAttributeAsBool("PasswordBox")); + else + setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]); + + setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames), + (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames)); + + // setOverrideFont(in->getAttributeAsFont("OverrideFont")); +} + + +} // end namespace gui +} // end namespace irr + +#endif // _IRR_COMPILE_WITH_GUI_ diff --git a/src/intlGUIEditBox.h b/src/intlGUIEditBox.h new file mode 100644 index 000000000..e3ee15a30 --- /dev/null +++ b/src/intlGUIEditBox.h @@ -0,0 +1,178 @@ +// Copyright (C) 2002-2013 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __C_INTL_GUI_EDIT_BOX_H_INCLUDED__ +#define __C_INTL_GUI_EDIT_BOX_H_INCLUDED__ + +#include "IrrCompileConfig.h" +//#ifdef _IRR_COMPILE_WITH_GUI_ + +#include "IGUIEditBox.h" +#include "irrArray.h" +#include "IOSOperator.h" + +namespace irr +{ +namespace gui +{ + class intlGUIEditBox : public IGUIEditBox + { + public: + + //! constructor + intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment, + IGUIElement* parent, s32 id, const core::rect& rectangle); + + //! destructor + virtual ~intlGUIEditBox(); + + //! Sets another skin independent font. + virtual void setOverrideFont(IGUIFont* font=0); + + //! Gets the override font (if any) + /** \return The override font (may be 0) */ + virtual IGUIFont* getOverrideFont() const; + + //! Get the font which is used right now for drawing + /** Currently this is the override font when one is set and the + font of the active skin otherwise */ + virtual IGUIFont* getActiveFont() const; + + //! Sets another color for the text. + virtual void setOverrideColor(video::SColor color); + + //! Gets the override color + virtual video::SColor getOverrideColor() const; + + //! Sets if the text should use the overide color or the + //! color in the gui skin. + virtual void enableOverrideColor(bool enable); + + //! Checks if an override color is enabled + /** \return true if the override color is enabled, false otherwise */ + virtual bool isOverrideColorEnabled(void) const; + + //! Sets whether to draw the background + virtual void setDrawBackground(bool draw); + + //! Turns the border on or off + virtual void setDrawBorder(bool border); + + //! Enables or disables word wrap for using the edit box as multiline text editor. + virtual void setWordWrap(bool enable); + + //! Checks if word wrap is enabled + //! \return true if word wrap is enabled, false otherwise + virtual bool isWordWrapEnabled() const; + + //! Enables or disables newlines. + /** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired, + instead a newline character will be inserted. */ + virtual void setMultiLine(bool enable); + + //! Checks if multi line editing is enabled + //! \return true if mult-line is enabled, false otherwise + virtual bool isMultiLineEnabled() const; + + //! Enables or disables automatic scrolling with cursor position + //! \param enable: If set to true, the text will move around with the cursor position + virtual void setAutoScroll(bool enable); + + //! Checks to see if automatic scrolling is enabled + //! \return true if automatic scrolling is enabled, false if not + virtual bool isAutoScrollEnabled() const; + + //! Gets the size area of the text in the edit box + //! \return Returns the size in pixels of the text + virtual core::dimension2du getTextDimension(); + + //! Sets text justification + virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical); + + //! called if an event happened. + virtual bool OnEvent(const SEvent& event); + + //! draws the element and its children + virtual void draw(); + + //! Sets the new caption of this element. + virtual void setText(const wchar_t* text); + + //! Sets the maximum amount of characters which may be entered in the box. + //! \param max: Maximum amount of characters. If 0, the character amount is + //! infinity. + virtual void setMax(u32 max); + + //! Returns maximum amount of characters, previously set by setMax(); + virtual u32 getMax() const; + + //! Sets whether the edit box is a password box. Setting this to true will + /** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x + \param passwordBox: true to enable password, false to disable + \param passwordChar: the character that is displayed instead of letters */ + virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*'); + + //! Returns true if the edit box is currently a password box. + virtual bool isPasswordBox() const; + + //! Updates the absolute position, splits text if required + virtual void updateAbsolutePosition(); + + //! Writes attributes of the element. + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const; + + //! Reads attributes of the element + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options); + + protected: + //! Breaks the single text line. + void breakText(); + //! sets the area of the given line + void setTextRect(s32 line); + //! returns the line number that the cursor is on + s32 getLineFromPos(s32 pos); + //! adds a letter to the edit box + void inputChar(wchar_t c); + //! calculates the current scroll position + void calculateScrollPos(); + //! send some gui event to parent + void sendGuiEvent(EGUI_EVENT_TYPE type); + //! set text markers + void setTextMarkers(s32 begin, s32 end); + + bool processKey(const SEvent& event); + bool processMouse(const SEvent& event); + s32 getCursorPos(s32 x, s32 y); + + bool MouseMarking; + bool Border; + bool OverrideColorEnabled; + s32 MarkBegin; + s32 MarkEnd; + + video::SColor OverrideColor; + gui::IGUIFont *OverrideFont, *LastBreakFont; + IOSOperator* Operator; + + u32 BlinkStartTime; + s32 CursorPos; + s32 HScrollPos, VScrollPos; // scroll position in characters + u32 Max; + + bool WordWrap, MultiLine, AutoScroll, PasswordBox; + wchar_t PasswordChar; + EGUI_ALIGNMENT HAlign, VAlign; + + core::array< core::stringw > BrokenText; + core::array< s32 > BrokenTextPositions; + + core::rect CurrentTextRect, FrameRect; // temporary values + }; + + +} // end namespace gui +} // end namespace irr + +//#endif // _IRR_COMPILE_WITH_GUI_ +#endif // __C_GUI_EDIT_BOX_H_INCLUDED__ diff --git a/src/util/string.cpp b/src/util/string.cpp index 231eaf6be..49aff4a1f 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -29,9 +29,103 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#ifndef _WIN32 +#include +#else +#define _WIN32_WINNT 0x0501 +#include +#endif + static bool parseHexColorString(const std::string &value, video::SColor &color); static bool parseNamedColorString(const std::string &value, video::SColor &color); +#ifndef _WIN32 +size_t convert(const char *to, const char *from, char *outbuf, + size_t outbuf_size, char *inbuf, size_t inbuf_size) +{ + iconv_t cd = iconv_open(to, from); + +#if defined(__FreeBSD__) || defined(__FreeBSD) + const char *inbuf_ptr = inbuf; +#else + char *inbuf_ptr = inbuf; +#endif + + char *outbuf_ptr = outbuf; + + size_t *inbuf_left_ptr = &inbuf_size; + size_t *outbuf_left_ptr = &outbuf_size; + + while (inbuf_size > 0) + iconv(cd, &inbuf_ptr, inbuf_left_ptr, &outbuf_ptr, outbuf_left_ptr); + + iconv_close(cd); + return 0; +} + +std::wstring utf8_to_wide(const std::string &input) +{ + size_t inbuf_size = input.length() + 1; + // maximum possible size, every character is sizeof(wchar_t) bytes + size_t outbuf_size = (input.length() + 1) * sizeof(wchar_t); + + char *inbuf = new char[inbuf_size]; + memcpy(inbuf, input.c_str(), inbuf_size); + char *outbuf = new char[outbuf_size]; + memset(outbuf, 0, outbuf_size); + + convert("WCHAR_T", "UTF-8", outbuf, outbuf_size, inbuf, inbuf_size); + std::wstring out((wchar_t*)outbuf); + + delete[] inbuf; + delete[] outbuf; + + return out; +} + +std::string wide_to_utf8(const std::wstring &input) +{ + size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t); + // maximum possible size: utf-8 encodes codepoints using 1 up to 6 bytes + size_t outbuf_size = (input.length() + 1) * 6; + + char *inbuf = new char[inbuf_size]; + memcpy(inbuf, input.c_str(), inbuf_size); + char *outbuf = new char[outbuf_size]; + memset(outbuf, 0, outbuf_size); + + convert("UTF-8", "WCHAR_T", outbuf, outbuf_size, inbuf, inbuf_size); + std::string out(outbuf); + + delete[] inbuf; + delete[] outbuf; + + return out; +} +#else +std::wstring utf8_to_wide(const std::string &input) +{ + size_t outbuf_size = input.size() + 1; + wchar_t *outbuf = new wchar_t[outbuf_size]; + memset(outbuf, 0, outbuf_size * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(), outbuf, outbuf_size); + std::wstring out(outbuf); + delete[] outbuf; + return out; +} + +std::string wide_to_utf8(const std::wstring &input) +{ + size_t outbuf_size = (input.size() + 1) * 6; + char *outbuf = new char[outbuf_size]; + memset(outbuf, 0, outbuf_size); + WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(), outbuf, outbuf_size, NULL, NULL); + std::string out(outbuf); + delete[] outbuf; + return out; +} +#endif + // You must free the returned string! // The returned string is allocated using new diff --git a/src/util/string.h b/src/util/string.h index b80e3c9a8..5bf2b5b7c 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -39,10 +39,18 @@ struct FlagDesc { u32 flag; }; +// try not to convert between wide/utf8 encodings; this can result in data loss +// try to only convert between them when you need to input/output stuff via Irrlicht +std::wstring utf8_to_wide(const std::string &input); +std::string wide_to_utf8(const std::wstring &input); + +// NEVER use those two functions unless you have a VERY GOOD reason to +// they just convert between wide and multibyte encoding +// multibyte encoding depends on current locale, this is no good, especially on Windows + // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str); - std::wstring narrow_to_wide(const std::string &mbs); std::string wide_to_narrow(const std::wstring &wcs); From b6387b4e0f43503ae139cb31a04f42c401378fdc Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Wed, 10 Jun 2015 01:54:33 +0200 Subject: [PATCH 110/670] Use utf-8 in formspecs --- src/game.cpp | 3 +- src/guiFormSpecMenu.cpp | 161 ++++++++++++++++-------------- src/guiFormSpecMenu.h | 20 ++-- src/script/lua_api/l_mainmenu.cpp | 2 +- 4 files changed, 101 insertions(+), 85 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 125fc7c74..903e4f85c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1148,7 +1148,8 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU"); create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device, fs_src, txt_dst, NULL); - (*cur_formspec)->setFocus(L"btn_continue"); + std::string con("btn_continue"); + (*cur_formspec)->setFocus(con); (*cur_formspec)->doPause = true; } diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index ac230e425..ec829525b 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -52,6 +52,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" // for parseColorString() #include "guiscalingfilter.h" +#if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 +#include "intlGUIEditBox.h" +#endif + #define MY_CHECKPOS(a,b) \ if (v_pos.size() != 2) { \ errorstream<< "Invalid pos for element " << a << "specified: \"" \ @@ -96,11 +100,11 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev, m_form_src(fsrc), m_text_dst(tdst), m_formspec_version(0), - m_focused_element(L""), + m_focused_element(""), m_font(NULL), m_remap_dbl_click(remap_dbl_click) #ifdef __ANDROID__ - ,m_JavaDialogFieldName(L"") + , m_JavaDialogFieldName("") #endif { current_keys_pending.key_down = false; @@ -227,7 +231,7 @@ void GUIFormSpecMenu::setInitialFocus() Environment->setFocus(*(children.begin())); } -GUITable* GUIFormSpecMenu::getTable(std::wstring tablename) +GUITable* GUIFormSpecMenu::getTable(const std::string &tablename) { for (u32 i = 0; i < m_tables.size(); ++i) { if (tablename == m_tables[i].first.fname) @@ -374,7 +378,7 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element) if (selected == "true") fselected = true; - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); core::rect rect = core::rect( pos.X, pos.Y + ((imgsize.Y/2) - m_btn_height), @@ -382,7 +386,7 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element) pos.Y + ((imgsize.Y/2) + m_btn_height)); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, //Needed for displaying text on MSVC wlabel, 258+m_fields.size() @@ -434,7 +438,7 @@ void GUIFormSpecMenu::parseScrollBar(parserData* data, std::string element) core::rect(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y); FieldSpec spec( - narrow_to_wide(name), + name, L"", L"", 258+m_fields.size() @@ -572,10 +576,10 @@ void GUIFormSpecMenu::parseButton(parserData* data,std::string element, label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, L"", 258+m_fields.size() @@ -697,10 +701,8 @@ void GUIFormSpecMenu::parseTable(parserData* data,std::string element) core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - std::wstring fname_w = narrow_to_wide(name); - FieldSpec spec( - fname_w, + name, L"", L"", 258+m_fields.size() @@ -722,8 +724,8 @@ void GUIFormSpecMenu::parseTable(parserData* data,std::string element) e->setTable(data->table_options, data->table_columns, items); - if (data->table_dyndata.find(fname_w) != data->table_dyndata.end()) { - e->setDynamicData(data->table_dyndata[fname_w]); + if (data->table_dyndata.find(name) != data->table_dyndata.end()) { + e->setDynamicData(data->table_dyndata[name]); } if ((str_initial_selection != "") && @@ -771,10 +773,8 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element) core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - std::wstring fname_w = narrow_to_wide(name); - FieldSpec spec( - fname_w, + name, L"", L"", 258+m_fields.size() @@ -796,8 +796,8 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element) e->setTextList(items, is_yes(str_transparent)); - if (data->table_dyndata.find(fname_w) != data->table_dyndata.end()) { - e->setDynamicData(data->table_dyndata[fname_w]); + if (data->table_dyndata.find(name) != data->table_dyndata.end()) { + e->setDynamicData(data->table_dyndata[name]); } if ((str_initial_selection != "") && @@ -836,10 +836,8 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element) core::rect rect = core::rect(pos.X, pos.Y, pos.X + width, pos.Y + (m_btn_height * 2)); - std::wstring fname_w = narrow_to_wide(name); - FieldSpec spec( - fname_w, + name, L"", L"", 258+m_fields.size() @@ -856,7 +854,7 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element) } for (unsigned int i=0; i < items.size(); i++) { - e->addItem(narrow_to_wide(items[i]).c_str()); + e->addItem(utf8_to_wide(items[i]).c_str()); } if (str_initial_selection != "") @@ -899,10 +897,10 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element) label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, L"", 258+m_fields.size() @@ -965,12 +963,12 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data, default_val = unescape_string(default_val); label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, - narrow_to_wide(default_val), + utf8_to_wide(default_val), 258+m_fields.size() ); @@ -982,9 +980,17 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data, else { spec.send = true; - gui::IGUIEditBox *e = - Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); - + gui::IGUIElement *e; +#if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 + if (g_settings->getBool("freetype")) { + e = (gui::IGUIElement *) new gui::intlGUIEditBox(spec.fdefault.c_str(), + true, Environment, this, spec.fid, rect); + } else { +#else + { +#endif + e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); + } if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); } @@ -1055,12 +1061,12 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, default_val = unescape_string(default_val); label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, - narrow_to_wide(default_val), + utf8_to_wide(default_val), 258+m_fields.size() ); @@ -1072,8 +1078,18 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, else { spec.send = true; - gui::IGUIEditBox *e = - Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); + + gui::IGUIEditBox *e; +#if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 + if (g_settings->getBool("freetype")) { + e = (gui::IGUIEditBox *) new gui::intlGUIEditBox(spec.fdefault.c_str(), + true, Environment, this, spec.fid, rect); + } else { +#else + { +#endif + e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); + } if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1158,13 +1174,13 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element) // in the integer cases: 0.4 is not exactly // representable in binary floating point. s32 posy = pos.Y + ((float)i) * spacing.Y * 2.0 / 5.0; - std::wstring wlabel = narrow_to_wide(lines[i]); + std::wstring wlabel = utf8_to_wide(lines[i]); core::rect rect = core::rect( pos.X, posy - m_btn_height, pos.X + m_font->getDimension(wlabel.c_str()).Width, posy + m_btn_height); FieldSpec spec( - L"", + "", wlabel, L"", 258+m_fields.size() @@ -1190,7 +1206,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element) ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION))) { std::vector v_pos = split(parts[0],','); - std::wstring text = narrow_to_wide(unescape_string(parts[1])); + std::wstring text = utf8_to_wide(unescape_string(parts[1])); MY_CHECKPOS("vertlabel",1); @@ -1217,7 +1233,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element) } FieldSpec spec( - L"", + "", label, L"", 258+m_fields.size() @@ -1279,12 +1295,12 @@ void GUIFormSpecMenu::parseImageButton(parserData* data,std::string element, pressed_image_name = unescape_string(pressed_image_name); label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, - narrow_to_wide(image_name), + utf8_to_wide(image_name), 258+m_fields.size() ); spec.ftype = f_Button; @@ -1346,7 +1362,7 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data,std::string element) } FieldSpec spec( - narrow_to_wide(name), + name, L"", L"", 258+m_fields.size() @@ -1376,8 +1392,8 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data,std::string element) e->setNotClipped(true); - for (unsigned int i=0; i< buttons.size(); i++) { - e->addTab(narrow_to_wide(buttons[i]).c_str(), -1); + for (unsigned int i = 0; i < buttons.size(); i++) { + e->addTab(utf8_to_wide(buttons[i]).c_str(), -1); } if ((tab_index >= 0) && @@ -1433,17 +1449,17 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element) item.deSerialize(item_name, idef); video::ITexture *texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_gamedef); - m_tooltips[narrow_to_wide(name)] = + m_tooltips[name] = TooltipSpec(item.getDefinition(idef).description, m_default_tooltip_bgcolor, m_default_tooltip_color); label = unescape_string(label); FieldSpec spec( - narrow_to_wide(name), - narrow_to_wide(label), - narrow_to_wide(item_name), - 258+m_fields.size() + name, + utf8_to_wide(label), + utf8_to_wide(item_name), + 258 + m_fields.size() ); gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, spec.flabel.c_str()); @@ -1552,14 +1568,14 @@ void GUIFormSpecMenu::parseTooltip(parserData* data, std::string element) std::vector parts = split(element,';'); if (parts.size() == 2) { std::string name = parts[0]; - m_tooltips[narrow_to_wide(name)] = TooltipSpec(unescape_string(parts[1]), + m_tooltips[name] = TooltipSpec(unescape_string(parts[1]), m_default_tooltip_bgcolor, m_default_tooltip_color); return; } else if (parts.size() == 4) { std::string name = parts[0]; video::SColor tmp_color1, tmp_color2; if ( parseColorString(parts[2], tmp_color1, false) && parseColorString(parts[3], tmp_color2, false) ) { - m_tooltips[narrow_to_wide(name)] = TooltipSpec(unescape_string(parts[1]), + m_tooltips[name] = TooltipSpec(unescape_string(parts[1]), tmp_color1, tmp_color2); return; } @@ -1772,7 +1788,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) //preserve tables for (u32 i = 0; i < m_tables.size(); ++i) { - std::wstring tablename = m_tables[i].first.fname; + std::string tablename = m_tables[i].first.fname; GUITable *table = m_tables[i].second; mydata.table_dyndata[tablename] = table->getDynamicData(); } @@ -2027,7 +2043,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) bool GUIFormSpecMenu::getAndroidUIInput() { /* no dialog shown */ - if (m_JavaDialogFieldName == L"") { + if (m_JavaDialogFieldName == "") { return false; } @@ -2036,8 +2052,8 @@ bool GUIFormSpecMenu::getAndroidUIInput() return true; } - std::wstring fieldname = m_JavaDialogFieldName; - m_JavaDialogFieldName = L""; + std::string fieldname = m_JavaDialogFieldName; + m_JavaDialogFieldName = ""; /* no value abort dialog processing */ if (porting::getInputDialogState() != 0) { @@ -2063,7 +2079,7 @@ bool GUIFormSpecMenu::getAndroidUIInput() std::string text = porting::getInputDialogValue(); ((gui::IGUIEditBox*) tochange)-> - setText(narrow_to_wide(text).c_str()); + setText(utf8_to_wide(text).c_str()); } return false; } @@ -2187,7 +2203,7 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase) m_tooltip_element->setOverrideColor(m_default_tooltip_color); m_tooltip_element->setVisible(true); this->bringToFront(m_tooltip_element); - m_tooltip_element->setText(narrow_to_wide(tooltip_text).c_str()); + m_tooltip_element->setText(utf8_to_wide(tooltip_text).c_str()); s32 tooltip_width = m_tooltip_element->getTextWidth() + m_btn_height; s32 tooltip_height = m_tooltip_element->getTextHeight() * tt_rows.size() + 5; v2u32 screenSize = driver->getScreenSize(); @@ -2419,7 +2435,7 @@ void GUIFormSpecMenu::drawMenu() if ( (iter->fid == id) && (m_tooltips[iter->fname].tooltip != "") ){ if (m_old_tooltip != m_tooltips[iter->fname].tooltip) { m_old_tooltip = m_tooltips[iter->fname].tooltip; - m_tooltip_element->setText(narrow_to_wide(m_tooltips[iter->fname].tooltip).c_str()); + m_tooltip_element->setText(utf8_to_wide(m_tooltips[iter->fname].tooltip).c_str()); std::vector tt_rows = str_split(m_tooltips[iter->fname].tooltip, '\n'); s32 tooltip_width = m_tooltip_element->getTextWidth() + m_btn_height; s32 tooltip_height = m_tooltip_element->getTextHeight() * tt_rows.size() + 5; @@ -2613,11 +2629,10 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) for(unsigned int i=0; icheckEvent(); @@ -2634,7 +2649,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) s32 selected = e->getSelected(); if (selected >= 0) { fields[name] = - wide_to_narrow(e->getItem(selected)); + wide_to_utf8(e->getItem(selected)); } } else if (s.ftype == f_TabHeader) { @@ -2690,7 +2705,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) { IGUIElement* e = getElementFromId(s.fid); if(e != NULL) { - fields[name] = wide_to_narrow(e->getText()); + fields[name] = wide_to_utf8(e->getText()); } } } @@ -2798,7 +2813,7 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) } m_JavaDialogFieldName = getNameByID(hovered->getID()); std::string message = gettext("Enter "); - std::string label = wide_to_narrow(getLabelByID(hovered->getID())); + std::string label = wide_to_utf8(getLabelByID(hovered->getID())); if (label == "") { label = "text"; } @@ -2818,7 +2833,7 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) } porting::showInputDialog(gettext("ok"), "", - wide_to_narrow(((gui::IGUIEditBox*) hovered)->getText()), + wide_to_utf8(((gui::IGUIEditBox*) hovered)->getText()), type); return retval; } @@ -3006,7 +3021,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) acceptInput(quit_mode_cancel); quitMenu(); } else { - m_text_dst->gotText(narrow_to_wide("MenuQuit")); + m_text_dst->gotText(L"MenuQuit"); } return true; } else if (m_client != NULL && event.KeyInput.PressedDown && @@ -3380,7 +3395,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) quitMenu(); } else { acceptInput(); - m_text_dst->gotText(narrow_to_wide("ExitButton")); + m_text_dst->gotText(L"ExitButton"); } // quitMenu deallocates menu return true; @@ -3399,7 +3414,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) acceptInput(quit_mode_accept); quitMenu(); } else { - m_text_dst->gotText(narrow_to_wide("ExitButton")); + m_text_dst->gotText(L"ExitButton"); } return true; } else { @@ -3482,7 +3497,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) * @param id of element * @return name string or empty string */ -std::wstring GUIFormSpecMenu::getNameByID(s32 id) +std::string GUIFormSpecMenu::getNameByID(s32 id) { for(std::vector::iterator iter = m_fields.begin(); iter != m_fields.end(); iter++) { @@ -3490,7 +3505,7 @@ std::wstring GUIFormSpecMenu::getNameByID(s32 id) return iter->fname; } } - return L""; + return ""; } /** diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index f72595782..f04968aec 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -152,7 +152,7 @@ class GUIFormSpecMenu : public GUIModalMenu FieldSpec() { } - FieldSpec(const std::wstring &name, const std::wstring &label, + FieldSpec(const std::string &name, const std::wstring &label, const std::wstring &fdeflt, int id) : fname(name), flabel(label), @@ -163,7 +163,7 @@ class GUIFormSpecMenu : public GUIModalMenu ftype = f_Unknown; is_exit = false; } - std::wstring fname; + std::string fname; std::wstring flabel; std::wstring fdefault; int fid; @@ -255,7 +255,7 @@ public: void removeChildren(); void setInitialFocus(); - void setFocus(std::wstring elementname) + void setFocus(std::string &elementname) { m_focused_element = elementname; } @@ -278,7 +278,7 @@ public: bool doPause; bool pausesGame() { return doPause; } - GUITable* getTable(std::wstring tablename); + GUITable* getTable(const std::string &tablename); #ifdef __ANDROID__ bool getAndroidUIInput(); @@ -313,7 +313,7 @@ protected: std::vector m_fields; std::vector > m_tables; std::vector > m_checkboxes; - std::map m_tooltips; + std::map m_tooltips; std::vector > m_scrollbars; ItemSpec *m_selected_item; @@ -355,7 +355,7 @@ private: IFormSource *m_form_src; TextDest *m_text_dst; unsigned int m_formspec_version; - std::wstring m_focused_element; + std::string m_focused_element; typedef struct { bool explicit_size; @@ -364,11 +364,11 @@ private: core::rect rect; v2s32 basepos; v2u32 screensize; - std::wstring focused_fieldname; + std::string focused_fieldname; GUITable::TableOptions table_options; GUITable::TableColumns table_columns; // used to restore table selection/scroll/treeview state - std::map table_dyndata; + std::map table_dyndata; } parserData; typedef struct { @@ -430,10 +430,10 @@ private: gui::IGUIFont *m_font; std::wstring getLabelByID(s32 id); - std::wstring getNameByID(s32 id); + std::string getNameByID(s32 id); #ifdef __ANDROID__ v2s32 m_down_pos; - std::wstring m_JavaDialogFieldName; + std::string m_JavaDialogFieldName; #endif /* If true, remap a double-click (or double-tap) action to ESC. This is so diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 52410f74f..111eba518 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -210,7 +210,7 @@ int ModApiMainMenu::l_get_table_index(lua_State *L) GUIEngine* engine = getGuiEngine(L); sanity_check(engine != NULL); - std::wstring tablename(narrow_to_wide(luaL_checkstring(L, 1))); + std::string tablename(luaL_checkstring(L, 1)); GUITable *table = engine->m_menu->getTable(tablename); s32 selection = table ? table->getSelected() : 0; From 60f31ad52348c53209701d0112f9f809018f7188 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 14 Jun 2015 06:38:02 +0200 Subject: [PATCH 111/670] Android: bypass broken wide_to_utf8 with wide_to_narrow While utf8_to_wide works well, wide_to_utf8 is quite broken on android, for some reason. --- src/util/string.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/util/string.cpp b/src/util/string.cpp index 49aff4a1f..0a7ab5c3a 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -83,6 +83,13 @@ std::wstring utf8_to_wide(const std::string &input) return out; } +#ifdef __ANDROID__ +// TODO: this is an ugly fix for wide_to_utf8 somehow not working on android +std::string wide_to_utf8(const std::wstring &input) +{ + return wide_to_narrow(input); +} +#else std::string wide_to_utf8(const std::wstring &input) { size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t); @@ -102,6 +109,7 @@ std::string wide_to_utf8(const std::wstring &input) return out; } +#endif #else std::wstring utf8_to_wide(const std::string &input) { @@ -126,7 +134,6 @@ std::string wide_to_utf8(const std::wstring &input) } #endif - // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str) From d105bf27dd9f570754f470c3bb6a46369c4aaaad Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 14 Jun 2015 12:00:06 +0200 Subject: [PATCH 112/670] Add UTF and other utility unit tests --- src/unittest/test_utilities.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 07108706a..6a731c662 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -37,11 +37,13 @@ public: void testUrlEncode(); void testUrlDecode(); void testPadString(); + void testStartsWith(); void testStrEqual(); void testStringTrim(); void testStrToIntConversion(); void testStringReplace(); void testStringAllowed(); + void testUTF8(); void testWrapRows(); void testIsNumber(); void testIsPowerOfTwo(); @@ -60,11 +62,13 @@ void TestUtilities::runTests(IGameDef *gamedef) TEST(testUrlEncode); TEST(testUrlDecode); TEST(testPadString); + TEST(testStartsWith); TEST(testStrEqual); TEST(testStringTrim); TEST(testStrToIntConversion); TEST(testStringReplace); TEST(testStringAllowed); + TEST(testUTF8); TEST(testWrapRows); TEST(testIsNumber); TEST(testIsPowerOfTwo); @@ -123,6 +127,8 @@ void TestUtilities::testLowercase() void TestUtilities::testTrim() { + UASSERT(trim("") == ""); + UASSERT(trim("dirt_with_grass") == "dirt_with_grass"); UASSERT(trim("\n \t\r Foo bAR \r\n\t\t ") == "Foo bAR"); UASSERT(trim("\n \t\r \r\n\t\t ") == ""); } @@ -169,6 +175,19 @@ void TestUtilities::testPadString() UASSERT(padStringRight("hello", 8) == "hello "); } +void TestUtilities::testStartsWith() +{ + UASSERT(str_starts_with(std::string(), std::string()) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string()) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string("the")) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string("The")) == false); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string("The"), true) == true); + UASSERT(str_starts_with(std::string("T"), std::string("The")) == false); +} void TestUtilities::testStrEqual() { @@ -213,6 +232,12 @@ void TestUtilities::testStringAllowed() UASSERT(string_allowed_blacklist("hello123", "123") == false); } +void TestUtilities::testUTF8() +{ + UASSERT(wide_to_utf8(utf8_to_wide("")) == ""); + UASSERT(wide_to_utf8(utf8_to_wide("the shovel dug a crumbly node!")) + == "the shovel dug a crumbly node!"); +} void TestUtilities::testWrapRows() { From 43fcfbfe05578d7471d40c8c087fd04e24b264b5 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 14 Jun 2015 21:13:36 +0200 Subject: [PATCH 113/670] Improved parallax mapping. Generate heightmaps on the fly. --- .../shaders/nodes_shader/opengl_fragment.glsl | 134 +++++++++++++----- .../shaders/nodes_shader/opengl_vertex.glsl | 79 ++++++----- .../water_surface_shader/opengl_fragment.glsl | 24 ++-- .../water_surface_shader/opengl_vertex.glsl | 17 ++- minetest.conf.example | 25 ++-- src/clientmap.cpp | 2 +- src/defaultsettings.cpp | 6 +- src/mapblock_mesh.cpp | 126 ++++++++-------- src/mapblock_mesh.h | 6 +- src/mesh.cpp | 67 +++++---- src/shader.cpp | 65 +++++---- 11 files changed, 310 insertions(+), 241 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 6dc96eb48..066e49658 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -8,6 +8,7 @@ uniform vec3 eyePosition; varying vec3 vPosition; varying vec3 worldPosition; +varying float generate_heightmaps; varying vec3 eyeVec; varying vec3 tsEyeVec; @@ -19,80 +20,135 @@ bool normalTexturePresent = false; const float e = 2.718281828459; const float BS = 10.0; -float intensity (vec3 color){ +float intensity (vec3 color) +{ return (color.r + color.g + color.b) / 3.0; } -float get_rgb_height (vec2 uv){ +float get_rgb_height (vec2 uv) +{ return intensity(texture2D(baseTexture,uv).rgb); } -vec4 get_normal_map(vec2 uv){ +vec4 get_normal_map(vec2 uv) +{ vec4 bump = texture2D(normalTexture, uv).rgba; - bump.xyz = normalize(bump.xyz * 2.0 -1.0); - bump.y = -bump.y; + bump.xyz = normalize(bump.xyz * 2.0 - 1.0); return bump; } +float find_intersection(vec2 dp, vec2 ds) +{ + const int linear_steps = 10; + const int binary_steps = 5; + const float depth_step = 1.0 / linear_steps; + float size = depth_step; + float depth = 1.0; + float best_depth = 1.0; + for (int i = 0 ; i < linear_steps - 1 ; ++i) { + vec4 t = texture2D(normalTexture, dp + ds * depth); + if (best_depth > 0.05) + if (depth >= t.a) + best_depth = depth; + depth -= size; + } + depth = best_depth - size; + for (int i = 0 ; i < binary_steps ; ++i) { + size *= 0.5; + vec4 t = texture2D(normalTexture, dp + ds * depth); + if (depth >= t.a) { + best_depth = depth; + depth -= 2 * size; + } + depth += size; + } + return best_depth; +} + +float find_intersectionRGB(vec2 dp, vec2 ds) { + const float iterations = 24; + const float depth_step = 1.0 / iterations; + float depth = 1.0; + for (int i = 0 ; i < iterations ; i++) { + float h = get_rgb_height(dp + ds * depth); + if (h >= depth) + break; + depth -= depth_step; + } + return depth; +} + void main (void) { vec3 color; vec4 bump; vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; - + #ifdef USE_NORMALMAPS - if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + if (texture2D(useNormalmap,vec2(1.0, 1.0)).r > 0.0) { normalTexturePresent = true; } #endif #ifdef ENABLE_PARALLAX_OCCLUSION - if (normalTexturePresent){ - vec3 tsEye = normalize(tsEyeVec); - float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS; - uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y); + vec3 eyeRay = normalize(tsEyeVec); +#if PARALLAX_OCCLUSION_MODE == 0 + // Parallax occlusion with slope information + if (normalTexturePresent) { + const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; + const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; + for(int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { + vec4 normal = texture2D(normalTexture, uv.xy); + float h = normal.a * scale - bias; + uv += h * normal.z * eyeRay.xy; + } +#endif +#if PARALLAX_OCCLUSION_MODE == 1 + // Relief mapping + if (normalTexturePresent) { + vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; + float dist = find_intersection(uv, ds); + uv += dist * ds; +#endif + } else if (generate_heightmaps > 0.0) { + vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; + float dist = find_intersectionRGB(uv, ds); + uv += dist * ds; } #endif #ifdef USE_NORMALMAPS - if (normalTexturePresent){ + if (normalTexturePresent) { bump = get_normal_map(uv); use_normalmap = true; } #endif - -#ifdef GENERATE_NORMALMAPS - if (use_normalmap == 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)); + + if (GENERATE_NORMALMAPS == 1 && use_normalmap == 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); + bump = vec4(normalize(vec3 (-dX, -dY, NORMALMAPS_STRENGTH)), 1.0); use_normalmap = true; } -#endif -vec4 base = texture2D(baseTexture, uv).rgba; - + vec4 base = texture2D(baseTexture, uv).rgba; + #ifdef ENABLE_BUMPMAPPING - if (use_normalmap){ + 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),0.5); - float diffuse = dot(E,bump.xyz); - /* Mathematic optimization - * Original: color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; - * This optimization save 2 multiplications (orig: 4 multiplications + 3 additions - * end: 2 multiplications + 3 additions) - */ - color = (0.05 + diffuse + 0.2 * specular) * base.rgb; + 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; } @@ -104,7 +160,7 @@ vec4 base = texture2D(baseTexture, uv).rgba; float alpha = gl_Color.a; vec4 col = vec4(color.rgb, alpha); col *= gl_Color; - if(fogDistance != 0.0){ + if (fogDistance != 0.0) { float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); alpha = mix(alpha, 0.0, d); } @@ -112,7 +168,7 @@ vec4 base = texture2D(baseTexture, uv).rgba; #else vec4 col = vec4(color.rgb, base.a); col *= gl_Color; - if(fogDistance != 0.0){ + if (fogDistance != 0.0) { float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); col = mix(col, skyBgColor, d); } diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 07684f616..e5644b8b2 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -14,25 +14,36 @@ varying vec3 eyeVec; varying vec3 lightVec; varying vec3 tsEyeVec; varying vec3 tsLightVec; +varying float generate_heightmaps; const float e = 2.718281828459; const float BS = 10.0; -float smoothCurve( float x ) { - return x * x *( 3.0 - 2.0 * x ); +float smoothCurve(float x) +{ + return x * x * (3.0 - 2.0 * x); } -float triangleWave( float x ) { - return abs( fract( x + 0.5 ) * 2.0 - 1.0 ); +float triangleWave(float x) +{ + return abs(fract(x + 0.5) * 2.0 - 1.0); } -float smoothTriangleWave( float x ) { - return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0; +float smoothTriangleWave(float x) +{ + return smoothCurve(triangleWave(x)) * 2.0 - 1.0; } void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - -#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER + gl_TexCoord[0].y += 0.008; + +#if ((DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) && GENERATE_NORMALMAPS) + generate_heightmaps = 1.0; +#else + generate_heightmaps = 0.0; +#endif + +#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER) vec4 pos = gl_Vertex; pos.y -= 2.0; @@ -76,43 +87,33 @@ void main(void) vPosition = gl_Position.xyz; worldPosition = (mWorld * gl_Vertex).xyz; + + // Don't generate heightmaps when too far from the eye + float dist = distance (worldPosition, eyePosition); + if (dist > 100.00) { + generate_heightmaps = 0.0; + } + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); - if (gl_Normal.x > 0.5) { - // 1.0, 0.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } else if (gl_Normal.x < -0.5) { - // -1.0, 0.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } else if (gl_Normal.y > 0.5) { - // 0.0, 1.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); - } else if (gl_Normal.y < -0.5) { - // 0.0, -1.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); - } else if (gl_Normal.z > 0.5) { - // 0.0, 0.0, 1.0 - tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } else if (gl_Normal.z < -0.5) { - // 0.0, 0.0, -1.0 - tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } - mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x, - tangent.y, binormal.y, normal.y, - tangent.z, binormal.z, normal.z); + tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz); + binormal = normalize(gl_NormalMatrix * -gl_MultiTexCoord2.xyz); + + vec3 v; lightVec = sunPosition - worldPosition; - tsLightVec = lightVec * tbnMatrix; - eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; - tsEyeVec = eyeVec * tbnMatrix; + v.x = dot(lightVec, tangent); + v.y = dot(lightVec, binormal); + v.z = dot(lightVec, normal); + tsLightVec = v; + + eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; + v.x = dot(eyeVec, tangent); + v.y = dot(eyeVec, binormal); + v.z = dot(eyeVec, normal); + tsEyeVec = v; vec4 color; float day = gl_Color.r; diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 6dc96eb48..386f77486 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -14,7 +14,7 @@ varying vec3 tsEyeVec; varying vec3 lightVec; varying vec3 tsLightVec; -bool normalTexturePresent = false; +bool normalTexturePresent = false; const float e = 2.718281828459; const float BS = 10.0; @@ -40,15 +40,15 @@ void main (void) vec4 bump; vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; - + #ifdef USE_NORMALMAPS - if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ + if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0) { normalTexturePresent = true; } #endif #ifdef ENABLE_PARALLAX_OCCLUSION - if (normalTexturePresent){ + if (normalTexturePresent) { vec3 tsEye = normalize(tsEyeVec); float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS; uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y); @@ -56,14 +56,13 @@ void main (void) #endif #ifdef USE_NORMALMAPS - if (normalTexturePresent){ + if (normalTexturePresent) { bump = get_normal_map(uv); use_normalmap = true; } #endif - -#ifdef GENERATE_NORMALMAPS - if (use_normalmap == false){ + + if (GENERATE_NORMALMAPS == 1 && use_normalmap == 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)); @@ -77,16 +76,15 @@ void main (void) 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){ + 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),0.5); - float diffuse = dot(E,bump.xyz); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); /* Mathematic optimization * Original: color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; * This optimization save 2 multiplications (orig: 4 multiplications + 3 additions diff --git a/client/shaders/water_surface_shader/opengl_vertex.glsl b/client/shaders/water_surface_shader/opengl_vertex.glsl index 6e70bbc36..53678800d 100644 --- a/client/shaders/water_surface_shader/opengl_vertex.glsl +++ b/client/shaders/water_surface_shader/opengl_vertex.glsl @@ -18,20 +18,23 @@ varying vec3 tsLightVec; const float e = 2.718281828459; const float BS = 10.0; -float smoothCurve( float x ) { - return x * x *( 3.0 - 2.0 * x ); +float smoothCurve(float x) +{ + return x * x * (3.0 - 2.0 * x); } -float triangleWave( float x ) { - return abs( fract( x + 0.5 ) * 2.0 - 1.0 ); +float triangleWave(float x) +{ + return abs(fract( x + 0.5 ) * 2.0 - 1.0); } -float smoothTriangleWave( float x ) { - return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0; +float smoothTriangleWave(float x) +{ + return smoothCurve(triangleWave( x )) * 2.0 - 1.0; } void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - + #if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER vec4 pos = gl_Vertex; pos.y -= 2.0; diff --git a/minetest.conf.example b/minetest.conf.example index 76f01bcfc..f73dc3e27 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -225,40 +225,47 @@ # Set to true to pre-generate all item visuals #preload_item_visuals = false # Set to true to enable shaders. Disable them if video_driver = direct3d9/8. + #enable_shaders = true -# Set to true to enable textures bumpmapping. Requires shaders enabled. #enable_bumpmapping = false -# Set to true enables parallax occlusion mapping. Requires shaders enabled. +# Set to true to enable textures bumpmapping. Requires shaders enabled. #generate_normalmaps = false # Set to true enables on the fly normalmap generation (Emboss effect). # Requires bumpmapping enabled. #normalmaps_strength = 0.6 # Strength of generated normalmaps -#normalmaps_smooth = 1 +#normalmaps_smooth = 0 # Defines sampling step of texture (0 - 2). # A higher value results in smoother normal maps. +#parallax_occlusion_mode = 1 +# 0 = parallax occlusion with slope information (faster) +# 1 = relief mapping (slower, more accurate) #enable_parallax_occlusion = false -# Scale of parallax occlusion effect +# Set to true enables parallax occlusion mapping. Requires shaders enabled. +#parallax_occlusion_iterations = 4 +# Number of parallax occlusion iterations #parallax_occlusion_scale = 0.08 -# Bias of parallax occlusion effect, usually scale/2 +# Overall scale of parallax occlusion effect #parallax_occlusion_bias = 0.04 -# Set to true enables waving water. Requires shaders enabled. +# Overall bias of parallax occlusion effect, usually scale/2 #enable_waving_water = false +# Set to true enables waving water. Requires shaders enabled. # Parameters for waving water: #water_wave_height = 1.0 #water_wave_length = 20.0 #water_wave_speed = 5.0 -# Set to true enables waving leaves. Requires shaders enabled. #enable_waving_leaves = false -# Set to true enables waving plants. Requires shaders enabled. +# Set to true enables waving leaves. Requires shaders enabled. #enable_waving_plants = false -# Enables caching of facedir rotated meshes +# Set to true enables waving plants. Requires shaders enabled. #ambient_occlusion_gamma = 2.2 # The strength (darkness) of node ambient-occlusion shading. # Lower is darker, Higher is lighter. The valid range of values for this # setting is 0.25 to 4.0 inclusive. If the value is out of range it will be # set to the nearest valid value. #enable_mesh_cache = true +# Enables caching of facedir rotated meshes + # The time in seconds it takes between repeated # right clicks when holding the right mouse button. #repeat_rightclick_time = 0.25 diff --git a/src/clientmap.cpp b/src/clientmap.cpp index 1a52ac4ab..288a12135 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -539,7 +539,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) MapBlockMesh *mapBlockMesh = block->mesh; assert(mapBlockMesh); - scene::SMesh *mesh = mapBlockMesh->getMesh(); + scene::IMesh *mesh = mapBlockMesh->getMesh(); assert(mesh); u32 c = mesh->getMeshBufferCount(); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 0cf1dd770..eab81009f 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -160,8 +160,10 @@ void set_default_settings(Settings *settings) settings->setDefault("generate_normalmaps", "false"); settings->setDefault("normalmaps_strength", "0.6"); settings->setDefault("normalmaps_smooth", "1"); - settings->setDefault("parallax_occlusion_scale", "0.06"); - settings->setDefault("parallax_occlusion_bias", "0.03"); + settings->setDefault("parallax_occlusion_mode", "1"); + settings->setDefault("parallax_occlusion_iterations", "4"); + settings->setDefault("parallax_occlusion_scale", "0.08"); + settings->setDefault("parallax_occlusion_bias", "0.04"); settings->setDefault("enable_waving_water", "false"); settings->setDefault("water_wave_height", "1.0"); settings->setDefault("water_wave_length", "20.0"); diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index ab4b63f86..9c755b102 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "shader.h" #include "settings.h" #include "util/directiontables.h" +#include static void applyFacesShading(video::SColor& color, float factor) { @@ -1028,6 +1029,8 @@ static void updateAllFastFaceRows(MeshMakeData *data, MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_mesh(new scene::SMesh()), m_gamedef(data->m_gamedef), + m_tsrc(m_gamedef->getTextureSource()), + m_shdrsrc(m_gamedef->getShaderSource()), m_animation_force_timer(0), // force initial animation m_last_crack(-1), m_crack_materials(), @@ -1110,8 +1113,6 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): /* Convert MeshCollector to SMesh */ - ITextureSource *tsrc = m_gamedef->tsrc(); - IShaderSource *shdrsrc = m_gamedef->getShaderSource(); for(u32 i = 0; i < collector.prebuffers.size(); i++) { @@ -1123,13 +1124,13 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): { // Find the texture name plus ^[crack:N: std::ostringstream os(std::ios::binary); - os<getTextureName(p.tile.texture_id)<<"^[crack"; + os<getTextureName(p.tile.texture_id)<<"^[crack"; if(p.tile.material_flags & MATERIAL_FLAG_CRACK_OVERLAY) os<<"o"; // use ^[cracko os<<":"<<(u32)p.tile.animation_frame_count<<":"; m_crack_materials.insert(std::make_pair(i, os.str())); // Replace tile texture with the cracked one - p.tile.texture = tsrc->getTextureForMesh( + p.tile.texture = m_tsrc->getTextureForMesh( os.str()+"0", &p.tile.texture_id); } @@ -1158,20 +1159,21 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): for(u32 j = 0; j < p.vertices.size(); j++) { + video::S3DVertexTangents *vertex = &p.vertices[j]; // Note applyFacesShading second parameter is precalculated sqrt // value for speed improvement // Skip it for lightsources and top faces. - video::SColor &vc = p.vertices[j].Color; + video::SColor &vc = vertex->Color; if (!vc.getBlue()) { - if (p.vertices[j].Normal.Y < -0.5) { + if (vertex->Normal.Y < -0.5) { applyFacesShading (vc, 0.447213); - } else if (p.vertices[j].Normal.X > 0.5) { + } else if (vertex->Normal.X > 0.5) { applyFacesShading (vc, 0.670820); - } else if (p.vertices[j].Normal.X < -0.5) { + } else if (vertex->Normal.X < -0.5) { applyFacesShading (vc, 0.670820); - } else if (p.vertices[j].Normal.Z > 0.5) { + } else if (vertex->Normal.Z > 0.5) { applyFacesShading (vc, 0.836660); - } else if (p.vertices[j].Normal.Z < -0.5) { + } else if (vertex->Normal.Z < -0.5) { applyFacesShading (vc, 0.836660); } } @@ -1199,33 +1201,30 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): material.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; } else { if (m_enable_shaders) { - material.MaterialType = shdrsrc->getShaderInfo(p.tile.shader_id).material; + material.MaterialType = m_shdrsrc->getShaderInfo(p.tile.shader_id).material; p.tile.applyMaterialOptionsWithShaders(material); if (p.tile.normal_texture) { material.setTexture(1, p.tile.normal_texture); - material.setTexture(2, tsrc->getTextureForMesh("enable_img.png")); + material.setTexture(2, m_tsrc->getTextureForMesh("enable_img.png")); } else { - material.setTexture(2, tsrc->getTextureForMesh("disable_img.png")); + material.setTexture(2, m_tsrc->getTextureForMesh("disable_img.png")); } } else { p.tile.applyMaterialOptions(material); } } - - // Create meshbuffer - // This is a "Standard MeshBuffer", - // it's a typedeffed CMeshBuffer - scene::SMeshBuffer *buf = new scene::SMeshBuffer(); - // Set material - buf->Material = material; - // Add to mesh - m_mesh->addMeshBuffer(buf); - // Mesh grabbed it - buf->drop(); - buf->append(&p.vertices[0], p.vertices.size(), - &p.indices[0], p.indices.size()); - } - + + // Create meshbuffer + scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents(); + // Set material + buf->Material = material; + // Add to mesh + m_mesh->addMeshBuffer(buf); + // Mesh grabbed it + buf->drop(); + buf->append(&p.vertices[0], p.vertices.size(), + &p.indices[0], p.indices.size()); +} m_camera_offset = camera_offset; /* @@ -1234,6 +1233,11 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): translateMesh(m_mesh, intToFloat(data->m_blockpos * MAP_BLOCKSIZE - camera_offset, BS)); + if (m_enable_shaders) { + scene::IMeshManipulator* meshmanip = m_gamedef->getSceneManager()->getMeshManipulator(); + meshmanip->recalculateTangents(m_mesh, true, false, false); + } + if(m_mesh) { #if 0 @@ -1272,7 +1276,6 @@ MapBlockMesh::~MapBlockMesh() bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_ratio) { - if(!m_has_animation) { m_animation_force_timer = 100000; @@ -1292,12 +1295,11 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat std::string basename = i->second; // Create new texture name from original - ITextureSource *tsrc = m_gamedef->getTextureSource(); std::ostringstream os; os<getTextureForMesh(os.str(), &new_texture_id); + m_tsrc->getTextureForMesh(os.str(), &new_texture_id); buf->getMaterial().setTexture(0, new_texture); // If the current material is also animated, @@ -1333,16 +1335,15 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat m_animation_frames[i->first] = frame; scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); - ITextureSource *tsrc = m_gamedef->getTextureSource(); FrameSpec animation_frame = tile.frames[frame]; buf->getMaterial().setTexture(0, animation_frame.texture); if (m_enable_shaders) { if (animation_frame.normal_texture) { buf->getMaterial().setTexture(1, animation_frame.normal_texture); - buf->getMaterial().setTexture(2, tsrc->getTextureForMesh("enable_img.png")); + buf->getMaterial().setTexture(2, m_tsrc->getTextureForMesh("enable_img.png")); } else { - buf->getMaterial().setTexture(2, tsrc->getTextureForMesh("disable_img.png")); + buf->getMaterial().setTexture(2, m_tsrc->getTextureForMesh("disable_img.png")); } } } @@ -1355,16 +1356,14 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat i != m_daynight_diffs.end(); i++) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); + video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)buf->getVertices(); for(std::map >::iterator j = i->second.begin(); j != i->second.end(); j++) { - u32 vertexIndex = j->first; u8 day = j->second.first; u8 night = j->second.second; - finalColorBlend(vertices[vertexIndex].Color, - day, night, daynight_ratio); + finalColorBlend(vertices[j->first].Color, day, night, daynight_ratio); } } m_last_daynight_ratio = daynight_ratio; @@ -1388,7 +1387,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat i != m_highlighted_materials.end(); i++) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(*i); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); + video::S3DVertexTangents *vertices = (video::S3DVertexTangents*)buf->getVertices(); for (u32 j = 0; j < buf->getVertexCount() ;j++) vertices[j].Color = hc; } @@ -1413,42 +1412,40 @@ void MeshCollector::append(const TileSpec &tile, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices) { - if(numIndices > 65535) - { + if (numIndices > 65535) { dstream<<"FIXME: MeshCollector::append() called with numIndices="< 65535) + if (pp.indices.size() + numIndices > 65535) continue; p = &pp; break; } - if(p == NULL) - { + if (p == NULL) { PreMeshBuffer pp; pp.tile = tile; prebuffers.push_back(pp); - p = &prebuffers[prebuffers.size()-1]; + p = &prebuffers[prebuffers.size() - 1]; } u32 vertex_count = p->vertices.size(); - for(u32 i=0; iindices.push_back(j); } - for(u32 i=0; ivertices.push_back(vertices[i]); + + for (u32 i = 0; i < numVertices; i++) { + video::S3DVertexTangents vert(vertices[i].Pos, vertices[i].Normal, + vertices[i].Color, vertices[i].TCoords); + p->vertices.push_back(vert); } } @@ -1461,15 +1458,13 @@ void MeshCollector::append(const TileSpec &tile, const u16 *indices, u32 numIndices, v3f pos, video::SColor c) { - if(numIndices > 65535) - { + if (numIndices > 65535) { dstream<<"FIXME: MeshCollector::append() called with numIndices="<vertices.size(); - for(u32 i=0; iindices.push_back(j); } - for(u32 i=0; ivertices.push_back(vert); } } diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h index b334ce469..72c90c3e5 100644 --- a/src/mapblock_mesh.h +++ b/src/mapblock_mesh.h @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include class IGameDef; +class IShaderSource; /* Mesh making stuff @@ -123,6 +124,8 @@ public: private: scene::SMesh *m_mesh; IGameDef *m_gamedef; + ITextureSource *m_tsrc; + IShaderSource *m_shdrsrc; bool m_enable_shaders; bool m_enable_highlighting; @@ -165,13 +168,12 @@ struct PreMeshBuffer { TileSpec tile; std::vector indices; - std::vector vertices; + std::vector vertices; }; struct MeshCollector { std::vector prebuffers; - void append(const TileSpec &material, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices); diff --git a/src/mesh.cpp b/src/mesh.cpp index e021e4c92..6c7c6d37b 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -94,26 +94,25 @@ scene::IAnimatedMesh* createCubeMesh(v3f scale) void scaleMesh(scene::IMesh *mesh, v3f scale) { - if(mesh == NULL) + if (mesh == NULL) return; core::aabbox3d bbox; - bbox.reset(0,0,0); + bbox.reset(0, 0, 0); - u16 mc = mesh->getMeshBufferCount(); - for(u16 j=0; jgetMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); - u16 vc = buf->getVertexCount(); - for(u16 i=0; igetVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) + ((video::S3DVertex *)(vertices + i * stride))->Pos *= scale; + buf->recalculateBoundingBox(); // calculate total bounding box - if(j == 0) + if (j == 0) bbox = buf->getBoundingBox(); else bbox.addInternalBox(buf->getBoundingBox()); @@ -123,26 +122,25 @@ void scaleMesh(scene::IMesh *mesh, v3f scale) void translateMesh(scene::IMesh *mesh, v3f vec) { - if(mesh == NULL) + if (mesh == NULL) return; core::aabbox3d bbox; - bbox.reset(0,0,0); + bbox.reset(0, 0, 0); - u16 mc = mesh->getMeshBufferCount(); - for(u16 j=0; jgetMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); - u16 vc = buf->getVertexCount(); - for(u16 i=0; igetVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) + ((video::S3DVertex *)(vertices + i * stride))->Pos += vec; + buf->recalculateBoundingBox(); // calculate total bounding box - if(j == 0) + if (j == 0) bbox = buf->getBoundingBox(); else bbox.addInternalBox(buf->getBoundingBox()); @@ -150,21 +148,20 @@ void translateMesh(scene::IMesh *mesh, v3f vec) mesh->setBoundingBox(bbox); } + void setMeshColor(scene::IMesh *mesh, const video::SColor &color) { - if(mesh == NULL) + if (mesh == NULL) return; - - u16 mc = mesh->getMeshBufferCount(); - for(u16 j=0; jgetMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); - u16 vc = buf->getVertexCount(); - for(u16 i=0; igetVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) + ((video::S3DVertex *)(vertices + i * stride))->Color = color; } } diff --git a/src/shader.cpp b/src/shader.cpp index a467c2ea9..a6d18e1be 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -680,42 +680,54 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype, shaders_header += itos(drawtype); shaders_header += "\n"; - if (g_settings->getBool("generate_normalmaps")){ - shaders_header += "#define GENERATE_NORMALMAPS\n"; - shaders_header += "#define NORMALMAPS_STRENGTH "; - shaders_header += ftos(g_settings->getFloat("normalmaps_strength")); - shaders_header += "\n"; - float sample_step; - int smooth = (int)g_settings->getFloat("normalmaps_smooth"); - switch (smooth){ - case 0: - sample_step = 0.0078125; // 1.0 / 128.0 - break; - case 1: - sample_step = 0.00390625; // 1.0 / 256.0 - break; - case 2: - sample_step = 0.001953125; // 1.0 / 512.0 - break; - default: - sample_step = 0.0078125; - break; - } - shaders_header += "#define SAMPLE_STEP "; - shaders_header += ftos(sample_step); - shaders_header += "\n"; + if (g_settings->getBool("generate_normalmaps")) { + shaders_header += "#define GENERATE_NORMALMAPS 1\n"; + } else { + shaders_header += "#define GENERATE_NORMALMAPS 0\n"; } + shaders_header += "#define NORMALMAPS_STRENGTH "; + shaders_header += ftos(g_settings->getFloat("normalmaps_strength")); + shaders_header += "\n"; + float sample_step; + int smooth = (int)g_settings->getFloat("normalmaps_smooth"); + switch (smooth){ + case 0: + sample_step = 0.0078125; // 1.0 / 128.0 + break; + case 1: + sample_step = 0.00390625; // 1.0 / 256.0 + break; + case 2: + sample_step = 0.001953125; // 1.0 / 512.0 + break; + default: + sample_step = 0.0078125; + break; + } + shaders_header += "#define SAMPLE_STEP "; + shaders_header += ftos(sample_step); + shaders_header += "\n"; if (g_settings->getBool("enable_bumpmapping")) shaders_header += "#define ENABLE_BUMPMAPPING\n"; if (g_settings->getBool("enable_parallax_occlusion")){ + int mode = g_settings->getFloat("parallax_occlusion_mode"); + float scale = g_settings->getFloat("parallax_occlusion_scale"); + float bias = g_settings->getFloat("parallax_occlusion_bias"); + int iterations = g_settings->getFloat("parallax_occlusion_iterations"); shaders_header += "#define ENABLE_PARALLAX_OCCLUSION\n"; + shaders_header += "#define PARALLAX_OCCLUSION_MODE "; + shaders_header += itos(mode); + shaders_header += "\n"; shaders_header += "#define PARALLAX_OCCLUSION_SCALE "; - shaders_header += ftos(g_settings->getFloat("parallax_occlusion_scale")); + shaders_header += ftos(scale); shaders_header += "\n"; shaders_header += "#define PARALLAX_OCCLUSION_BIAS "; - shaders_header += ftos(g_settings->getFloat("parallax_occlusion_bias")); + shaders_header += ftos(bias); + shaders_header += "\n"; + shaders_header += "#define PARALLAX_OCCLUSION_ITERATIONS "; + shaders_header += itos(iterations); shaders_header += "\n"; } @@ -755,7 +767,6 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype, vertex_program = shaders_header + vertex_program; if(geometry_program != "") geometry_program = shaders_header + geometry_program; - // Call addHighLevelShaderMaterial() or addShaderMaterial() const c8* vertex_program_ptr = 0; const c8* pixel_program_ptr = 0; From ee38bcd307e1a2e0e8b010956eff432329f3e8d8 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 14 Jun 2015 23:09:20 +0200 Subject: [PATCH 114/670] Automated whitespace error fix for last commit --- .../shaders/nodes_shader/opengl_vertex.glsl | 80 +++++++++---------- .../water_surface_shader/opengl_vertex.glsl | 20 ++--- src/mapblock_mesh.cpp | 2 +- src/mesh.cpp | 6 +- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index e5644b8b2..42a5f6cbf 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -14,36 +14,36 @@ varying vec3 eyeVec; varying vec3 lightVec; varying vec3 tsEyeVec; varying vec3 tsLightVec; -varying float generate_heightmaps; +varying float generate_heightmaps; const float e = 2.718281828459; const float BS = 10.0; -float smoothCurve(float x) -{ - return x * x * (3.0 - 2.0 * x); +float smoothCurve(float x) +{ + return x * x * (3.0 - 2.0 * x); } -float triangleWave(float x) -{ - return abs(fract(x + 0.5) * 2.0 - 1.0); +float triangleWave(float x) +{ + return abs(fract(x + 0.5) * 2.0 - 1.0); } -float smoothTriangleWave(float x) -{ - return smoothCurve(triangleWave(x)) * 2.0 - 1.0; +float smoothTriangleWave(float x) +{ + return smoothCurve(triangleWave(x)) * 2.0 - 1.0; } void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - gl_TexCoord[0].y += 0.008; - -#if ((DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) && GENERATE_NORMALMAPS) - generate_heightmaps = 1.0; -#else - generate_heightmaps = 0.0; -#endif - -#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER) + gl_TexCoord[0].y += 0.008; + +#if ((DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) && GENERATE_NORMALMAPS) + generate_heightmaps = 1.0; +#else + generate_heightmaps = 0.0; +#endif + +#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER) vec4 pos = gl_Vertex; pos.y -= 2.0; @@ -87,33 +87,33 @@ void main(void) vPosition = gl_Position.xyz; worldPosition = (mWorld * gl_Vertex).xyz; - - // Don't generate heightmaps when too far from the eye - float dist = distance (worldPosition, eyePosition); - if (dist > 100.00) { - generate_heightmaps = 0.0; - } - + + // Don't generate heightmaps when too far from the eye + float dist = distance (worldPosition, eyePosition); + if (dist > 100.00) { + generate_heightmaps = 0.0; + } + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); - tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz); - binormal = normalize(gl_NormalMatrix * -gl_MultiTexCoord2.xyz); - - vec3 v; + tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz); + binormal = normalize(gl_NormalMatrix * -gl_MultiTexCoord2.xyz); + + vec3 v; lightVec = sunPosition - worldPosition; - v.x = dot(lightVec, tangent); - v.y = dot(lightVec, binormal); - v.z = dot(lightVec, normal); - tsLightVec = v; - - eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; - v.x = dot(eyeVec, tangent); - v.y = dot(eyeVec, binormal); - v.z = dot(eyeVec, normal); - tsEyeVec = v; + v.x = dot(lightVec, tangent); + v.y = dot(lightVec, binormal); + v.z = dot(lightVec, normal); + tsLightVec = v; + + eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; + v.x = dot(eyeVec, tangent); + v.y = dot(eyeVec, binormal); + v.z = dot(eyeVec, normal); + tsEyeVec = v; vec4 color; float day = gl_Color.r; diff --git a/client/shaders/water_surface_shader/opengl_vertex.glsl b/client/shaders/water_surface_shader/opengl_vertex.glsl index 53678800d..7ae517d8a 100644 --- a/client/shaders/water_surface_shader/opengl_vertex.glsl +++ b/client/shaders/water_surface_shader/opengl_vertex.glsl @@ -18,23 +18,23 @@ varying vec3 tsLightVec; const float e = 2.718281828459; const float BS = 10.0; -float smoothCurve(float x) -{ - return x * x * (3.0 - 2.0 * x); +float smoothCurve(float x) +{ + return x * x * (3.0 - 2.0 * x); } -float triangleWave(float x) -{ - return abs(fract( x + 0.5 ) * 2.0 - 1.0); +float triangleWave(float x) +{ + return abs(fract( x + 0.5 ) * 2.0 - 1.0); } -float smoothTriangleWave(float x) -{ - return smoothCurve(triangleWave( x )) * 2.0 - 1.0; +float smoothTriangleWave(float x) +{ + return smoothCurve(triangleWave( x )) * 2.0 - 1.0; } void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - + #if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER vec4 pos = gl_Vertex; pos.y -= 2.0; diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 9c755b102..79e3e81ba 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1213,7 +1213,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): p.tile.applyMaterialOptions(material); } } - + // Create meshbuffer scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents(); // Set material diff --git a/src/mesh.cpp b/src/mesh.cpp index 6c7c6d37b..4f70b7fa2 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -106,7 +106,7 @@ void scaleMesh(scene::IMesh *mesh, v3f scale) const u32 stride = getVertexPitchFromType(buf->getVertexType()); u32 vertex_count = buf->getVertexCount(); u8 *vertices = (u8 *)buf->getVertices(); - for (u32 i = 0; i < vertex_count; i++) + for (u32 i = 0; i < vertex_count; i++) ((video::S3DVertex *)(vertices + i * stride))->Pos *= scale; buf->recalculateBoundingBox(); @@ -134,7 +134,7 @@ void translateMesh(scene::IMesh *mesh, v3f vec) const u32 stride = getVertexPitchFromType(buf->getVertexType()); u32 vertex_count = buf->getVertexCount(); u8 *vertices = (u8 *)buf->getVertices(); - for (u32 i = 0; i < vertex_count; i++) + for (u32 i = 0; i < vertex_count; i++) ((video::S3DVertex *)(vertices + i * stride))->Pos += vec; buf->recalculateBoundingBox(); @@ -160,7 +160,7 @@ void setMeshColor(scene::IMesh *mesh, const video::SColor &color) const u32 stride = getVertexPitchFromType(buf->getVertexType()); u32 vertex_count = buf->getVertexCount(); u8 *vertices = (u8 *)buf->getVertices(); - for (u32 i = 0; i < vertex_count; i++) + for (u32 i = 0; i < vertex_count; i++) ((video::S3DVertex *)(vertices + i * stride))->Color = color; } } From ecdfbfc8dc1bc62acce0b041b5a3349f886843ec Mon Sep 17 00:00:00 2001 From: Craig Davison Date: Sun, 14 Jun 2015 21:28:51 +0100 Subject: [PATCH 115/670] Remove reference to deprecated privilege --- builtin/game/chatcommands.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index d5d9c3d25..d656f1c91 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -189,7 +189,7 @@ core.register_chatcommand("revoke", { local revoke_privs = core.string_to_privs(revoke_priv_str) local privs = core.get_player_privs(revoke_name) for priv, _ in pairs(revoke_privs) do - if priv ~= "interact" and priv ~= "shout" and priv ~= "interact_extra" and + if priv ~= "interact" and priv ~= "shout" and not core.check_player_privs(name, {privs=true}) then return false, "Your privileges are insufficient." end From bb5f830d1653927cf6f712fc241006f00e1b70e8 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 11 Mar 2015 20:52:47 +0100 Subject: [PATCH 116/670] Ignore punches with no damage in the actionstream --- src/content_sao.cpp | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 318dd367a..984d2ffa3 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -419,19 +419,19 @@ int LuaEntitySAO::punch(v3f dir, ServerActiveObject *puncher, float time_from_last_punch) { - if(!m_registered){ + if (!m_registered){ // Delete unknown LuaEntities when punched m_removed = true; return 0; } // It's best that attachments cannot be punched - if(isAttached()) + if (isAttached()) return 0; ItemStack *punchitem = NULL; ItemStack punchitem_static; - if(puncher){ + if (puncher) { punchitem_static = puncher->getWieldedItem(); punchitem = &punchitem_static; } @@ -442,31 +442,26 @@ int LuaEntitySAO::punch(v3f dir, punchitem, time_from_last_punch); - if(result.did_punch) - { + if (result.did_punch) { setHP(getHP() - result.damage); + if (result.damage > 0) { + std::string punchername = puncher ? puncher->getDescription() : "nil"; - std::string punchername = "nil"; - - if ( puncher != 0 ) - punchername = puncher->getDescription(); - - actionstream<getScriptIface()->luaentity_Punch(m_id, puncher, time_from_last_punch, toolcap, dir); @@ -475,10 +470,10 @@ int LuaEntitySAO::punch(v3f dir, void LuaEntitySAO::rightClick(ServerActiveObject *clicker) { - if(!m_registered) + if (!m_registered) return; // It's best that attachments cannot be clicked - if(isAttached()) + if (isAttached()) return; m_env->getScriptIface()->luaentity_Rightclick(m_id, clicker); } From 38482d26563d8ad4680dd018266eb5dccb2a5874 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 13 Jun 2015 01:26:56 +0100 Subject: [PATCH 117/670] Biome API: Enable biome generation to lower world limit Decorations: Remove lower limit of water level for placement --- src/mapgen_v5.cpp | 11 +++-------- src/mapgen_v5.h | 1 - src/mapgen_v7.cpp | 11 +++-------- src/mapgen_v7.h | 2 -- src/mg_decoration.cpp | 1 - 5 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 7c2a149fb..92febf43b 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -327,11 +327,9 @@ void MapgenV5::calculateNoise() noise_cave2->perlinMap3D(x, y, z); } - if (node_max.Y >= BIOMEGEN_BASE_V5) { - noise_filler_depth->perlinMap2D(x, z); - noise_heat->perlinMap2D(x, z); - noise_humidity->perlinMap2D(x, z); - } + noise_filler_depth->perlinMap2D(x, z); + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); //printf("calculateNoise: %dus\n", t.stop()); } @@ -396,9 +394,6 @@ int MapgenV5::generateBaseTerrain() MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) { - if (node_max.Y < BIOMEGEN_BASE_V5) - return STONE; - v3s16 em = vm->m_area.getExtent(); u32 index = 0; MgStoneType stone_type = STONE; diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index e8455a46f..5575dfe61 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" #define LARGE_CAVE_DEPTH -256 -#define BIOMEGEN_BASE_V5 -192 /////////////////// Mapgen V5 flags //#define MGV5_ 0x01 diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index be7212e0e..247d9debc 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -362,11 +362,9 @@ void MapgenV7::calculateNoise() noise_mount_height->perlinMap2D(x, z); } - if (node_max.Y >= BIOMEGEN_BASE_V7) { - noise_filler_depth->perlinMap2D(x, z); - noise_heat->perlinMap2D(x, z); - noise_humidity->perlinMap2D(x, z); - } + noise_filler_depth->perlinMap2D(x, z); + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); //printf("calculateNoise: %dus\n", t.stop()); } @@ -591,9 +589,6 @@ void MapgenV7::generateRidgeTerrain() MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) { - if (node_max.Y < BIOMEGEN_BASE_V7) - return STONE; - v3s16 em = vm->m_area.getExtent(); u32 index = 0; MgStoneType stone_type = STONE; diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index 84f0c9efa..eb46c371b 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -22,8 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" -#define BIOMEGEN_BASE_V7 -192 - /////////////////// Mapgen V7 flags #define MGV7_MOUNTAINS 0x01 #define MGV7_RIDGES 0x02 diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index 5176ccb68..f133788de 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -129,7 +129,6 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) s16 y = mg->heightmap ? mg->heightmap[mapindex] : mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y); - y = MYMAX(y, mg->water_level); if (y < nmin.Y || y > nmax.Y || y < y_min || y > y_max) From 3b4408aa6cb720fe8c5adaf46232cc5638d0a11b Mon Sep 17 00:00:00 2001 From: "y.st" Date: Sun, 14 Jun 2015 22:51:40 -0700 Subject: [PATCH 118/670] Don't crash when saplings try to grow on unknown nodes --- games/minimal/mods/default/init.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index 120f004b7..cf0a1c679 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -1660,7 +1660,12 @@ minetest.register_abm({ interval = 10, chance = 50, action = function(pos, node) - local is_soil = minetest.registered_nodes[minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name].groups.soil + local node_under = minetest.registered_nodes[ + minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}).name] + if not node_under then + return + end + local is_soil = node_under.groups.soil if is_soil == nil or is_soil == 0 then return end print("A sapling grows into a tree at "..minetest.pos_to_string(pos)) local vm = minetest.get_voxel_manip() From bbf6f4fc25bbb66bf468ed33f8b6bc812dd39e88 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 15 Jun 2015 01:26:02 +0200 Subject: [PATCH 119/670] Don't highlight entries in credits --- builtin/mainmenu/tab_credits.lua | 84 ++++++++++++++++---------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 77cd355dc..921c09232 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -25,46 +25,48 @@ tab_credits = { return "label[0.5,3.2;Minetest " .. core.get_version() .. "]" .. "label[0.5,3.5;http://minetest.net]" .. "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" .. - "textlist[3.5,-0.25;8.5,5.8;list_credits;" .. - "#FFFF00" .. fgettext("Core Developers") .."," .. - "Perttu Ahola (celeron55) ,".. - "Ryan Kwolek (kwolekr) ,".. - "PilzAdam ," .. - "Lisa Milne (darkrose) ,".. - "Maciej Kasatkin (RealBadAngel) ,".. - "sfan5 ,".. - "kahrl ,".. - "sapier,".. - "ShadowNinja ,".. - "Nathanael Courant (Nore/Novatux) ,".. - "BlockMen,".. - "Craig Robbins (Zeno),".. - "Loic Blot (nerzhul/nrz),".. - "paramat,".. - ",".. - "#FFFF00" .. fgettext("Active Contributors") .. "," .. - "SmallJoker ," .. - "est31 ," .. - "gregorycu,".. - "Andrew Ward (rubenwardy) ," .. - "TriBlade9 ,".. - "Zefram ,".. - "," .. - "#FFFF00" .. fgettext("Previous Contributors") .. "," .. - "Vanessa Ezekowitz (VanessaE) ,".. - "Jurgen Doser (doserj) ,".. - "Jeija ,".. - "MirceaKitsune ,".. - "dannydark ,".. - "0gb.us <0gb.us@0gb.us>,".. - "proller ,".. - "Ilya Zhuravlev (xyz) ,".. - "Guiseppe Bilotta (Oblomov) ,".. - "Jonathan Neuschafer ,".. - "Nils Dagsson Moskopp (erlehmann) ,".. - "Constantin Wenger (SpeedProg) ,".. - "matttpt ,".. - "JacobF ,".. - ";0;true]" + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[3.5,-0.25;8.5,5.8;list_credits;" .. + "#FFFF00," .. fgettext("Core Developers") .."," .. + ",Perttu Ahola (celeron55) ,".. + ",Ryan Kwolek (kwolekr) ,".. + ",PilzAdam ," .. + ",Lisa Milne (darkrose) ,".. + ",Maciej Kasatkin (RealBadAngel) ,".. + ",sfan5 ,".. + ",kahrl ,".. + ",sapier,".. + ",ShadowNinja ,".. + ",Nathanael Courant (Nore/Novatux) ,".. + ",BlockMen,".. + ",Craig Robbins (Zeno),".. + ",Loic Blot (nerzhul/nrz),".. + ",paramat,".. + ",,".. + "#FFFF00," .. fgettext("Active Contributors") .. "," .. + ",SmallJoker ," .. + ",est31 ," .. + ",gregorycu,".. + ",Andrew Ward (rubenwardy) ," .. + ",TriBlade9 ,".. + ",Zefram ,".. + ",," .. + "#FFFF00," .. fgettext("Previous Contributors") .. "," .. + ",Vanessa Ezekowitz (VanessaE) ,".. + ",Jurgen Doser (doserj) ,".. + ",Jeija ,".. + ",MirceaKitsune ,".. + ",dannydark ,".. + ",0gb.us <0gb.us@0gb.us>,".. + ",proller ,".. + ",Ilya Zhuravlev (xyz) ,".. + ",Guiseppe Bilotta (Oblomov) ,".. + ",Jonathan Neuschafer ,".. + ",Nils Dagsson Moskopp (erlehmann) ,".. + ",Constantin Wenger (SpeedProg) ,".. + ",matttpt ,".. + ",JacobF ,".. + ";1]" end } From 3ae8b92be6e527054a3f291dee995230528141ca Mon Sep 17 00:00:00 2001 From: Nathaniel Olsen Date: Mon, 15 Jun 2015 21:10:06 -0500 Subject: [PATCH 120/670] Remove unneccessary space for tab completion --- src/chat.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chat.cpp b/src/chat.cpp index 2d29d39da..50391d39b 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -511,7 +511,7 @@ void ChatPrompt::nickCompletion(const std::list& names, bool backwa { std::wstring completion = narrow_to_wide(*i); if (prefix_start == 0) - completion += L":"; + completion += L": "; completions.push_back(completion); } } @@ -541,7 +541,7 @@ void ChatPrompt::nickCompletion(const std::list& names, bool backwa } } } - std::wstring replacement = completions[replacement_index] + L" "; + std::wstring replacement = completions[replacement_index]; if (word_end < m_line.size() && isspace(word_end)) ++word_end; From c977fbd9288d0e80019554411a2f1885f7760568 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 16 Jun 2015 10:48:54 +0200 Subject: [PATCH 121/670] Add list-rings Adds list-rings, a method to implement item sending between inventories via shift-click. Nice insider feature: a ring consisting of a single inventory list serves as nice clean-up method. Also adds them to minimal game, and the standard inventory. Craft output slots are not supported. --- doc/lua_api.txt | 11 +++ games/minimal/mods/default/init.lua | 18 +++- src/guiFormSpecMenu.cpp | 122 +++++++++++++++++++++++++--- src/guiFormSpecMenu.h | 18 ++++ src/player.cpp | 1 + 5 files changed, 156 insertions(+), 14 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 012c6eae1..a65c53c1a 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1340,6 +1340,17 @@ examples. #### `list[;;,;,;]` * Show an inventory list +#### `listring[;]` +* Allows to create a ring of inventory lists +* Shift-clicking on items in one element of the ring +* will send them to the next inventory list inside the ring +* The first occurrence of an element inside the ring will +* determine the inventory where items will be sent to + +#### `listring[]` +* Shorthand for doing `listring[;]` +* for the last two inventory lists added by list[...] + #### `listcolors[;]` * Sets background color of slots as `ColorString` * Sets background color of slots on mouse hovering diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index cf0a1c679..c51af594f 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -1158,7 +1158,8 @@ minetest.register_node("default:chest", { meta:set_string("formspec", "size[8,9]".. "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;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) @@ -1197,7 +1198,8 @@ minetest.register_node("default:chest_locked", { meta:set_string("formspec", "size[8,9]".. "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;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() @@ -1261,7 +1263,11 @@ default.furnace_inactive_formspec = "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;]" + "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", @@ -1398,7 +1404,11 @@ minetest.register_abm({ "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;]") + "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 diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index ec829525b..0414dc41f 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -352,6 +352,40 @@ void GUIFormSpecMenu::parseList(parserData* data,std::string element) errorstream<< "Invalid list element(" << parts.size() << "): '" << element << "'" << std::endl; } +void GUIFormSpecMenu::parseListRing(parserData* data, std::string element) +{ + if (m_gamedef == 0) { + errorstream << "WARNING: invalid use of 'listring' with m_gamedef==0" << std::endl; + return; + } + + std::vector parts = split(element, ';'); + + if (parts.size() == 2) { + std::string location = parts[0]; + std::string listname = parts[1]; + + InventoryLocation loc; + + if (location == "context" || location == "current_name") + loc = m_current_inventory_location; + else + loc.deSerialize(location); + + m_inventory_rings.push_back(ListRingSpec(loc, listname)); + return; + } else if ((element == "") && (m_inventorylists.size() > 1)) { + size_t siz = m_inventorylists.size(); + // insert the last two inv list elements into the list ring + const ListDrawSpec &spa = m_inventorylists[siz - 2]; + const ListDrawSpec &spb = m_inventorylists[siz - 1]; + m_inventory_rings.push_back(ListRingSpec(spa.inventoryloc, spa.listname)); + m_inventory_rings.push_back(ListRingSpec(spb.inventoryloc, spb.listname)); + } + errorstream<< "Invalid list ring element(" << parts.size() << ", " + << m_inventorylists.size() << "): '" << element << "'" << std::endl; +} + void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element) { std::vector parts = split(element,';'); @@ -1661,6 +1695,11 @@ void GUIFormSpecMenu::parseElement(parserData* data, std::string element) return; } + if (type == "listring") { + parseListRing(data, description); + return; + } + if (type == "checkbox") { parseCheckbox(data,description); return; @@ -3145,6 +3184,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) // from m_selected_item to s. u32 move_amount = 0; + // Set this number to a positive value to generate a move action + // from s to the next inventory ring. + u32 shift_move_amount = 0; + // Set this number to a positive value to generate a drop action // from m_selected_item. u32 drop_amount = 0; @@ -3166,18 +3209,29 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } else if(m_selected_item == NULL) { if(s_count != 0) { - // Non-empty stack has been clicked: select it + // Non-empty stack has been clicked: select or shift-move it m_selected_item = new ItemSpec(s); + u32 count; if(button == 1) // right - m_selected_amount = (s_count + 1) / 2; + count = (s_count + 1) / 2; else if(button == 2) // middle - m_selected_amount = MYMIN(s_count, 10); + count = MYMIN(s_count, 10); else // left - m_selected_amount = s_count; + count = s_count; - m_selected_dragging = true; - m_rmouse_auto_place = false; + if (!event.MouseInput.Shift) { + // no shift: select item + m_selected_amount = count; + m_selected_dragging = true; + m_rmouse_auto_place = false; + } else { + // shift pressed: move item + if (button != 1) + shift_move_amount = count; + else // count of 1 at left click like after drag & drop + shift_move_amount = 1; + } } } else { // m_selected_item != NULL @@ -3259,8 +3313,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } // Possibly send inventory action to server - if(move_amount > 0) - { + if (move_amount > 0) { // Send IACTION_MOVE assert(m_selected_item && m_selected_item->isValid()); @@ -3308,8 +3361,57 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) a->to_list = s.listname; a->to_i = s.i; m_invmgr->inventoryAction(a); - } - else if(drop_amount > 0) { + } else if (shift_move_amount > 0) { + u32 mis = m_inventory_rings.size(); + u32 i = 0; + for (; i < mis; i++) { + const ListRingSpec &sp = m_inventory_rings[i]; + if (sp.inventoryloc == s.inventoryloc + && sp.listname == s.listname) + break; + } + do { + if (i >= mis) // if not found + break; + u32 to_inv_ind = (i + 1) % mis; + const ListRingSpec &to_inv_sp = m_inventory_rings[to_inv_ind]; + InventoryList *list_from = inv_s->getList(s.listname); + if (!list_from) + break; + Inventory *inv_to = m_invmgr->getInventory(to_inv_sp.inventoryloc); + if (!inv_to) + break; + InventoryList *list_to = inv_to->getList(to_inv_sp.listname); + if (!list_to) + break; + ItemStack stack_from = list_from->getItem(s.i); + assert(shift_move_amount <= stack_from.count); + + // find a place (or more than one) to add the new item + u32 slot_to = 0; + u32 ilt_size = list_to->getSize(); + ItemStack leftover; + for (; slot_to < ilt_size && shift_move_amount > 0; slot_to++) { + list_to->itemFits(slot_to, stack_from, &leftover); + if (leftover.count < stack_from.count) { + infostream << "Handing IACTION_MOVE to manager" << std::endl; + IMoveAction *a = new IMoveAction(); + a->count = MYMIN(shift_move_amount, + (u32) (stack_from.count - leftover.count)); + shift_move_amount -= a->count; + a->from_inv = s.inventoryloc; + a->from_list = s.listname; + a->from_i = s.i; + a->to_inv = to_inv_sp.inventoryloc; + a->to_list = to_inv_sp.listname; + a->to_i = slot_to; + m_invmgr->inventoryAction(a); + stack_from = leftover; + } + } + } while (0); + + } else if (drop_amount > 0) { m_selected_content_guess = ItemStack(); // Clear // Send IACTION_DROP diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index f04968aec..2ba47f7ff 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -121,6 +121,22 @@ class GUIFormSpecMenu : public GUIModalMenu s32 start_item_i; }; + struct ListRingSpec + { + ListRingSpec() + { + } + ListRingSpec(const InventoryLocation &a_inventoryloc, + const std::string &a_listname): + inventoryloc(a_inventoryloc), + listname(a_listname) + { + } + + InventoryLocation inventoryloc; + std::string listname; + }; + struct ImageDrawSpec { ImageDrawSpec() @@ -306,6 +322,7 @@ protected: std::vector m_inventorylists; + std::vector m_inventory_rings; std::vector m_backgrounds; std::vector m_images; std::vector m_itemimages; @@ -384,6 +401,7 @@ private: void parseSize(parserData* data,std::string element); void parseList(parserData* data,std::string element); + void parseListRing(parserData* data,std::string element); void parseCheckbox(parserData* data,std::string element); void parseImage(parserData* data,std::string element); void parseItemImage(parserData* data,std::string element); diff --git a/src/player.cpp b/src/player.cpp index 4a5e5ad91..26496259c 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -71,6 +71,7 @@ Player::Player(IGameDef *gamedef, const char *name): //"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;]" + "listring[]" "list[current_player;craftpreview;7,1;1,1;]"; // Initialize movement settings at default values, so movement can work if the server fails to send them From 7b7f8b72257fa83e43dc95117dd7e7c6d2e218d9 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 16 Jun 2015 07:32:01 +0200 Subject: [PATCH 122/670] Update credits tab --- builtin/mainmenu/tab_credits.lua | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 921c09232..1d758d58e 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -32,7 +32,6 @@ tab_credits = { ",Perttu Ahola (celeron55) ,".. ",Ryan Kwolek (kwolekr) ,".. ",PilzAdam ," .. - ",Lisa Milne (darkrose) ,".. ",Maciej Kasatkin (RealBadAngel) ,".. ",sfan5 ,".. ",kahrl ,".. @@ -43,14 +42,19 @@ tab_credits = { ",Craig Robbins (Zeno),".. ",Loic Blot (nerzhul/nrz),".. ",paramat,".. + ",est31 ," .. ",,".. "#FFFF00," .. fgettext("Active Contributors") .. "," .. ",SmallJoker ," .. - ",est31 ," .. - ",gregorycu,".. + ",gregorycu," .. ",Andrew Ward (rubenwardy) ," .. - ",TriBlade9 ,".. - ",Zefram ,".. + ",Aaron Suen ," .. + ",TeTpaAka," .. + ",," .. + "#FFFF00," .. fgettext("Previous Core Developers") .."," .. + ",Lisa Milne (darkrose) ," .. + ",proller ," .. + ",Ilya Zhuravlev (xyz) ," .. ",," .. "#FFFF00," .. fgettext("Previous Contributors") .. "," .. ",Vanessa Ezekowitz (VanessaE) ,".. @@ -59,14 +63,14 @@ tab_credits = { ",MirceaKitsune ,".. ",dannydark ,".. ",0gb.us <0gb.us@0gb.us>,".. - ",proller ,".. - ",Ilya Zhuravlev (xyz) ,".. ",Guiseppe Bilotta (Oblomov) ,".. ",Jonathan Neuschafer ,".. ",Nils Dagsson Moskopp (erlehmann) ,".. ",Constantin Wenger (SpeedProg) ,".. ",matttpt ,".. ",JacobF ,".. + ",TriBlade9 ,".. + ",Zefram ,".. ";1]" end } From 7a90b31b30897c99adcbef0a6ea0c69f1c99c2b1 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 16 Jun 2015 20:33:07 +0200 Subject: [PATCH 123/670] GUIFormSpecMenu::OnEvent code style update and small refactor * Make method (more) consistent with current code stlye * Move index into loop constructor after @rubenwardy's suggestion * Cache inv_s->getList(s.listname), which removes a possibly bad scenario of inv_s being null. * Properly check for validity --- src/guiFormSpecMenu.cpp | 165 +++++++++++++++++++--------------------- 1 file changed, 79 insertions(+), 86 deletions(-) diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 0414dc41f..73fef9a69 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -3051,10 +3051,10 @@ bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event) bool GUIFormSpecMenu::OnEvent(const SEvent& event) { - if(event.EventType==EET_KEY_INPUT_EVENT) { + if (event.EventType==EET_KEY_INPUT_EVENT) { KeyPress kp(event.KeyInput); if (event.KeyInput.PressedDown && ( (kp == EscapeKey) || - (kp == getKeySetting("keymap_inventory")) || (kp == CancelKey))) { + (kp == getKeySetting("keymap_inventory")) || (kp == CancelKey))) { if (m_allowclose) { doPause = false; acceptInput(quit_mode_cancel); @@ -3064,8 +3064,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } return true; } else if (m_client != NULL && event.KeyInput.PressedDown && - (kp == getKeySetting("keymap_screenshot"))) { - m_client->makeScreenshot(m_device); + (kp == getKeySetting("keymap_screenshot"))) { + m_client->makeScreenshot(m_device); } if (event.KeyInput.PressedDown && (event.KeyInput.Key==KEY_RETURN || @@ -3116,8 +3116,9 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) Inventory *inv_selected = NULL; Inventory *inv_s = NULL; + InventoryList *list_s = NULL; - if(m_selected_item) { + if (m_selected_item) { inv_selected = m_invmgr->getInventory(m_selected_item->inventoryloc); sanity_check(inv_selected); sanity_check(inv_selected->getList(m_selected_item->listname) != NULL); @@ -3125,35 +3126,35 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) u32 s_count = 0; - if(s.isValid()) + if (s.isValid()) do { // breakable inv_s = m_invmgr->getInventory(s.inventoryloc); - if(!inv_s) { - errorstream<<"InventoryMenu: The selected inventory location " - <<"\""<getList(s.listname); - if(list == NULL) { - verbosestream<<"InventoryMenu: The selected inventory list \"" - <getList(s.listname); + if (list_s == NULL) { + verbosestream << "InventoryMenu: The selected inventory list \"" + << s.listname << "\" does not exist" << std::endl; s.i = -1; // make it invalid again break; } - if((u32)s.i >= list->getSize()) { - infostream<<"InventoryMenu: The selected inventory list \"" - <= list_s->getSize()) { + infostream << "InventoryMenu: The selected inventory list \"" + << s.listname << "\" is too small (i=" << s.i << ", size=" + << list_s->getSize() << ")" << std::endl; s.i = -1; // make it invalid again break; } - s_count = list->getItem(s.i).count; + s_count = list_s->getItem(s.i).count; } while(0); bool identical = (m_selected_item != NULL) && s.isValid() && @@ -3165,19 +3166,19 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) // up/down: 0 = down (press), 1 = up (release), 2 = unknown event, -1 movement int button = 0; int updown = 2; - if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) + if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) { button = 0; updown = 0; } - else if(event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN) + else if (event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN) { button = 1; updown = 0; } - else if(event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN) + else if (event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN) { button = 2; updown = 0; } - else if(event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) + else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) { button = 0; updown = 1; } - else if(event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP) + else if (event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP) { button = 1; updown = 1; } - else if(event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP) + else if (event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP) { button = 2; updown = 1; } - else if(event.MouseInput.Event == EMIE_MOUSE_MOVED) + else if (event.MouseInput.Event == EMIE_MOUSE_MOVED) { updown = -1;} // Set this number to a positive value to generate a move action @@ -3195,7 +3196,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) // Set this number to a positive value to generate a craft action at s. u32 craft_amount = 0; - if(updown == 0) { + if (updown == 0) { // Some mouse button has been pressed //infostream<<"Mouse button "<= 1); - if(s.isValid()) { + if (s.isValid()) { // Clicked a slot: move - if(button == 1) // right + if (button == 1) // right move_amount = 1; - else if(button == 2) // middle + else if (button == 2) // middle move_amount = MYMIN(m_selected_amount, 10); else // left move_amount = m_selected_amount; - if(identical) { - if(move_amount >= m_selected_amount) + if (identical) { + if (move_amount >= m_selected_amount) m_selected_amount = 0; else m_selected_amount -= move_amount; @@ -3256,29 +3255,28 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } else if (!getAbsoluteClippingRect().isPointInside(m_pointer)) { // Clicked outside of the window: drop - if(button == 1) // right + if (button == 1) // right drop_amount = 1; - else if(button == 2) // middle + else if (button == 2) // middle drop_amount = MYMIN(m_selected_amount, 10); else // left drop_amount = m_selected_amount; } } } - else if(updown == 1) { + else if (updown == 1) { // Some mouse button has been released //infostream<<"Mouse button "<getList(m_selected_item->listname); - InventoryList *list_to = inv_s->getList(s.listname); + InventoryList *list_to = list_s; assert(list_from && list_to); ItemStack stack_from = list_from->getItem(m_selected_item->i); ItemStack stack_to = list_to->getItem(s.i); @@ -3321,7 +3318,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(inv_selected && inv_s); InventoryList *list_from = inv_selected->getList(m_selected_item->listname); - InventoryList *list_to = inv_s->getList(s.listname); + InventoryList *list_to = list_s; assert(list_from && list_to); ItemStack stack_from = list_from->getItem(m_selected_item->i); ItemStack stack_to = list_to->getItem(s.i); @@ -3340,7 +3337,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) m_selected_content_guess_inventory = s.inventoryloc; } // Source stack goes fully into destination stack - else if(leftover.empty()) { + else if (leftover.empty()) { m_selected_amount -= move_amount; m_selected_content_guess = ItemStack(); // Clear } @@ -3351,7 +3348,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) m_selected_content_guess = ItemStack(); // Clear } - infostream<<"Handing IACTION_MOVE to manager"<count = move_amount; a->from_inv = m_selected_item->inventoryloc; @@ -3375,8 +3372,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) break; u32 to_inv_ind = (i + 1) % mis; const ListRingSpec &to_inv_sp = m_inventory_rings[to_inv_ind]; - InventoryList *list_from = inv_s->getList(s.listname); - if (!list_from) + InventoryList *list_from = list_s; + if (!s.isValid()) break; Inventory *inv_to = m_invmgr->getInventory(to_inv_sp.inventoryloc); if (!inv_to) @@ -3388,10 +3385,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(shift_move_amount <= stack_from.count); // find a place (or more than one) to add the new item - u32 slot_to = 0; u32 ilt_size = list_to->getSize(); ItemStack leftover; - for (; slot_to < ilt_size && shift_move_amount > 0; slot_to++) { + for (u32 slot_to = 0; slot_to < ilt_size + && shift_move_amount > 0; slot_to++) { list_to->itemFits(slot_to, stack_from, &leftover); if (leftover.count < stack_from.count) { infostream << "Handing IACTION_MOVE to manager" << std::endl; @@ -3427,15 +3424,14 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(drop_amount > 0 && drop_amount <= m_selected_amount); m_selected_amount -= drop_amount; - infostream<<"Handing IACTION_DROP to manager"<count = drop_amount; a->from_inv = m_selected_item->inventoryloc; a->from_list = m_selected_item->listname; a->from_i = m_selected_item->i; m_invmgr->inventoryAction(a); - } - else if(craft_amount > 0) { + } else if (craft_amount > 0) { m_selected_content_guess = ItemStack(); // Clear // Send IACTION_CRAFT @@ -3443,7 +3439,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(s.isValid()); assert(inv_s); - infostream<<"Handing IACTION_CRAFT to manager"<count = craft_amount; a->craft_inv = s.inventoryloc; @@ -3451,7 +3447,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } // If m_selected_amount has been decreased to zero, deselect - if(m_selected_amount == 0) { + if (m_selected_amount == 0) { delete m_selected_item; m_selected_item = NULL; m_selected_amount = 0; @@ -3460,12 +3456,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } m_old_pointer = m_pointer; } - if(event.EventType==EET_GUI_EVENT) { + if (event.EventType == EET_GUI_EVENT) { - if(event.GUIEvent.EventType==gui::EGET_TAB_CHANGED + if (event.GUIEvent.EventType == gui::EGET_TAB_CHANGED && isVisible()) { // find the element that was clicked - for(unsigned int i=0; igetID())) { @@ -3476,16 +3472,16 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } } - if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST + if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) { - if(!canTakeFocus(event.GUIEvent.Element)) { + if (!canTakeFocus(event.GUIEvent.Element)) { infostream<<"GUIFormSpecMenu: Not allowing focus change." <getID())) { s.send = true; - if(s.is_exit) { + if (s.is_exit) { if (m_allowclose) { acceptInput(quit_mode_accept); quitMenu(); @@ -3524,11 +3520,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) s.send = false; return true; } - } - else if ((s.ftype == f_DropDown) && + } else if ((s.ftype == f_DropDown) && (s.fid == event.GUIEvent.Caller->getID())) { // only send the changed dropdown - for(u32 i=0; igetID())) - { + } else if ((s.ftype == f_ScrollBar) && + (s.fid == event.GUIEvent.Caller->getID())) { s.fdefault = L"Changed"; acceptInput(quit_mode_no); s.fdefault = L""; @@ -3557,8 +3550,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } - if(event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { - if(event.GUIEvent.Caller->getID() > 257) { + if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { + if (event.GUIEvent.Caller->getID() > 257) { if (m_allowclose) { acceptInput(quit_mode_accept); @@ -3572,11 +3565,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } - if(event.GUIEvent.EventType == gui::EGET_TABLE_CHANGED) { + if (event.GUIEvent.EventType == gui::EGET_TABLE_CHANGED) { int current_id = event.GUIEvent.Caller->getID(); - if(current_id > 257) { + if (current_id > 257) { // find the element that was clicked - for(u32 i=0; i Date: Tue, 16 Jun 2015 21:00:19 +0200 Subject: [PATCH 124/670] Simpler patch for saplings trying to grow on unknown nodes --- games/minimal/mods/default/init.lua | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index c51af594f..1adc8f457 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -1670,13 +1670,10 @@ minetest.register_abm({ interval = 10, chance = 50, action = function(pos, node) - local node_under = minetest.registered_nodes[ - minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}).name] - if not node_under then + if minetest.get_item_group(minetest.get_node( + {x = pos.x, y = pos.y - 1, z = pos.z}).name, "soil") == 0 then return end - local is_soil = node_under.groups.soil - if is_soil == nil or is_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}) From 6dcf549ba9d522ed991184401658e85d3554ad8e Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 17 Jun 2015 19:00:31 +0200 Subject: [PATCH 125/670] Fail iconv call gracefully No freezing when inbuf_size doesn't decrease over time. --- src/util/string.cpp | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/util/string.cpp b/src/util/string.cpp index 0a7ab5c3a..e847f3a8e 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -40,7 +40,7 @@ static bool parseHexColorString(const std::string &value, video::SColor &color); static bool parseNamedColorString(const std::string &value, video::SColor &color); #ifndef _WIN32 -size_t convert(const char *to, const char *from, char *outbuf, +bool convert(const char *to, const char *from, char *outbuf, size_t outbuf_size, char *inbuf, size_t inbuf_size) { iconv_t cd = iconv_open(to, from); @@ -56,11 +56,18 @@ size_t convert(const char *to, const char *from, char *outbuf, size_t *inbuf_left_ptr = &inbuf_size; size_t *outbuf_left_ptr = &outbuf_size; - while (inbuf_size > 0) + size_t old_size = inbuf_size; + while (inbuf_size > 0) { iconv(cd, &inbuf_ptr, inbuf_left_ptr, &outbuf_ptr, outbuf_left_ptr); + if (inbuf_size == old_size) { + iconv_close(cd); + return false; + } + old_size = inbuf_size; + } iconv_close(cd); - return 0; + return true; } std::wstring utf8_to_wide(const std::string &input) @@ -74,7 +81,13 @@ std::wstring utf8_to_wide(const std::string &input) char *outbuf = new char[outbuf_size]; memset(outbuf, 0, outbuf_size); - convert("WCHAR_T", "UTF-8", outbuf, outbuf_size, inbuf, inbuf_size); + if (!convert("WCHAR_T", "UTF-8", outbuf, outbuf_size, inbuf, inbuf_size)) { + infostream << "Couldn't convert UTF-8 string 0x" << hex_encode(input) + << " into wstring" << std::endl; + delete[] inbuf; + delete[] outbuf; + return L""; + } std::wstring out((wchar_t*)outbuf); delete[] inbuf; @@ -101,7 +114,13 @@ std::string wide_to_utf8(const std::wstring &input) char *outbuf = new char[outbuf_size]; memset(outbuf, 0, outbuf_size); - convert("UTF-8", "WCHAR_T", outbuf, outbuf_size, inbuf, inbuf_size); + if (!convert("UTF-8", "WCHAR_T", outbuf, outbuf_size, inbuf, inbuf_size)) { + infostream << "Couldn't convert wstring 0x" << hex_encode(inbuf, inbuf_size) + << " into wstring" << std::endl; + delete[] inbuf; + delete[] outbuf; + return ""; + } std::string out(outbuf); delete[] inbuf; From 43dab2ffc899133fbd8bb4bf4d209a3bbc70b901 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 17 Jun 2015 22:10:22 +0200 Subject: [PATCH 126/670] Make wrap_rows not wrap inside utf-8 multibyte sequences Also count multibyte sequences as "one" character. Adds unittest for the bug reporter's case. Fixes #2796. --- src/unittest/test_utilities.cpp | 8 ++++++++ src/util/string.h | 13 +++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 6a731c662..9678a81eb 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -242,6 +242,14 @@ void TestUtilities::testUTF8() void TestUtilities::testWrapRows() { UASSERT(wrap_rows("12345678",4) == "1234\n5678"); + // test that wrap_rows doesn't wrap inside multibyte sequences + const unsigned char s[] = { + 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x72, 0x61, 0x70, 0x74, 0x6f, + 0x72, 0x2f, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x2f, + 0x6d, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x69, + 0x6e, 0x2f, 0x2e, 0x2e, 0}; + std::string str((char *)s); + UASSERT(utf8_to_wide(wrap_rows(str, 20)) != L""); } diff --git a/src/util/string.h b/src/util/string.h index 5bf2b5b7c..72d3c6075 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -32,6 +32,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) +// Checks whether a byte is an inner byte for an utf-8 multibyte sequence +#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x <= 0xc0)) + typedef std::map StringMap; struct FlagDesc { @@ -411,7 +414,10 @@ inline bool string_allowed_blacklist(const std::string &str, * every \p row_len characters whether it breaks a word or not. It is * intended to be used for, for example, showing paths in the GUI. * - * @param from The string to be wrapped into rows. + * @note This function doesn't wrap inside utf-8 multibyte sequences and also + * counts multibyte sequences correcly as single characters. + * + * @param from The (utf-8) string to be wrapped into rows. * @param row_len The row length (in characters). * @return A new string with the wrapping applied. */ @@ -420,9 +426,12 @@ inline std::string wrap_rows(const std::string &from, { std::string to; + size_t character_idx = 0; for (size_t i = 0; i < from.size(); i++) { - if (i != 0 && i % row_len == 0) + if (character_idx > 0 && character_idx % row_len == 0) to += '\n'; + if (!IS_UTF8_MULTB_INNER(from[i])) + character_idx++; to += from[i]; } From ea1b17b88f24eac7125a0765c37bbcd4fe8399db Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 18 Jun 2015 04:25:11 +0200 Subject: [PATCH 127/670] Don't print an error for valid listring[] formspec --- src/guiFormSpecMenu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 73fef9a69..c11fc303a 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -381,6 +381,7 @@ void GUIFormSpecMenu::parseListRing(parserData* data, std::string element) const ListDrawSpec &spb = m_inventorylists[siz - 1]; m_inventory_rings.push_back(ListRingSpec(spa.inventoryloc, spa.listname)); m_inventory_rings.push_back(ListRingSpec(spb.inventoryloc, spb.listname)); + return; } errorstream<< "Invalid list ring element(" << parts.size() << ", " << m_inventorylists.size() << "): '" << element << "'" << std::endl; From 2da150378039371761b2f8d1a13036382228e248 Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 18 Jun 2015 02:55:52 +0100 Subject: [PATCH 128/670] Mgv6: Don't create air gap in tundra at y = 48 in custom high terrain --- src/mapgen_v6.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 50126ecf0..732ec0955 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -1007,7 +1007,7 @@ void MapgenV6::growGrass() // Add surface nodes } else if (bt == BT_TUNDRA) { if (c == c_dirt) { vm->m_data[i] = n_dirt_with_snow; - } else if (c == c_stone) { + } else if (c == c_stone && surface_y < node_max.Y) { vm->m_area.add_y(em, i, 1); vm->m_data[i] = n_snow; } From e45ecad3ab401e169d1c8c9ba9448360b215b3e5 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 3 Jun 2015 08:59:07 +0100 Subject: [PATCH 129/670] Biome API: Add noise defined biome blend --- minetest.conf.example | 4 +++- src/mapgen.cpp | 4 ++++ src/mapgen.h | 4 ++++ src/mapgen_v5.cpp | 20 +++++++++++++++----- src/mapgen_v5.h | 3 +++ src/mapgen_v7.cpp | 29 +++++++++++++++++++++-------- src/mapgen_v7.h | 2 ++ 7 files changed, 52 insertions(+), 14 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index f73dc3e27..2d533b91e 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -532,9 +532,11 @@ # Mgv5 uses eased noise for np_ground so this is shown in group format, # other noise parameters are shown in positional format to save space. -# Noise parameters for biome API temperature and humidity +# Noise parameters for biome API temperature, humidity and biome blend #mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 +#mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 #mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 +#mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 #mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 #mgv5_np_factor = 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0 diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 7965730e4..d1171e29d 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -445,7 +445,9 @@ void MapgenParams::load(const Settings &settings) settings.getS16NoEx("chunksize", chunksize); settings.getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen); settings.getNoiseParams("mg_biome_np_heat", np_biome_heat); + settings.getNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend); settings.getNoiseParams("mg_biome_np_humidity", np_biome_humidity); + settings.getNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend); delete sparams; sparams = EmergeManager::createMapgenParams(mg_name); @@ -462,7 +464,9 @@ void MapgenParams::save(Settings &settings) const settings.setS16("chunksize", chunksize); settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, (u32)-1); settings.setNoiseParams("mg_biome_np_heat", np_biome_heat); + settings.setNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend); settings.setNoiseParams("mg_biome_np_humidity", np_biome_humidity); + settings.setNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend); if (sparams) sparams->writeParams(&settings); diff --git a/src/mapgen.h b/src/mapgen.h index a875e0f3d..a1cc8af53 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -115,7 +115,9 @@ struct MapgenParams { u32 flags; NoiseParams np_biome_heat; + NoiseParams np_biome_heat_blend; NoiseParams np_biome_humidity; + NoiseParams np_biome_humidity_blend; MapgenSpecificParams *sparams; @@ -126,7 +128,9 @@ struct MapgenParams { water_level(1), flags(MG_TREES | MG_CAVES | MG_LIGHT), np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)), + np_biome_heat_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0)), np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)), + np_biome_humidity_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)), sparams(NULL) {} diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 92febf43b..f748e7b86 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -68,13 +68,15 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) noise_height = new Noise(&sp->np_height, seed, csize.X, csize.Z); // 3D terrain noise - noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); - noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); - noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); + noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z); // Biome noise - noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); - noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); + noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat_blend = new Noise(¶ms->np_biome_heat_blend, seed, csize.X, csize.Z); + noise_humidity_blend = new Noise(¶ms->np_biome_humidity_blend, seed, csize.X, csize.Z); //// Resolve nodes to be used INodeDefManager *ndef = emerge->ndef; @@ -116,6 +118,8 @@ MapgenV5::~MapgenV5() delete noise_heat; delete noise_humidity; + delete noise_heat_blend; + delete noise_humidity_blend; delete[] heightmap; delete[] biomemap; @@ -330,7 +334,13 @@ void MapgenV5::calculateNoise() noise_filler_depth->perlinMap2D(x, z); noise_heat->perlinMap2D(x, z); noise_humidity->perlinMap2D(x, z); + noise_heat_blend->perlinMap2D(x, z); + noise_humidity_blend->perlinMap2D(x, z); + for (s32 i = 0; i < csize.X * csize.Z; i++) { + noise_heat->result[i] += noise_heat_blend->result[i]; + noise_humidity->result[i] += noise_humidity_blend->result[i]; + } //printf("calculateNoise: %dus\n", t.stop()); } diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index 5575dfe61..911975e7f 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -69,8 +69,11 @@ public: Noise *noise_cave1; Noise *noise_cave2; Noise *noise_ground; + Noise *noise_heat; Noise *noise_humidity; + Noise *noise_heat_blend; + Noise *noise_humidity_blend; content_t c_stone; content_t c_water_source; diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 247d9debc..6e97c2c16 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -82,8 +82,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); //// Biome noise - noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); - noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); + noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat_blend = new Noise(¶ms->np_biome_heat_blend, seed, csize.X, csize.Z); + noise_humidity_blend = new Noise(¶ms->np_biome_humidity_blend, seed, csize.X, csize.Z); //// Resolve nodes to be used INodeDefManager *ndef = emerge->ndef; @@ -130,6 +132,8 @@ MapgenV7::~MapgenV7() delete noise_heat; delete noise_humidity; + delete noise_heat_blend; + delete noise_humidity_blend; delete[] ridge_heightmap; delete[] heightmap; @@ -227,11 +231,11 @@ void MapgenV7::makeChunk(BlockMakeData *data) assert(data->vmanip); assert(data->nodedef); assert(data->blockpos_requested.X >= data->blockpos_min.X && - data->blockpos_requested.Y >= data->blockpos_min.Y && - data->blockpos_requested.Z >= data->blockpos_min.Z); + data->blockpos_requested.Y >= data->blockpos_min.Y && + data->blockpos_requested.Z >= data->blockpos_min.Z); assert(data->blockpos_requested.X <= data->blockpos_max.X && - data->blockpos_requested.Y <= data->blockpos_max.Y && - data->blockpos_requested.Z <= data->blockpos_max.Z); + data->blockpos_requested.Y <= data->blockpos_max.Y && + data->blockpos_requested.Z <= data->blockpos_max.Z); this->generating = true; this->vm = data->vmanip; @@ -365,14 +369,23 @@ void MapgenV7::calculateNoise() noise_filler_depth->perlinMap2D(x, z); noise_heat->perlinMap2D(x, z); noise_humidity->perlinMap2D(x, z); + noise_heat_blend->perlinMap2D(x, z); + noise_humidity_blend->perlinMap2D(x, z); + + for (s32 i = 0; i < csize.X * csize.Z; i++) { + noise_heat->result[i] += noise_heat_blend->result[i]; + noise_humidity->result[i] += noise_humidity_blend->result[i]; + } //printf("calculateNoise: %dus\n", t.stop()); } Biome *MapgenV7::getBiomeAtPoint(v3s16 p) { - float heat = NoisePerlin2D(&noise_heat->np, p.X, p.Z, seed); - float humidity = NoisePerlin2D(&noise_humidity->np, p.X, p.Z, seed); + float heat = NoisePerlin2D(&noise_heat->np, p.X, p.Z, seed) + + NoisePerlin2D(&noise_heat_blend->np, p.X, p.Z, seed); + float humidity = NoisePerlin2D(&noise_humidity->np, p.X, p.Z, seed) + + NoisePerlin2D(&noise_humidity_blend->np, p.X, p.Z, seed); s16 groundlevel = baseTerrainLevelAtPoint(p.X, p.Z); return bmgr->getBiome(heat, humidity, groundlevel); diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index eb46c371b..0a8a8c876 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -82,6 +82,8 @@ public: Noise *noise_heat; Noise *noise_humidity; + Noise *noise_heat_blend; + Noise *noise_humidity_blend; content_t c_stone; content_t c_water_source; From 3b65a6a36c3e910359c69cd3e3e3fd89e50ba23e Mon Sep 17 00:00:00 2001 From: figec Date: Thu, 18 Jun 2015 21:34:17 +0300 Subject: [PATCH 130/670] Fix wrap_rows at inner byte of multibyte sequence Also fix UTF-8 inner byte bounds and make unittest for case this fixes. --- src/unittest/test_utilities.cpp | 24 +++++++++++++++++------- src/util/string.h | 14 +++++++++++--- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 9678a81eb..df90d37bd 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -243,13 +243,23 @@ void TestUtilities::testWrapRows() { UASSERT(wrap_rows("12345678",4) == "1234\n5678"); // test that wrap_rows doesn't wrap inside multibyte sequences - const unsigned char s[] = { - 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x72, 0x61, 0x70, 0x74, 0x6f, - 0x72, 0x2f, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x2f, - 0x6d, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x69, - 0x6e, 0x2f, 0x2e, 0x2e, 0}; - std::string str((char *)s); - UASSERT(utf8_to_wide(wrap_rows(str, 20)) != L""); + { + const unsigned char s[] = { + 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x72, 0x61, 0x70, 0x74, 0x6f, + 0x72, 0x2f, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x2f, + 0x6d, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x69, + 0x6e, 0x2f, 0x2e, 0x2e, 0}; + std::string str((char *)s); + UASSERT(utf8_to_wide(wrap_rows(str, 20)) != L""); + }; + { + const unsigned char s[] = { + 0x74, 0x65, 0x73, 0x74, 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, + 0xd1, 0x82, 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, + 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0}; + std::string str((char *)s); + UASSERT(utf8_to_wide(wrap_rows(str, 8)) != L""); + } } diff --git a/src/util/string.h b/src/util/string.h index 72d3c6075..b4ce5743d 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define TOSTRING(x) STRINGIFY(x) // Checks whether a byte is an inner byte for an utf-8 multibyte sequence -#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x <= 0xc0)) +#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x < 0xc0)) typedef std::map StringMap; @@ -426,12 +426,20 @@ inline std::string wrap_rows(const std::string &from, { std::string to; + bool need_to_wrap = false; + size_t character_idx = 0; for (size_t i = 0; i < from.size(); i++) { if (character_idx > 0 && character_idx % row_len == 0) - to += '\n'; - if (!IS_UTF8_MULTB_INNER(from[i])) + need_to_wrap = true; + if (!IS_UTF8_MULTB_INNER(from[i])) { + // Wrap string if needed before next char started + if (need_to_wrap) { + to += '\n'; + need_to_wrap = false; + } character_idx++; + } to += from[i]; } From 40226e52747156cbdc5128a416480b226e498fff Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 20 Jun 2015 00:30:38 +0200 Subject: [PATCH 131/670] Make attached objects visible in 3rd person view --- src/content_cao.cpp | 42 ++++++++++++++++++++++++++++-------------- src/content_cao.h | 2 ++ src/environment.cpp | 9 +++++++++ src/environment.h | 3 +++ src/game.cpp | 1 + 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 9ee81e63f..4f1336d28 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -727,6 +727,17 @@ scene::IBillboardSceneNode* GenericCAO::getSpriteSceneNode() return m_spritenode; } +void GenericCAO::setChildrenVisible(bool toset) +{ + for (std::vector::iterator ci = m_children.begin(); + ci != m_children.end(); ci++) { + GenericCAO *obj = m_env->getGenericCAO(*ci); + if (obj) { + obj->setVisible(toset); + } + } +} + void GenericCAO::setAttachments() { updateAttachments(); @@ -1489,16 +1500,7 @@ void GenericCAO::updateBonePosition() void GenericCAO::updateAttachments() { - // localplayer itself can't be attached to localplayer - if (!m_is_local_player) - { - m_attached_to_local = getParent() != NULL && getParent()->isLocalPlayer(); - // Objects attached to the local player should always be hidden - m_is_visible = !m_attached_to_local; - } - - if(getParent() == NULL || m_attached_to_local) // Detach or don't attach - { + if (getParent() == NULL) { // Detach or don't attach scene::ISceneNode *node = getSceneNode(); if (node) { v3f old_position = node->getAbsolutePosition(); @@ -1667,14 +1669,26 @@ void GenericCAO::processMessage(const std::string &data) m_bone_position[bone] = core::vector2d(position, rotation); updateBonePosition(); - } - else if(cmd == GENERIC_CMD_SET_ATTACHMENT) { - m_env->m_attachements[getId()] = readS16(is); - m_children.push_back(m_env->m_attachements[getId()]); + } else if (cmd == GENERIC_CMD_SET_ATTACHMENT) { + u16 parentID = readS16(is); + m_env->m_attachements[getId()] = parentID; + GenericCAO *parentobj = m_env->getGenericCAO(parentID); + + if (parentobj) { + parentobj->m_children.push_back(getId()); + } + m_attachment_bone = deSerializeString(is); m_attachment_position = readV3F1000(is); m_attachment_rotation = readV3F1000(is); + // localplayer itself can't be attached to localplayer + if (!m_is_local_player) { + m_attached_to_local = getParent() != NULL && getParent()->isLocalPlayer(); + // Objects attached to the local player should be hidden by default + m_is_visible = !m_attached_to_local; + } + updateAttachments(); } else if(cmd == GENERIC_CMD_PUNCHED) { diff --git a/src/content_cao.h b/src/content_cao.h index 36245bd3b..813a41259 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -162,6 +162,8 @@ public: m_is_visible = toset; } + void setChildrenVisible(bool toset); + void setAttachments(); void removeFromScene(bool permanent); diff --git a/src/environment.cpp b/src/environment.cpp index dc18fd58f..7d80619bc 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -2400,6 +2400,15 @@ void ClientEnvironment::addSimpleObject(ClientSimpleObject *simple) m_simple_objects.push_back(simple); } +GenericCAO* ClientEnvironment::getGenericCAO(u16 id) +{ + ClientActiveObject *obj = getActiveObject(id); + if (obj && obj->getType() == ACTIVEOBJECT_TYPE_GENERIC) + return (GenericCAO*) obj; + else + return NULL; +} + ClientActiveObject* ClientEnvironment::getActiveObject(u16 id) { std::map::iterator n; diff --git a/src/environment.h b/src/environment.h index a25a12db3..983f09409 100644 --- a/src/environment.h +++ b/src/environment.h @@ -405,6 +405,8 @@ private: #ifndef SERVER #include "clientobject.h" +#include "content_cao.h" + class ClientSimpleObject; /* @@ -467,6 +469,7 @@ public: ActiveObjects */ + GenericCAO* getGenericCAO(u16 id); ClientActiveObject* getActiveObject(u16 id); /* diff --git a/src/game.cpp b/src/game.cpp index 903e4f85c..be4897d75 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3298,6 +3298,7 @@ void Game::updateCamera(VolatileRunFlags *flags, u32 busy_time, camera->toggleCameraMode(); playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST); + playercao->setChildrenVisible(camera->getCameraMode() > CAMERA_MODE_FIRST); } float full_punch_interval = playeritem_toolcap.full_punch_interval; From dd91b3d6fbc3a0b4b18b36b14864d703213dd622 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 20 Jun 2015 03:20:06 +0200 Subject: [PATCH 132/670] Generic CAO cleanups and renames for clarification * Use enum for GENERIC_CMD_* * Rename m_attachements to attachement_parent_ids (public member and clearer name) * Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO * USHRT_MAX + 1 buffer sizes to prevent overflows as @kahrl suggested * Remove unneccessary m_id from GenericCAO (shadowing protected superclass member for no reason) as @kahrl suggested --- src/content_cao.cpp | 15 +++++++-------- src/content_cao.h | 1 - src/environment.cpp | 2 +- src/environment.h | 2 +- src/genericobject.cpp | 2 +- src/genericobject.h | 24 +++++++++++++----------- src/mapblock.cpp | 4 ++-- src/network/networkprotocol.h | 1 + 8 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 4f1336d28..d82af9e57 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -543,7 +543,6 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env): // m_is_player(false), m_is_local_player(false), - m_id(0), // m_smgr(NULL), m_irr(NULL), @@ -747,7 +746,7 @@ ClientActiveObject* GenericCAO::getParent() { ClientActiveObject *obj = NULL; - u16 attached_id = m_env->m_attachements[getId()]; + u16 attached_id = m_env->attachement_parent_ids[getId()]; if ((attached_id != 0) && (attached_id != getId())) { @@ -764,12 +763,12 @@ void GenericCAO::removeFromScene(bool permanent) for(std::vector::iterator ci = m_children.begin(); ci != m_children.end(); ci++) { - if (m_env->m_attachements[*ci] == getId()) { - m_env->m_attachements[*ci] = 0; + if (m_env->attachement_parent_ids[*ci] == getId()) { + m_env->attachement_parent_ids[*ci] = 0; } } - m_env->m_attachements[getId()] = 0; + m_env->attachement_parent_ids[getId()] = 0; LocalPlayer* player = m_env->getLocalPlayer(); if (this == player->parent) { @@ -1111,7 +1110,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) for(std::vector::iterator ci = m_children.begin(); ci != m_children.end();) { - if (m_env->m_attachements[*ci] != getId()) { + if (m_env->attachement_parent_ids[*ci] != getId()) { ci = m_children.erase(ci); continue; } @@ -1669,9 +1668,9 @@ void GenericCAO::processMessage(const std::string &data) m_bone_position[bone] = core::vector2d(position, rotation); updateBonePosition(); - } else if (cmd == GENERIC_CMD_SET_ATTACHMENT) { + } else if (cmd == GENERIC_CMD_ATTACH_TO) { u16 parentID = readS16(is); - m_env->m_attachements[getId()] = parentID; + m_env->attachement_parent_ids[getId()] = parentID; GenericCAO *parentobj = m_env->getGenericCAO(parentID); if (parentobj) { diff --git a/src/content_cao.h b/src/content_cao.h index 813a41259..58c373389 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -60,7 +60,6 @@ private: std::string m_name; bool m_is_player; bool m_is_local_player; - int m_id; // Property-ish things ObjectProperties m_prop; // diff --git a/src/environment.cpp b/src/environment.cpp index 7d80619bc..09db886a8 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -2009,7 +2009,7 @@ ClientEnvironment::ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr, m_irr(irr) { char zero = 0; - memset(m_attachements, zero, sizeof(m_attachements)); + memset(attachement_parent_ids, zero, sizeof(attachement_parent_ids)); } ClientEnvironment::~ClientEnvironment() diff --git a/src/environment.h b/src/environment.h index 983f09409..b35ca4249 100644 --- a/src/environment.h +++ b/src/environment.h @@ -505,7 +505,7 @@ public: // Get event from queue. CEE_NONE is returned if queue is empty. ClientEnvEvent getClientEvent(); - u16 m_attachements[USHRT_MAX]; + u16 attachement_parent_ids[USHRT_MAX + 1]; std::list getPlayerNames() { return m_player_names; } diff --git a/src/genericobject.cpp b/src/genericobject.cpp index 78dc7fa91..5daba55ed 100644 --- a/src/genericobject.cpp +++ b/src/genericobject.cpp @@ -161,7 +161,7 @@ std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f posit { std::ostringstream os(std::ios::binary); // command - writeU8(os, GENERIC_CMD_SET_ATTACHMENT); + writeU8(os, GENERIC_CMD_ATTACH_TO); // parameters writeS16(os, parent_id); os< -#define GENERIC_CMD_SET_PROPERTIES 0 -#define GENERIC_CMD_UPDATE_POSITION 1 -#define GENERIC_CMD_SET_TEXTURE_MOD 2 -#define GENERIC_CMD_SET_SPRITE 3 -#define GENERIC_CMD_PUNCHED 4 -#define GENERIC_CMD_UPDATE_ARMOR_GROUPS 5 -#define GENERIC_CMD_SET_ANIMATION 6 -#define GENERIC_CMD_SET_BONE_POSITION 7 -#define GENERIC_CMD_SET_ATTACHMENT 8 -#define GENERIC_CMD_SET_PHYSICS_OVERRIDE 9 -#define GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES 10 +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 +}; #include "object_properties.h" std::string gob_cmd_set_properties(const ObjectProperties &prop); diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 9eb64a76e..39cac0b60 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -465,11 +465,11 @@ s16 MapBlock::getGroundLevel(v2s16 p2d) // sure we can handle all content ids. But it's absolutely worth it as it's // a speedup of 4 for one of the major time consuming functions on storing // mapblocks. -static content_t getBlockNodeIdMapping_mapping[USHRT_MAX]; +static content_t getBlockNodeIdMapping_mapping[USHRT_MAX + 1]; static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes, INodeDefManager *nodedef) { - memset(getBlockNodeIdMapping_mapping, 0xFF, USHRT_MAX * sizeof(content_t)); + memset(getBlockNodeIdMapping_mapping, 0xFF, (USHRT_MAX + 1) * sizeof(content_t)); std::set unknown_contents; content_t id_counter = 0; diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 09617c9d9..852f2ee03 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -129,6 +129,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 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 */ #define LATEST_PROTOCOL_VERSION 25 From d7190df07ec92067ab5f40086df84ab30994bf87 Mon Sep 17 00:00:00 2001 From: figec Date: Fri, 19 Jun 2015 19:04:11 +0300 Subject: [PATCH 133/670] More correct wrap_rows implementation --- src/util/string.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/util/string.h b/src/util/string.h index b4ce5743d..6980060e4 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -426,18 +426,12 @@ inline std::string wrap_rows(const std::string &from, { std::string to; - bool need_to_wrap = false; - size_t character_idx = 0; for (size_t i = 0; i < from.size(); i++) { - if (character_idx > 0 && character_idx % row_len == 0) - need_to_wrap = true; if (!IS_UTF8_MULTB_INNER(from[i])) { - // Wrap string if needed before next char started - if (need_to_wrap) { + // Wrap string after last inner byte of char + if (character_idx > 0 && character_idx % row_len == 0) to += '\n'; - need_to_wrap = false; - } character_idx++; } to += from[i]; From 70da8a940b054d0ad22168af47fed4b7c091914f Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 19 Jun 2015 00:17:03 +0100 Subject: [PATCH 134/670] Mapgen objects: Enable heatmap and humidmap for all biome api mapgens --- src/mapgen.cpp | 34 ++++++++++++++++++--------------- src/mapgen.h | 2 ++ src/mapgen_v5.cpp | 5 +++++ src/mapgen_v5.h | 3 --- src/mapgen_v7.cpp | 9 +++++++-- src/script/lua_api/l_mapgen.cpp | 27 +++++++++++++++----------- 6 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/mapgen.cpp b/src/mapgen.cpp index d1171e29d..7f7c4e240 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -67,33 +67,37 @@ FlagDesc flagdesc_gennotify[] = { Mapgen::Mapgen() { - generating = false; - id = -1; - seed = 0; - water_level = 0; - flags = 0; + generating = false; + id = -1; + seed = 0; + water_level = 0; + flags = 0; - vm = NULL; - ndef = NULL; - heightmap = NULL; - biomemap = NULL; + vm = NULL; + ndef = NULL; + heightmap = NULL; + biomemap = NULL; + heatmap = NULL; + humidmap = NULL; } Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge) : gennotify(emerge->gen_notify_on, &emerge->gen_notify_on_deco_ids) { - generating = false; - id = mapgenid; - seed = (int)params->seed; - water_level = params->water_level; - flags = params->flags; - csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE); + generating = false; + id = mapgenid; + seed = (int)params->seed; + water_level = params->water_level; + flags = params->flags; + csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE); vm = NULL; ndef = NULL; heightmap = NULL; biomemap = NULL; + heatmap = NULL; + humidmap = NULL; } diff --git a/src/mapgen.h b/src/mapgen.h index a1cc8af53..74fca4f5a 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -152,6 +152,8 @@ public: u32 blockseed; s16 *heightmap; u8 *biomemap; + float *heatmap; + float *humidmap; v3s16 csize; GenerateNotifier gennotify; diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index f748e7b86..4d1c0df1d 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -58,6 +58,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) this->biomemap = new u8[csize.X * csize.Z]; this->heightmap = new s16[csize.X * csize.Z]; + this->heatmap = NULL; + this->humidmap = NULL; MapgenV5Params *sp = (MapgenV5Params *)params->sparams; this->spflags = sp->spflags; @@ -341,6 +343,9 @@ void MapgenV5::calculateNoise() noise_heat->result[i] += noise_heat_blend->result[i]; noise_humidity->result[i] += noise_humidity_blend->result[i]; } + + heatmap = noise_heat->result; + humidmap = noise_humidity->result; //printf("calculateNoise: %dus\n", t.stop()); } diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index 911975e7f..a6fdc2b2b 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -24,9 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #define LARGE_CAVE_DEPTH -256 -/////////////////// Mapgen V5 flags -//#define MGV5_ 0x01 - class BiomeManager; extern FlagDesc flagdesc_mapgen_v5[]; diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 6e97c2c16..c32bf3882 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -59,8 +59,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) this->ystride = csize.X; this->zstride = csize.X * (csize.Y + 2); - this->biomemap = new u8[csize.X * csize.Z]; - this->heightmap = new s16[csize.X * csize.Z]; + this->biomemap = new u8[csize.X * csize.Z]; + this->heightmap = new s16[csize.X * csize.Z]; + this->heatmap = NULL; + this->humidmap = NULL; this->ridge_heightmap = new s16[csize.X * csize.Z]; MapgenV7Params *sp = (MapgenV7Params *)params->sparams; @@ -376,6 +378,9 @@ void MapgenV7::calculateNoise() noise_heat->result[i] += noise_heat_blend->result[i]; noise_humidity->result[i] += noise_humidity_blend->result[i]; } + + heatmap = noise_heat->result; + humidmap = noise_humidity->result; //printf("calculateNoise: %dus\n", t.stop()); } diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 1a462adf7..2d67e2f29 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -510,21 +510,26 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L) return 1; } - case MGOBJ_HEATMAP: { // Mapgen V7 specific objects - case MGOBJ_HUMIDMAP: - if (strcmp(emerge->params.mg_name.c_str(), "v7")) - return 0; - - MapgenV7 *mgv7 = (MapgenV7 *)mg; - - float *arr = (mgobj == MGOBJ_HEATMAP) ? - mgv7->noise_heat->result : mgv7->noise_humidity->result; - if (!arr) + case MGOBJ_HEATMAP: { + if (!mg->heatmap) return 0; lua_newtable(L); for (size_t i = 0; i != maplen; i++) { - lua_pushnumber(L, arr[i]); + lua_pushnumber(L, mg->heatmap[i]); + lua_rawseti(L, -2, i + 1); + } + + return 1; + } + + case MGOBJ_HUMIDMAP: { + if (!mg->humidmap) + return 0; + + lua_newtable(L); + for (size_t i = 0; i != maplen; i++) { + lua_pushnumber(L, mg->humidmap[i]); lua_rawseti(L, -2, i + 1); } From 14f4cd0ef91d87bf8ec40376b500579cabeb4358 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 20 Jun 2015 06:58:07 +0200 Subject: [PATCH 135/670] Small CAO improvements -> remove the old parent as @kahrl suggested -> use indices no iterator as @kwolekr suggested --- src/content_cao.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index d82af9e57..01be1422c 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -728,9 +728,8 @@ scene::IBillboardSceneNode* GenericCAO::getSpriteSceneNode() void GenericCAO::setChildrenVisible(bool toset) { - for (std::vector::iterator ci = m_children.begin(); - ci != m_children.end(); ci++) { - GenericCAO *obj = m_env->getGenericCAO(*ci); + for (std::vector::size_type i = 0; i < m_children.size(); i++) { + GenericCAO *obj = m_env->getGenericCAO(m_children[i]); if (obj) { obj->setVisible(toset); } @@ -760,11 +759,10 @@ void GenericCAO::removeFromScene(bool permanent) // Should be true when removing the object permanently and false when refreshing (eg: updating visuals) if((m_env != NULL) && (permanent)) { - for(std::vector::iterator ci = m_children.begin(); - ci != m_children.end(); ci++) - { - if (m_env->attachement_parent_ids[*ci] == getId()) { - m_env->attachement_parent_ids[*ci] = 0; + for (std::vector::size_type i = 0; i < m_children.size(); i++) { + u16 ci = m_children[i]; + if (m_env->attachement_parent_ids[ci] == getId()) { + m_env->attachement_parent_ids[ci] = 0; } } @@ -1127,11 +1125,9 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) addToScene(m_smgr, m_gamedef->tsrc(), m_irr); // Attachments, part 2: Now that the parent has been refreshed, put its attachments back - for(std::vector::iterator ci = m_children.begin(); - ci != m_children.end(); ci++) - { + for (std::vector::size_type i = 0; i < m_children.size(); i++) { // Get the object of the child - ClientActiveObject *obj = m_env->getActiveObject(*ci); + ClientActiveObject *obj = m_env->getActiveObject(m_children[i]); if (obj) obj->setAttachments(); } @@ -1670,6 +1666,11 @@ void GenericCAO::processMessage(const std::string &data) updateBonePosition(); } else if (cmd == GENERIC_CMD_ATTACH_TO) { u16 parentID = readS16(is); + u16 oldparent = m_env->attachement_parent_ids[getId()]; + if (oldparent) { + m_children.erase(std::remove(m_children.begin(), m_children.end(), + getId()), m_children.end()); + } m_env->attachement_parent_ids[getId()] = parentID; GenericCAO *parentobj = m_env->getGenericCAO(parentID); From a31d08be5533482639b96fae5696f738f9eb9e78 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 20 Jun 2015 07:39:28 +0200 Subject: [PATCH 136/670] Android: use loop inside makefile to spare repetition --- build/android/Makefile | 51 ++++++++---------------------------------- 1 file changed, 9 insertions(+), 42 deletions(-) diff --git a/build/android/Makefile b/build/android/Makefile index 798d56037..612fb50e3 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -615,7 +615,7 @@ clean_curl : curl_binary: @if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \ - echo "curl sources missing, downloading..."; \ + echo "curl binary missing, downloading..."; \ mkdir -p ${ROOT}/deps; \ cd deps; \ wget http://curl.haxx.se/gknw.net/7.34.0/dist-android/curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\ @@ -696,47 +696,14 @@ clean_sqlite3: $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB) @mkdir -p ${ROOT}/deps; \ - LAST_MODIF=$$(find ${ROOT}/../../builtin -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../builtin/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - echo builtin changed $$LAST_MODIF; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../client -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../client/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../doc -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../doc/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../fonts -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../fonts/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../games -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../games/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../mods -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../mods/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../po -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../po/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../textures -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../textures/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ + for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \ + LAST_MODIF=$$(find ${ROOT}/../../${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \ + touch ${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; \ From 53efe2ef4272c4ea8c347059e096f1ebd210d9a2 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 21 Jun 2015 00:11:09 +0200 Subject: [PATCH 137/670] Remove textures vertical offset. Fix for area enabling parallax. --- .../shaders/nodes_shader/opengl_fragment.glsl | 8 ++++---- .../shaders/nodes_shader/opengl_vertex.glsl | 20 +++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 066e49658..0e84eacf9 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -8,7 +8,7 @@ uniform vec3 eyePosition; varying vec3 vPosition; varying vec3 worldPosition; -varying float generate_heightmaps; +varying float area_enable_parallax; varying vec3 eyeVec; varying vec3 tsEyeVec; @@ -95,7 +95,7 @@ void main (void) vec3 eyeRay = normalize(tsEyeVec); #if PARALLAX_OCCLUSION_MODE == 0 // Parallax occlusion with slope information - if (normalTexturePresent) { + if (normalTexturePresent && area_enable_parallax > 0.0) { const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; for(int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { @@ -106,12 +106,12 @@ void main (void) #endif #if PARALLAX_OCCLUSION_MODE == 1 // Relief mapping - if (normalTexturePresent) { + if (normalTexturePresent && area_enable_parallax > 0.0) { vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; float dist = find_intersection(uv, ds); uv += dist * ds; #endif - } else if (generate_heightmaps > 0.0) { + } else if (area_enable_parallax > 0.0) { vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; float dist = find_intersectionRGB(uv, ds); uv += dist * ds; diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 42a5f6cbf..5c4d46be6 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -14,7 +14,7 @@ varying vec3 eyeVec; varying vec3 lightVec; varying vec3 tsEyeVec; varying vec3 tsLightVec; -varying float generate_heightmaps; +varying float area_enable_parallax; const float e = 2.718281828459; const float BS = 10.0; @@ -35,12 +35,16 @@ float smoothTriangleWave(float x) void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - gl_TexCoord[0].y += 0.008; - + //TODO: make offset depending on view angle and parallax uv displacement + //thats for textures that doesnt align vertically, like dirt with grass + //gl_TexCoord[0].y += 0.008; + + //Allow parallax/relief mapping only for certain kind of nodes + //Variable is also used to control area of the effect #if ((DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) && GENERATE_NORMALMAPS) - generate_heightmaps = 1.0; + area_enable_parallax = 1.0; #else - generate_heightmaps = 0.0; + area_enable_parallax = 0.0; #endif #if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER) @@ -89,9 +93,9 @@ void main(void) worldPosition = (mWorld * gl_Vertex).xyz; // Don't generate heightmaps when too far from the eye - float dist = distance (worldPosition, eyePosition); - if (dist > 100.00) { - generate_heightmaps = 0.0; + float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); + if (dist > 100.0) { + area_enable_parallax = 0.0; } vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); From 622918d8a86ab2bb8a6ef1211b9a2ed1ad4c9b96 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 15 Jun 2015 05:30:44 +0100 Subject: [PATCH 138/670] Mgv7: Edit noise parameters. Fewer octaves, larger spreads. --- minetest.conf.example | 6 +++--- src/mapgen_v7.cpp | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 2d533b91e..d1f1de6fb 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -566,12 +566,12 @@ #mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 #mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 -#mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 6, 0.7, 2.0 +#mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0 #mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 -#mgv7_np_terrain_persist = 0.6, 0.1, (500, 500, 500), 539, 3, 0.6, 2.0 +#mgv7_np_terrain_persist = 0.6, 0.12, (2000, 2000, 2000), 539, 3, 0.5, 2.0 #mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.69, 2.0 #mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 4, 0.7, 2.0 -#mgv7_np_mount_height = 184, 72, (500, 500, 500), 72449, 4, 0.6, 2.0 +#mgv7_np_mount_height = 184, 72, (1000, 1000, 1000), 72449, 3, 0.5, 2.0 #mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 #mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.68, 2.0 #mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index c32bf3882..b5d1463db 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -147,17 +147,17 @@ MapgenV7Params::MapgenV7Params() { spflags = MGV7_MOUNTAINS | MGV7_RIDGES; - np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 6, 0.7, 2.0); - np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); - np_terrain_persist = NoiseParams(0.6, 0.1, v3f(500, 500, 500), 539, 3, 0.6, 2.0); - np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.69, 2.0); - np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 4, 0.7, 2.0); - np_mount_height = NoiseParams(184, 72, v3f(500, 500, 500), 72449, 4, 0.6, 2.0); - np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0); - np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.68, 2.0); - np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); - np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); - np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); + np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 5, 0.6, 2.0); + np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); + np_terrain_persist = NoiseParams(0.6, 0.12, v3f(2000, 2000, 2000), 539, 3, 0.5, 2.0); + np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.69, 2.0); + np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 4, 0.7, 2.0); + np_mount_height = NoiseParams(184, 72, v3f(1000, 1000, 1000), 72449, 3, 0.5, 2.0); + np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0); + np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.68, 2.0); + np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); + np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); + np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); } From 660fa516bfe774c77947c47a97154d6f069f414d Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Sat, 21 Feb 2015 23:38:53 +0200 Subject: [PATCH 139/670] Fix some issues with animations, and allow non-looped animations to be defined --- doc/lua_api.txt | 4 ++-- src/content_cao.cpp | 18 ++++++++++++++++-- src/content_cao.h | 1 + src/content_sao.cpp | 26 ++++++++++++++++++-------- src/content_sao.h | 10 ++++++---- src/genericobject.cpp | 4 +++- src/genericobject.h | 2 +- src/script/lua_api/l_object.cpp | 13 +++++++++---- src/script/lua_api/l_object.h | 2 +- src/serverobject.h | 4 ++-- 10 files changed, 59 insertions(+), 25 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index a65c53c1a..d2505284a 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2434,8 +2434,8 @@ This is basically a reference to a C++ `ServerActiveObject` * `set_wielded_item(item)`: replaces the wielded item, returns `true` if successful * `set_armor_groups({group1=rating, group2=rating, ...})` * `get_armor_groups()`: returns a table with the armor group ratings -* `set_animation({x=1,y=1}, frame_speed=15, frame_blend=0)` -* `get_animation()`: returns range, frame_speed and frame_blend +* `set_animation({x=1,y=1}, frame_speed=15, frame_blend=0, frame_loop=true)` +* `get_animation()`: returns range, frame_speed, frame_blend and frame_loop * `set_attach(parent, bone, position, rotation)` * `bone`: string * `position`: `{x=num, y=num, z=num}` (relative) diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 01be1422c..d38cb892a 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -565,6 +565,7 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env): m_animation_range(v2s32(0,0)), m_animation_speed(15), m_animation_blend(0), + m_animation_loop(true), m_bone_position(std::map >()), m_attachment_bone(""), m_attachment_position(v3f(0,0,0)), @@ -1465,9 +1466,18 @@ void GenericCAO::updateAnimation() { if(m_animated_meshnode == NULL) return; - m_animated_meshnode->setFrameLoop(m_animation_range.X, m_animation_range.Y); - m_animated_meshnode->setAnimationSpeed(m_animation_speed); + + if (m_animated_meshnode->getStartFrame() != m_animation_range.X || + m_animated_meshnode->getEndFrame() != m_animation_range.Y) + m_animated_meshnode->setFrameLoop(m_animation_range.X, m_animation_range.Y); + if (m_animated_meshnode->getAnimationSpeed() != m_animation_speed) + m_animated_meshnode->setAnimationSpeed(m_animation_speed); m_animated_meshnode->setTransitionTime(m_animation_blend); +// Requires Irrlicht 1.8 or greater +#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR > 1 + if (m_animated_meshnode->getLoopMode() != m_animation_loop) + m_animated_meshnode->setLoopMode(m_animation_loop); +#endif } void GenericCAO::updateBonePosition() @@ -1633,6 +1643,8 @@ void GenericCAO::processMessage(const std::string &data) m_animation_range = v2s32((s32)range.X, (s32)range.Y); m_animation_speed = readF1000(is); m_animation_blend = readF1000(is); + // these are sent inverted so we get true when the server sends nothing + m_animation_loop = !readU8(is); updateAnimation(); } else { LocalPlayer *player = m_env->getLocalPlayer(); @@ -1641,6 +1653,8 @@ void GenericCAO::processMessage(const std::string &data) m_animation_range = v2s32((s32)range.X, (s32)range.Y); m_animation_speed = readF1000(is); m_animation_blend = readF1000(is); + // these are sent inverted so we get true when the server sends nothing + m_animation_loop = !readU8(is); } // update animation only if local animations present // and received animation is unknown (except idle animation) diff --git a/src/content_cao.h b/src/content_cao.h index 58c373389..1e526d1cd 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -86,6 +86,7 @@ private: v2s32 m_animation_range; int m_animation_speed; int m_animation_blend; + bool m_animation_loop; std::map > m_bone_position; // stores position and rotation for each bone name std::string m_attachment_bone; v3f m_attachment_position; diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 984d2ffa3..386b7e070 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -136,6 +136,7 @@ LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos, m_armor_groups_sent(false), m_animation_speed(0), m_animation_blend(0), + m_animation_loop(true), m_animation_sent(false), m_bone_position_sent(false), m_attachment_parent_id(0), @@ -324,7 +325,8 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) if(m_animation_sent == false){ m_animation_sent = true; - std::string str = gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend); + 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); @@ -366,7 +368,8 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version) writeU8(os, 4 + m_bone_position.size()); // number of messages stuffed in here os< >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){ os< >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){ os< > m_bone_position; @@ -197,8 +198,8 @@ public: void setBreath(u16 breath); void setArmorGroups(const ItemGroupList &armor_groups); ItemGroupList getArmorGroups(); - void setAnimation(v2f frame_range, float frame_speed, float frame_blend); - void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend); + 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 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); @@ -312,6 +313,7 @@ private: v2f m_animation_range; float m_animation_speed; float m_animation_blend; + bool m_animation_loop; bool m_animation_sent; std::map > m_bone_position; // Stores position and rotation for each bone name diff --git a/src/genericobject.cpp b/src/genericobject.cpp index 5daba55ed..90e8cf3d3 100644 --- a/src/genericobject.cpp +++ b/src/genericobject.cpp @@ -133,7 +133,7 @@ std::string gob_cmd_update_physics_override(float physics_override_speed, float return os.str(); } -std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend) +std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop) { std::ostringstream os(std::ios::binary); // command @@ -142,6 +142,8 @@ std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_ writeV2F1000(os, frames); writeF1000(os, frame_speed); writeF1000(os, frame_blend); + // these are sent inverted so we get true when the server sends nothing + writeU8(os, !frame_loop); return os.str(); } diff --git a/src/genericobject.h b/src/genericobject.h index b36a3830d..b92570831 100644 --- a/src/genericobject.h +++ b/src/genericobject.h @@ -69,7 +69,7 @@ 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); -std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend); +std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop); std::string gob_cmd_update_bone_position(std::string bone, v3f position, v3f rotation); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 48d054dcd..4b1cc39fb 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -449,7 +449,7 @@ int ObjectRef::l_get_physics_override(lua_State *L) return 1; } -// set_animation(self, frame_range, frame_speed, frame_blend) +// set_animation(self, frame_range, frame_speed, frame_blend, frame_loop) int ObjectRef::l_set_animation(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -466,7 +466,10 @@ int ObjectRef::l_set_animation(lua_State *L) float frame_blend = 0; if(!lua_isnil(L, 4)) frame_blend = lua_tonumber(L, 4); - co->setAnimation(frames, frame_speed, frame_blend); + bool frame_loop = true; + if(lua_isboolean(L, 5)) + frame_loop = lua_toboolean(L, 5); + co->setAnimation(frames, frame_speed, frame_blend, frame_loop); return 0; } @@ -482,12 +485,14 @@ int ObjectRef::l_get_animation(lua_State *L) v2f frames = v2f(1,1); float frame_speed = 15; float frame_blend = 0; - co->getAnimation(&frames, &frame_speed, &frame_blend); + bool frame_loop = true; + co->getAnimation(&frames, &frame_speed, &frame_blend, &frame_loop); push_v2f(L, frames); lua_pushnumber(L, frame_speed); lua_pushnumber(L, frame_blend); - return 3; + lua_pushboolean(L, frame_loop); + return 4; } // set_local_animation(self, {stand/idle}, {walk}, {dig}, {walk+dig}, frame_speed) diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index 02bb06ecc..9e4a62058 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -111,7 +111,7 @@ private: // get_physics_override(self) static int l_get_physics_override(lua_State *L); - // set_animation(self, frame_range, frame_speed, frame_blend) + // set_animation(self, frame_range, frame_speed, frame_blend, frame_loop) static int l_set_animation(lua_State *L); // get_animation(self) diff --git a/src/serverobject.h b/src/serverobject.h index 5de1071d1..7204fe3ae 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -151,9 +151,9 @@ public: { return ItemGroupList(); } 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) + 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) + virtual void getAnimation(v2f *frames, float *frame_speed, float *frame_blend, bool *frame_loop) {} virtual void setBonePosition(const std::string &bone, v3f position, v3f rotation) {} From 0b76e85a717a05b608d09618bb48434510f0ae27 Mon Sep 17 00:00:00 2001 From: Zheyu Shen Date: Sat, 20 Jun 2015 20:02:38 +0800 Subject: [PATCH 140/670] Update Chinese translation --- po/zh_CN/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 1ce307b84..efc5b7f6f 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -102,7 +102,7 @@ msgstr "从minetest.net下载一个" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." -msgstr "警告: 甚微发展测试只是为了开发人员" +msgstr "警告: 最小化开发测试为开发人员所使用。" #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" @@ -223,7 +223,7 @@ msgstr "安装" #: builtin/mainmenu/store.lua:522 msgid "Close store" -msgstr "关闭店" +msgstr "关闭商店" #: builtin/mainmenu/store.lua:530 msgid "Page $1 of $2" @@ -436,7 +436,7 @@ msgstr "自由触摸目标" #: builtin/mainmenu/tab_settings.lua:187 msgid "Touchthreshold (px)" -msgstr "" +msgstr "触控阈值(像素)" #: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 #, fuzzy @@ -449,7 +449,7 @@ msgstr "产生法线贴图" #: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 msgid "Parallax Occlusion" -msgstr "" +msgstr "视差贴图" #: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 msgid "Waving Water" @@ -517,7 +517,7 @@ msgstr "物品材质..." #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" -msgstr "" +msgstr "yes" #: src/game.cpp:1063 msgid "Respawn" From 17ba584fe254eeaee3489cc20e03810a59f3ef9b Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Tue, 2 Jun 2015 20:30:04 +0200 Subject: [PATCH 141/670] Fix bug when craft input isn't replaced --- doc/lua_api.txt | 2 + src/craftdef.cpp | 59 ++++++++++++--------- src/craftdef.h | 20 +++++--- src/inventorymanager.cpp | 93 ++++++++++++++++++++++++---------- src/inventorymanager.h | 1 + src/script/lua_api/l_craft.cpp | 9 +++- src/server.cpp | 3 +- 7 files changed, 128 insertions(+), 59 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index d2505284a..95b514a92 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2077,6 +2077,8 @@ and `minetest.auth_reload` call the authetification handler. `{ stack1, stack2, stack3, stack4, stack 5, stack 6, stack 7, stack 8, stack 9 }` * `output.item` = `ItemStack`, if unsuccessful: empty `ItemStack` * `output.time` = a number, if unsuccessful: `0` + * `output.replacements` = list of `ItemStack`s that couldn't be placed in + `decremented_input.items` * `decremented_input` = like `input` * `minetest.get_craft_recipe(output)`: returns input * returns last registered recipe for output item (node) diff --git a/src/craftdef.cpp b/src/craftdef.cpp index 8c0e91690..cc0e83be7 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -199,6 +199,7 @@ static void craftDecrementInput(CraftInput &input, IGameDef *gamedef) // Example: if replacements contains the pair ("bucket:bucket_water", "bucket:bucket_empty"), // a water bucket will not be removed but replaced by an empty bucket. static void craftDecrementOrReplaceInput(CraftInput &input, + std::vector &output_replacements, const CraftReplacements &replacements, IGameDef *gamedef) { @@ -213,26 +214,30 @@ static void craftDecrementOrReplaceInput(CraftInput &input, for (std::vector::iterator it = input.items.begin(); it != input.items.end(); it++) { - if (it->count == 1) { - // Find an appropriate replacement - bool found_replacement = false; - for (std::vector >::iterator - j = pairs.begin(); - j != pairs.end(); j++) { - if (it->name == craftGetItemName(j->first, gamedef)) { + // Find an appropriate replacement + bool found_replacement = false; + for (std::vector >::iterator + j = pairs.begin(); + j != pairs.end(); j++) { + if (it->name == craftGetItemName(j->first, gamedef)) { + if (it->count == 1) { it->deSerialize(j->second, gamedef->idef()); found_replacement = true; pairs.erase(j); break; + } else { + ItemStack rep; + rep.deSerialize(j->second, gamedef->idef()); + it->remove(1); + found_replacement = true; + output_replacements.push_back(rep); + break; } } - // No replacement was found, simply decrement count to zero - if (!found_replacement) - it->remove(1); - } else if (it->count >= 2) { - // Ignore replacements for items with count >= 2 - it->remove(1); } + // No replacement was found, simply decrement count to zero + if (!found_replacement) + it->remove(1); } } @@ -408,9 +413,10 @@ CraftInput CraftDefinitionShaped::getInput(const CraftOutput &output, IGameDef * return CraftInput(CRAFT_METHOD_NORMAL,width,craftGetItems(recipe,gamedef)); } -void CraftDefinitionShaped::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionShaped::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionShaped::getHashType() const @@ -529,9 +535,10 @@ CraftInput CraftDefinitionShapeless::getInput(const CraftOutput &output, IGameDe return CraftInput(CRAFT_METHOD_NORMAL, 0, craftGetItems(recipe, gamedef)); } -void CraftDefinitionShapeless::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionShapeless::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionShapeless::getHashType() const @@ -661,7 +668,8 @@ CraftInput CraftDefinitionToolRepair::getInput(const CraftOutput &output, IGameD return CraftInput(CRAFT_METHOD_COOKING, additional_wear, stack); } -void CraftDefinitionToolRepair::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionToolRepair::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { craftDecrementInput(input, gamedef); } @@ -720,9 +728,10 @@ CraftInput CraftDefinitionCooking::getInput(const CraftOutput &output, IGameDef return CraftInput(CRAFT_METHOD_COOKING,cooktime,craftGetItems(rec,gamedef)); } -void CraftDefinitionCooking::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionCooking::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionCooking::getHashType() const @@ -811,9 +820,10 @@ CraftInput CraftDefinitionFuel::getInput(const CraftOutput &output, IGameDef *ga return CraftInput(CRAFT_METHOD_COOKING,(int)burntime,craftGetItems(rec,gamedef)); } -void CraftDefinitionFuel::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionFuel::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionFuel::getHashType() const @@ -871,7 +881,8 @@ public: } virtual bool getCraftResult(CraftInput &input, CraftOutput &output, - bool decrementInput, IGameDef *gamedef) const + std::vector &output_replacement, bool decrementInput, + IGameDef *gamedef) const { output.item = ""; output.time = 0; @@ -922,7 +933,7 @@ public: // Get output, then decrement input (if requested) output = def->getOutput(input, gamedef); if (decrementInput) - def->decrementInput(input, gamedef); + def->decrementInput(input, output_replacement, gamedef); /*errorstream << "Check RETURNS TRUE" << std::endl;*/ return true; } diff --git a/src/craftdef.h b/src/craftdef.h index f62ad3313..cebb2d7ae 100644 --- a/src/craftdef.h +++ b/src/craftdef.h @@ -150,7 +150,8 @@ public: // the inverse of the above virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const=0; // Decreases count of every input item - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const=0; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const=0; virtual CraftHashType getHashType() const = 0; virtual u64 getHash(CraftHashType type) const = 0; @@ -187,7 +188,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -235,7 +237,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -278,7 +281,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const { return CRAFT_HASH_TYPE_COUNT; } virtual u64 getHash(CraftHashType type) const { return 2; } @@ -320,7 +324,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -365,7 +370,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -398,6 +404,7 @@ public: // The main crafting function virtual bool getCraftResult(CraftInput &input, CraftOutput &output, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) const=0; virtual std::vector getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const=0; @@ -414,6 +421,7 @@ public: // The main crafting function virtual bool getCraftResult(CraftInput &input, CraftOutput &output, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) const=0; virtual std::vector getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const=0; diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index c3a9576f9..640e3395b 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -691,72 +691,112 @@ ICraftAction::ICraftAction(std::istream &is) craft_inv.deSerialize(ts); } -void ICraftAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) +void ICraftAction::apply(InventoryManager *mgr, + ServerActiveObject *player, IGameDef *gamedef) { Inventory *inv_craft = mgr->getInventory(craft_inv); - if(!inv_craft){ - infostream<<"ICraftAction::apply(): FAIL: inventory not found: " - <<"craft_inv=\""<getList("craft"); InventoryList *list_craftresult = inv_craft->getList("craftresult"); + InventoryList *list_main = inv_craft->getList("main"); /* If a list doesn't exist or the source item doesn't exist */ - if(!list_craft){ - infostream<<"ICraftAction::apply(): FAIL: craft list not found: " - <<"craft_inv=\""<getSize() < 1){ - infostream<<"ICraftAction::apply(): FAIL: craftresult list too short: " - <<"craft_inv=\""<getSize() < 1) { + infostream << "ICraftAction::apply(): FAIL: craftresult list too short: " + << "craft_inv=\"" << craft_inv.dump() << "\"" << std::endl; return; } ItemStack crafted; ItemStack craftresultitem; int count_remaining = count; - getCraftingResult(inv_craft, crafted, false, gamedef); + std::vector output_replacements; + getCraftingResult(inv_craft, crafted, output_replacements, false, gamedef); PLAYER_TO_SA(player)->item_CraftPredict(crafted, player, list_craft, craft_inv); bool found = !crafted.empty(); - while(found && list_craftresult->itemFits(0, crafted)) - { + while (found && list_craftresult->itemFits(0, crafted)) { InventoryList saved_craft_list = *list_craft; - + + std::vector temp; // Decrement input and add crafting output - getCraftingResult(inv_craft, crafted, true, gamedef); + getCraftingResult(inv_craft, crafted, temp, true, gamedef); PLAYER_TO_SA(player)->item_OnCraft(crafted, player, &saved_craft_list, craft_inv); list_craftresult->addItem(0, crafted); mgr->setInventoryModified(craft_inv); - actionstream<getDescription() - <<" crafts " - <getItemDefManager(); + for (std::vector::iterator it = temp.begin(); + it != temp.end(); it++) { + for (std::vector::iterator jt = output_replacements.begin(); + jt != output_replacements.end(); jt++) { + if (it->name == jt->name) { + *it = jt->addItem(*it, itemdef); + if (it->empty()) + continue; + } + } + output_replacements.push_back(*it); + } + + actionstream << player->getDescription() + << " crafts " + << crafted.getItemString() + << std::endl; // Decrement counter - if(count_remaining == 1) + if (count_remaining == 1) break; - else if(count_remaining > 1) + else if (count_remaining > 1) count_remaining--; // Get next crafting result - found = getCraftingResult(inv_craft, crafted, false, gamedef); + found = getCraftingResult(inv_craft, crafted, temp, false, gamedef); PLAYER_TO_SA(player)->item_CraftPredict(crafted, player, list_craft, craft_inv); found = !crafted.empty(); } + // Put the replacements in the inventory or drop them on the floor, if + // the invenotry is full + for (std::vector::iterator it = output_replacements.begin(); + it != output_replacements.end(); it++) { + if (list_main) + *it = list_main->addItem(*it); + if (it->empty()) + continue; + u16 count = it->count; + do { + PLAYER_TO_SA(player)->item_OnDrop(*it, player, + player->getBasePosition() + v3f(0,1,0)); + if (count >= it->count) { + errorstream << "Couldn't drop replacement stack " << + it->getItemString() << " because drop loop didn't " + "decrease count." << std::endl; + + break; + } + } while (!it->empty()); + } + infostream<<"ICraftAction::apply(): crafted " <<" craft_inv=\""< &output_replacements, bool decrementInput, IGameDef *gamedef) { DSTACK(__FUNCTION_NAME); @@ -792,7 +833,7 @@ bool getCraftingResult(Inventory *inv, ItemStack& result, // Find out what is crafted and add it to result item slot CraftOutput co; bool found = gamedef->getCraftDefManager()->getCraftResult( - ci, co, decrementInput, gamedef); + ci, co, output_replacements, decrementInput, gamedef); if(found) result.deSerialize(co.item, gamedef->getItemDefManager()); diff --git a/src/inventorymanager.h b/src/inventorymanager.h index 39cc6e50f..a255e979a 100644 --- a/src/inventorymanager.h +++ b/src/inventorymanager.h @@ -242,6 +242,7 @@ struct ICraftAction : public InventoryAction // Crafting helper bool getCraftingResult(Inventory *inv, ItemStack& result, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef); #endif diff --git a/src/script/lua_api/l_craft.cpp b/src/script/lua_api/l_craft.cpp index b321fb32f..f59487727 100644 --- a/src/script/lua_api/l_craft.cpp +++ b/src/script/lua_api/l_craft.cpp @@ -303,18 +303,23 @@ int ModApiCraft::l_get_craft_result(lua_State *L) ICraftDefManager *cdef = gdef->cdef(); CraftInput input(method, width, items); CraftOutput output; - bool got = cdef->getCraftResult(input, output, true, gdef); + std::vector output_replacements; + bool got = cdef->getCraftResult(input, output, output_replacements, true, gdef); lua_newtable(L); // output table - if(got){ + if (got) { ItemStack item; item.deSerialize(output.item, gdef->idef()); LuaItemStack::create(L, item); lua_setfield(L, -2, "item"); setintfield(L, -1, "time", output.time); + push_items(L, output_replacements); + lua_setfield(L, -2, "replacements"); } else { LuaItemStack::create(L, ItemStack()); lua_setfield(L, -2, "item"); setintfield(L, -1, "time", 0); + lua_newtable(L); + lua_setfield(L, -2, "replacements"); } lua_newtable(L); // decremented input table lua_pushstring(L, method_s.c_str()); diff --git a/src/server.cpp b/src/server.cpp index 7cd92ed65..52bc9867a 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2698,7 +2698,8 @@ void Server::UpdateCrafting(Player* player) ItemStack preview; InventoryLocation loc; loc.setPlayer(player->getName()); - getCraftingResult(&player->inventory, preview, false, this); + std::vector output_replacements; + getCraftingResult(&player->inventory, preview, output_replacements, false, this); m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(), (&player->inventory)->getList("craft"), loc); // Put the new preview in From 6f8bdda90edce0b156ca8df25dea25cc6d7ad49c Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 23 Jun 2015 15:04:14 +0200 Subject: [PATCH 142/670] Fix string conversion error message --- src/util/string.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/string.cpp b/src/util/string.cpp index e847f3a8e..36a9481c5 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -116,7 +116,7 @@ std::string wide_to_utf8(const std::wstring &input) if (!convert("UTF-8", "WCHAR_T", outbuf, outbuf_size, inbuf, inbuf_size)) { infostream << "Couldn't convert wstring 0x" << hex_encode(inbuf, inbuf_size) - << " into wstring" << std::endl; + << " into UTF-8 string" << std::endl; delete[] inbuf; delete[] outbuf; return ""; From bc55ef337cc83a5c31d4fdafba352a7a26921900 Mon Sep 17 00:00:00 2001 From: Craig Davison Date: Tue, 23 Jun 2015 15:46:35 +0100 Subject: [PATCH 143/670] Use actionstream instead of errorstream when failing to emerge player --- src/network/serverpackethandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 4633aba86..0a6ef4fa8 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -576,7 +576,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) static_cast(m_env->getPlayer(playername)); if (player && player->peer_id != 0) { - errorstream << "Server: " << playername << ": Failed to emerge player" + actionstream << "Server: " << playername << ": Failed to emerge player" << " (player allocated to an another client)" << std::endl; DenyAccess_Legacy(pkt->getPeerId(), L"Another client is connected with this " L"name. If your client closed unexpectedly, try again in " From 2c1fd29884adec17564d39c0f7792633cbc55f9a Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 20 Jun 2015 12:55:48 +0200 Subject: [PATCH 144/670] Add MoveSomewhere inventory action Improve shift+click experience --- src/client.h | 3 ++ src/guiFormSpecMenu.cpp | 55 ++++++++++++++--------- src/inventory.cpp | 47 +++++++++++++++++--- src/inventory.h | 8 +++- src/inventorymanager.cpp | 96 ++++++++++++++++++++++++++++++---------- src/inventorymanager.h | 31 +++++++++---- 6 files changed, 180 insertions(+), 60 deletions(-) diff --git a/src/client.h b/src/client.h index 56f040909..daeef3985 100644 --- a/src/client.h +++ b/src/client.h @@ -493,6 +493,9 @@ public: bool mediaReceived() { return m_media_downloader == NULL; } + u8 getProtoVersion() + { return m_proto_ver; } + float mediaReceiveProgress(); void afterContentReceived(IrrlichtDevice *device); diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index c11fc303a..f16830619 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -3384,31 +3384,42 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) break; ItemStack stack_from = list_from->getItem(s.i); assert(shift_move_amount <= stack_from.count); - - // find a place (or more than one) to add the new item - u32 ilt_size = list_to->getSize(); - ItemStack leftover; - for (u32 slot_to = 0; slot_to < ilt_size - && shift_move_amount > 0; slot_to++) { - list_to->itemFits(slot_to, stack_from, &leftover); - if (leftover.count < stack_from.count) { - infostream << "Handing IACTION_MOVE to manager" << std::endl; - IMoveAction *a = new IMoveAction(); - a->count = MYMIN(shift_move_amount, - (u32) (stack_from.count - leftover.count)); - shift_move_amount -= a->count; - a->from_inv = s.inventoryloc; - a->from_list = s.listname; - a->from_i = s.i; - a->to_inv = to_inv_sp.inventoryloc; - a->to_list = to_inv_sp.listname; - a->to_i = slot_to; - m_invmgr->inventoryAction(a); - stack_from = leftover; + if (m_client->getProtoVersion() >= 25) { + infostream << "Handing IACTION_MOVE to manager" << std::endl; + IMoveAction *a = new IMoveAction(); + a->count = shift_move_amount; + a->from_inv = s.inventoryloc; + a->from_list = s.listname; + a->from_i = s.i; + a->to_inv = to_inv_sp.inventoryloc; + a->to_list = to_inv_sp.listname; + a->move_somewhere = true; + m_invmgr->inventoryAction(a); + } else { + // find a place (or more than one) to add the new item + u32 ilt_size = list_to->getSize(); + ItemStack leftover; + for (u32 slot_to = 0; slot_to < ilt_size + && shift_move_amount > 0; slot_to++) { + list_to->itemFits(slot_to, stack_from, &leftover); + if (leftover.count < stack_from.count) { + infostream << "Handing IACTION_MOVE to manager" << std::endl; + IMoveAction *a = new IMoveAction(); + a->count = MYMIN(shift_move_amount, + (u32) (stack_from.count - leftover.count)); + shift_move_amount -= a->count; + a->from_inv = s.inventoryloc; + a->from_list = s.listname; + a->from_i = s.i; + a->to_inv = to_inv_sp.inventoryloc; + a->to_list = to_inv_sp.listname; + a->to_i = slot_to; + m_invmgr->inventoryAction(a); + stack_from = leftover; + } } } } while (0); - } else if (drop_amount > 0) { m_selected_content_guess = ItemStack(); // Clear diff --git a/src/inventory.cpp b/src/inventory.cpp index 7941b3a2a..ff2c15b65 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -782,10 +782,47 @@ ItemStack InventoryList::peekItem(u32 i, u32 peekcount) const return m_items[i].peekItem(peekcount); } -void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) +void InventoryList::moveItemSomewhere(u32 i, InventoryList *dest, u32 count) +{ + // Take item from source list + ItemStack item1; + if (count == 0) + item1 = changeItem(i, ItemStack()); + else + item1 = takeItem(i, count); + + if (item1.empty()) + return; + + // Try to add the item to destination list + u32 oldcount = item1.count; + u32 dest_size = dest->getSize(); + // First try all the non-empty slots + for (u32 dest_i = 0; dest_i < dest_size; dest_i++) { + if (!m_items[dest_i].empty()) { + item1 = dest->addItem(dest_i, item1); + if (item1.empty()) return; + } + } + + // Then try all the empty ones + for (u32 dest_i = 0; dest_i < dest_size; dest_i++) { + if (m_items[dest_i].empty()) { + item1 = dest->addItem(dest_i, item1); + if (item1.empty()) return; + } + } + + // If we reach this, the item was not fully added + // Add the remaining part back to the source item + addItem(i, item1); +} + +u32 InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, + u32 count, bool swap_if_needed) { if(this == dest && i == dest_i) - return; + return count; // Take item from source list ItemStack item1; @@ -795,7 +832,7 @@ void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) item1 = takeItem(i, count); if(item1.empty()) - return; + return 0; // Try to add the item to destination list u32 oldcount = item1.count; @@ -813,8 +850,7 @@ void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) // If olditem is returned, nothing was added. // Swap the items - if(nothing_added) - { + if (nothing_added && swap_if_needed) { // Take item from source list item1 = changeItem(i, ItemStack()); // Adding was not possible, swap the items. @@ -823,6 +859,7 @@ void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) changeItem(i, item2); } } + return (oldcount - item1.count); } /* diff --git a/src/inventory.h b/src/inventory.h index faaa5ef95..e3c994fc3 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -244,7 +244,13 @@ public: // Move an item to a different list (or a different stack in the same list) // count is the maximum number of items to move (0 for everything) - void moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count = 0); + // returns number of moved items + u32 moveItem(u32 i, InventoryList *dest, u32 dest_i, + u32 count = 0, bool swap_if_needed = true); + + // like moveItem, but without a fixed destination index + // also with optional rollback recording + void moveItemSomewhere(u32 i, InventoryList *dest, u32 count); private: std::vector m_items; diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 640e3395b..96ce48086 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -121,16 +121,13 @@ InventoryAction * InventoryAction::deSerialize(std::istream &is) InventoryAction *a = NULL; - if(type == "Move") - { - a = new IMoveAction(is); - } - else if(type == "Drop") - { + if (type == "Move") { + a = new IMoveAction(is, false); + } else if (type == "MoveSomewhere") { + a = new IMoveAction(is, true); + } else if (type == "Drop") { a = new IDropAction(is); - } - else if(type == "Craft") - { + } else if(type == "Craft") { a = new ICraftAction(is); } @@ -141,9 +138,12 @@ InventoryAction * InventoryAction::deSerialize(std::istream &is) IMoveAction */ -IMoveAction::IMoveAction(std::istream &is) +IMoveAction::IMoveAction(std::istream &is, bool somewhere) { std::string ts; + move_somewhere = somewhere; + caused_by_move_somewhere = false; + move_count = 0; std::getline(is, ts, ' '); count = stoi(ts); @@ -161,8 +161,10 @@ IMoveAction::IMoveAction(std::istream &is) std::getline(is, to_list, ' '); - std::getline(is, ts, ' '); - to_i = stoi(ts); + if (!somewhere) { + std::getline(is, ts, ' '); + to_i = stoi(ts); + } } void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) @@ -202,6 +204,48 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame return; } + if (move_somewhere) { + s16 old_to_i = to_i; + u16 old_count = count; + caused_by_move_somewhere = true; + move_somewhere = false; + + infostream << "IMoveAction::apply(): moving item somewhere" + << " msom=" << move_somewhere + << " count=" << count + << " from inv=\"" << from_inv.dump() << "\"" + << " list=\"" << from_list << "\"" + << " i=" << from_i + << " to inv=\"" << to_inv.dump() << "\"" + << " list=\"" << to_list << "\"" + << std::endl; + + // Try to add the item to destination list + s16 dest_size = list_to->getSize(); + // First try all the non-empty slots + for (s16 dest_i = 0; dest_i < dest_size && count > 0; dest_i++) { + if (!list_to->getItem(dest_i).empty()) { + to_i = dest_i; + apply(mgr, player, gamedef); + count -= move_count; + } + } + + // Then try all the empty ones + for (s16 dest_i = 0; dest_i < dest_size && count > 0; dest_i++) { + if (list_to->getItem(dest_i).empty()) { + to_i = dest_i; + apply(mgr, player, gamedef); + count -= move_count; + } + } + + to_i = old_to_i; + count = old_count; + caused_by_move_somewhere = false; + move_somewhere = true; + return; + } /* Do not handle rollback if both inventories are that of the same player */ @@ -324,7 +368,8 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame If something is wrong (source item is empty, destination is the same as source), nothing happens */ - list_from->moveItem(from_i, list_to, to_i, count); + move_count = list_from->moveItem(from_i, + list_to, to_i, count, !caused_by_move_somewhere); // If source is infinite, reset it's stack if(src_can_take_count == -1){ @@ -352,15 +397,17 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame list_from->takeItem(from_i, count); } - infostream<<"IMoveAction::apply(): moved" - <<" count="< Date: Tue, 23 Jun 2015 21:14:48 +0200 Subject: [PATCH 145/670] Small TOCLIENT_HELLO logging fix Fix grammar error and missing number conversion for version. Also add deployed protocol to log line. --- src/network/clientpackethandler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 1f13c62f9..35a9bf07a 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -55,9 +55,10 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) // Chose an auth method we support AuthMechanism chosen_auth_mechanism = choseAuthMech(auth_mechs); - infostream << "Client: TOCLIENT_HELLO received with " - << "serialization_ver=" << serialization_ver + infostream << "Client: TOCLIENT_HELLO recieved with " + << "serialization_ver=" << (u32)serialization_ver << ", auth_mechs=" << auth_mechs + << ", proto_ver=" << proto_ver << ", compression_mode=" << compression_mode << ". Doing auth with mech " << chosen_auth_mechanism << std::endl; From c6766b275f25368e78eeffc68719b0ca1979c819 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Tue, 23 Jun 2015 23:17:47 +0200 Subject: [PATCH 146/670] Typo fix on previous @est31 commit --- src/network/clientpackethandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 35a9bf07a..c0acff985 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -55,7 +55,7 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) // Chose an auth method we support AuthMechanism chosen_auth_mechanism = choseAuthMech(auth_mechs); - infostream << "Client: TOCLIENT_HELLO recieved with " + infostream << "Client: TOCLIENT_HELLO received with " << "serialization_ver=" << (u32)serialization_ver << ", auth_mechs=" << auth_mechs << ", proto_ver=" << proto_ver From b13809f0c09b1b873709b4306b1bb9bbbdf838d0 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 30 Nov 2014 12:52:20 +0000 Subject: [PATCH 147/670] Use frame instead of words 'no screenshot available' --- textures/base/pack/no_screenshot.png | Bin 2446 -> 476 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/textures/base/pack/no_screenshot.png b/textures/base/pack/no_screenshot.png index e309a3eedeea23b797df6ed791a87fe8567de6b0..60e00f7301f7d98c32e517645ee8dc293aa45171 100644 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^CxCbw2OE%_edo9&kYY>nc6R~NK=9LfcRi5eEbxdd zW?@+@HaIvaCrk Y&n(TsQ|$7EF$E;#>FVdQ&MBb@0KfBM^8f$< literal 2446 zcmbtWc{JPk7XKw7v8Ekcs}=I5RI7+VYi%*Lwqg$|Vwp-CQxRJdiU?gyhf@0NTT6?g zwX~$Q{xGUjhCwluBx=yumrzAx()Z?^_x^q7o$vR4?>V1yzn^pO{d~{&+&fMVHqsJD zBme-AwzIW#5&Abm%M^nP&%B9lMWKWLaM8vR*#Ej7w3OW!BH|&om%;%+QueDsfZY7U zLJ$#QhqXdX!X*wVh}|hMyd{JbBdk0l&Qr)_VsHd-K8)xeK@33C10zUi8#}C%M?CTn z0ElhbSz5S7jxS9{RiSVwaE-##INURG+(}X)&04GL#FL|SC$>{BzPq`OxbSnknUj68 zs`dUoh5d|!X}?H6EwuuR)BS=-568=?@gD8A1TPYWEaIX`i)x->83%bRvoGK1YF|EQafNP?u4?!HZ65B&Ou_>TV`O(pJ8keT%XQ+WORW(t-ZUXf zB+axdUFu+9HtbJBCCWaabmKX6Lf$Wqc?W2MRha;iKWEmWuBeAxWB=~@i4A++VgwIijO-v@xX&Ppt9wL7n_MMS3 z8bgq?p@FQ4BJ^1ed}n9^u57%uB*sNc_06-$_e1=dada=5bD0uT6mo`-KT|kzlLgd z9m9rPVES6ks9fuK3-6_Ls6iMgY;**nh>n7qD$%_pwN0cXKY`6cMo=2UaCM?xcH1(C z8YFjoAn4GQGLNtR+FX|-h|~lf)%`!0_6`_Kuih%(E3Jd*!soV}gD<~(hH?Lxx*(ak|Akc8FXxT-RwxR7cd7OE zl6%G9B=(?a)ZDuBjc&bD&1S~FaTnR^c_E?AtVKO@hD=7RDL4w9NCT-hQ@zNUt@<8p zhn4)!w6tgs2jyEPM-Z_g$F=sYpAKTVd@+`qCR)Q(SG-xSCD3G+S)8~}mdBQkX0m%^ zRZ+v;j$*(>Li^9-uqu^XT}H6&3>vjDZ;(tls?&xx_emN5E<>Qoa}+zMOD2z8YMrN@ zdSBhC<8wvde5c^*?+|DW@(Q*c0gEvJpXEz8Vw%2Nkhq7mDZk^hQX$93KVHYN@M8?r z?X|EvQCm!6uRPJQRw6|sNp?Ged3GQyE<13PZR}8MEb>P1@mqRe+k#Vl3<}~>`n3yg z()W0bbb;k=)>sIRE%kf~HV~&$?KO36iW}s~Nl3L+xw=AIB<<@W&Y3bd8N|;U+;znh zzD>%z)YsiTp<-*!A?2xP*VVP{hwfYXUyLHLG3}E+8MIW&TEH<^uOrEyeN zW{{m7jB%g(J#-4Xg}&3c%4A>CV~PI$lG<4A z2w;M6ZvF7YfyXG|t;uk+22ANG9mVm=b`{Ha20ajh-)Dy7IT=yIkFt_R0mqpoyFm{u z!}O;lUnacwz-mcdwV9iiFR=;78_iM1@S3hYRTRc9njX_pZvmqQbl- zJ0Hw~1v&WM&a?LoiarNsiUf~~hBxK+d84=jVE;l-s_3>2bETd;iF3R-DBbXnSj8|? zGAA6;ptkzh&hy+)>$nDd##i+Q6L37q@@QzY5=X)2zrMuH_QmC)D%WR!SX}wO`tq21 zbm^9EZ`BD!w2KkrOFO@4=(^X!H`Z3?JgV35^=|*b{6+Nhd~4_1Zyc5?b7Or@ORRQ_oO^#$ z9x?R-R^un5Em6}@5Tt1?tZA&yhMR2o4PMrLcJZmlYo1Ojs7QTBP&1#eG5|5qAaY07 zUD=#L46^351E#U1lO8PhqS|FE3VUB9_~$dPTSOtWIQ@Quuu_gZwynCaalsaFu4e;| z2D&FBj;N=9Z%W|fL<+_|Y`$JO7Gj-`)T0!he0e-~&TLIt3w0u~*!!Z#=%r6+=p)W` zSx?u4q-!5m)<4$AQUi)S?v50^k=?xm9Dqlj0ZHvfE0#W=^*JubFj{fY(XJb0!t5)n z;l>`gZNa7j;j%qgS6uz=M;Ua+^Zv@?fr5(PaBV-F0>?==&dS8Ls_n#(C#hND_Zk

{#yiRE;g*K#l*Nq-jQMhsig7)6@b$h5 z?W_#$Z66lt%c`z=NYTSm5%nlypXZ3T+bYl`^vB(a S1UKQB1lU Date: Wed, 24 Jun 2015 22:45:52 +0200 Subject: [PATCH 148/670] Return to ignore --- src/client.cpp | 1 + src/server.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/client.cpp b/src/client.cpp index de8131875..d2ec7017e 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -880,6 +880,7 @@ void Client::ProcessData(NetworkPacket *pkt) if (command >= TOCLIENT_NUM_MSG_TYPES) { infostream << "Client: Ignoring unknown command " << command << std::endl; + return; } /* diff --git a/src/server.cpp b/src/server.cpp index 52bc9867a..0e3d94fae 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1206,6 +1206,7 @@ void Server::ProcessData(NetworkPacket *pkt) if (command >= TOSERVER_NUM_MSG_TYPES) { infostream << "Server: Ignoring unknown command " << command << std::endl; + return; } if (toServerCommandTable[command].state == TOSERVER_STATE_NOT_CONNECTED) { From 3376d2e114767eef06b87645edefcd2d42696919 Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 25 Jun 2015 15:50:31 +0200 Subject: [PATCH 149/670] Remove compile warning Thanks @TeTpaAka for pointing this out. --- src/inventory.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/inventory.cpp b/src/inventory.cpp index ff2c15b65..6c7c8cdd1 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -795,7 +795,6 @@ void InventoryList::moveItemSomewhere(u32 i, InventoryList *dest, u32 count) return; // Try to add the item to destination list - u32 oldcount = item1.count; u32 dest_size = dest->getSize(); // First try all the non-empty slots for (u32 dest_i = 0; dest_i < dest_size; dest_i++) { From ffd16e3feca90c356c55898de2b9f3f5c6bc5c98 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Mon, 22 Jun 2015 04:34:56 +0200 Subject: [PATCH 150/670] Add minimap feature --- build/android/jni/Android.mk | 1 + .../minimap_shader/opengl_fragment.glsl | 32 ++ .../shaders/minimap_shader/opengl_vertex.glsl | 11 + src/CMakeLists.txt | 1 + src/client.cpp | 35 +- src/client.h | 6 + src/client/tile.cpp | 40 ++ src/client/tile.h | 2 + src/defaultsettings.cpp | 4 + src/drawscene.cpp | 11 +- src/drawscene.h | 16 +- src/game.cpp | 70 ++- src/mapblock_mesh.cpp | 28 ++ src/mapblock_mesh.h | 7 + src/minimap.cpp | 472 ++++++++++++++++++ src/minimap.h | 168 +++++++ src/nodedef.cpp | 7 +- src/nodedef.h | 2 + textures/base/pack/minimap_mask_round.png | Bin 0 -> 4081 bytes textures/base/pack/minimap_mask_square.png | Bin 0 -> 1951 bytes textures/base/pack/minimap_overlay_round.png | Bin 0 -> 20630 bytes textures/base/pack/minimap_overlay_square.png | Bin 0 -> 2889 bytes textures/base/pack/player_marker.png | Bin 0 -> 3885 bytes 23 files changed, 883 insertions(+), 30 deletions(-) create mode 100644 client/shaders/minimap_shader/opengl_fragment.glsl create mode 100644 client/shaders/minimap_shader/opengl_vertex.glsl create mode 100644 src/minimap.cpp create mode 100644 src/minimap.h create mode 100644 textures/base/pack/minimap_mask_round.png create mode 100644 textures/base/pack/minimap_mask_square.png create mode 100644 textures/base/pack/minimap_overlay_round.png create mode 100644 textures/base/pack/minimap_overlay_square.png create mode 100644 textures/base/pack/player_marker.png diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index d62698ce4..e606ccfc9 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -183,6 +183,7 @@ LOCAL_SRC_FILES := \ jni/src/mg_decoration.cpp \ jni/src/mg_ore.cpp \ jni/src/mg_schematic.cpp \ + jni/src/minimap.cpp \ jni/src/mods.cpp \ jni/src/nameidmapping.cpp \ jni/src/nodedef.cpp \ diff --git a/client/shaders/minimap_shader/opengl_fragment.glsl b/client/shaders/minimap_shader/opengl_fragment.glsl new file mode 100644 index 000000000..fa4f9cb1a --- /dev/null +++ b/client/shaders/minimap_shader/opengl_fragment.glsl @@ -0,0 +1,32 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform vec3 yawVec; + +void main (void) +{ + vec2 uv = gl_TexCoord[0].st; + + //texture sampling rate + const float step = 1.0 / 256.0; + float tl = texture2D(normalTexture, vec2(uv.x - step, uv.y + step)).r; + float t = texture2D(normalTexture, vec2(uv.x - step, uv.y - step)).r; + float tr = texture2D(normalTexture, vec2(uv.x + step, uv.y + step)).r; + float r = texture2D(normalTexture, vec2(uv.x + step, uv.y)).r; + float br = texture2D(normalTexture, vec2(uv.x + step, uv.y - step)).r; + float b = texture2D(normalTexture, vec2(uv.x, uv.y - step)).r; + float bl = texture2D(normalTexture, vec2(uv.x - step, uv.y - step)).r; + float l = texture2D(normalTexture, vec2(uv.x - step, uv.y)).r; + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + vec4 bump = vec4 (normalize(vec3 (dX, dY, 0.1)),1.0); + float height = 2.0 * texture2D(normalTexture, vec2(uv.x, uv.y)).r - 1.0; + vec4 base = texture2D(baseTexture, uv).rgba; + vec3 L = normalize(vec3(0.0, 0.75, 1.0)); + float specular = pow(clamp(dot(reflect(L, bump.xyz), yawVec), 0.0, 1.0), 1.0); + float diffuse = dot(yawVec, bump.xyz); + + vec3 color = (1.1 * diffuse + 0.05 * height + 0.5 * specular) * base.rgb; + vec4 col = vec4(color.rgb, base.a); + col *= gl_Color; + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/minimap_shader/opengl_vertex.glsl b/client/shaders/minimap_shader/opengl_vertex.glsl new file mode 100644 index 000000000..06df5a3cf --- /dev/null +++ b/client/shaders/minimap_shader/opengl_vertex.glsl @@ -0,0 +1,11 @@ +uniform mat4 mWorldViewProj; +uniform mat4 mInvWorld; +uniform mat4 mTransWorld; +uniform mat4 mWorld; + +void main(void) +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = mWorldViewProj * gl_Vertex; + gl_FrontColor = gl_BackColor = gl_Color; +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ef508d9b8..e2f555860 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -423,6 +423,7 @@ set(client_SRCS main.cpp mapblock_mesh.cpp mesh.cpp + minimap.cpp particles.cpp shader.cpp sky.cpp diff --git a/src/client.cpp b/src/client.cpp index d2ec7017e..ce48df953 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "mapblock_mesh.h" #include "mapblock.h" +#include "minimap.h" #include "settings.h" #include "profiler.h" #include "gettext.h" @@ -185,11 +186,6 @@ void * MeshUpdateThread::Thread() ScopeProfiler sp(g_profiler, "Client: Mesh making"); MapBlockMesh *mesh_new = new MapBlockMesh(q->data, m_camera_offset); - if(mesh_new->getMesh()->getMeshBufferCount() == 0) - { - delete mesh_new; - mesh_new = NULL; - } MeshUpdateResult r; r.p = q->p; @@ -274,6 +270,7 @@ Client::Client( // Add local player m_env.addPlayer(new LocalPlayer(this, playername)); + m_mapper = new Mapper(device, this); m_cache_save_interval = g_settings->getU16("server_map_save_interval"); m_cache_smooth_lighting = g_settings->getBool("smooth_lighting"); @@ -537,27 +534,37 @@ void Client::step(float dtime) */ { int num_processed_meshes = 0; - while(!m_mesh_update_thread.m_queue_out.empty()) + while (!m_mesh_update_thread.m_queue_out.empty()) { num_processed_meshes++; MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx(); MapBlock *block = m_env.getMap().getBlockNoCreateNoEx(r.p); - if(block) { + MinimapMapblock *minimap_mapblock = NULL; + if (block) { // Delete the old mesh - if(block->mesh != NULL) - { - // TODO: Remove hardware buffers of meshbuffers of block->mesh + if (block->mesh != NULL) { delete block->mesh; block->mesh = NULL; } - // Replace with the new mesh - block->mesh = r.mesh; + if (r.mesh) + minimap_mapblock = r.mesh->getMinimapMapblock(); + + if (r.mesh && r.mesh->getMesh()->getMeshBufferCount() == 0) { + delete r.mesh; + block->mesh = NULL; + } else { + // Replace with the new mesh + block->mesh = r.mesh; + } } else { delete r.mesh; + minimap_mapblock = NULL; } - if(r.ack_block_to_server) { + m_mapper->addBlock(r.p, minimap_mapblock); + + if (r.ack_block_to_server) { /* Acknowledge block [0] u8 count @@ -567,7 +574,7 @@ void Client::step(float dtime) } } - if(num_processed_meshes > 0) + if (num_processed_meshes > 0) g_profiler->graphAdd("num_processed_meshes", num_processed_meshes); } diff --git a/src/client.h b/src/client.h index daeef3985..474daf3bc 100644 --- a/src/client.h +++ b/src/client.h @@ -48,6 +48,8 @@ struct MapDrawControl; class MtEventManager; struct PointedThing; class Database; +class Mapper; +struct MinimapMapblock; struct QueuedMeshUpdate { @@ -504,6 +506,9 @@ public: float getCurRate(void); float getAvgRate(void); + Mapper* getMapper () + { return m_mapper; } + // IGameDef interface virtual IItemDefManager* getItemDefManager(); virtual INodeDefManager* getNodeDefManager(); @@ -583,6 +588,7 @@ private: ParticleManager m_particle_manager; con::Connection m_con; IrrlichtDevice *m_device; + Mapper *m_mapper; // Server serialization version u8 m_server_ser_ver; // Used version of the protocol with server diff --git a/src/client/tile.cpp b/src/client/tile.cpp index eba52033a..cf8061982 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -382,6 +382,8 @@ public: video::IImage* generateImage(const std::string &name); video::ITexture* getNormalTexture(const std::string &name); + video::SColor getTextureAverageColor(const std::string &name); + private: // The id of the thread that is allowed to use irrlicht directly @@ -2008,3 +2010,41 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name) } return NULL; } + +video::SColor TextureSource::getTextureAverageColor(const std::string &name) +{ + video::IVideoDriver *driver = m_device->getVideoDriver(); + video::SColor c(0, 0, 0, 0); + u32 id; + video::ITexture *texture = getTexture(name, &id); + video::IImage *image = driver->createImage(texture, + core::position2d(0, 0), + texture->getOriginalSize()); + u32 total = 0; + u32 tR = 0; + u32 tG = 0; + u32 tB = 0; + core::dimension2d dim = image->getDimension(); + u16 step = 1; + if (dim.Width > 16) + step = dim.Width / 16; + for (u16 x = 0; x < dim.Width; x += step) { + for (u16 y = 0; y < dim.Width; y += step) { + c = image->getPixel(x,y); + if (c.getAlpha() > 0) { + total++; + tR += c.getRed(); + tG += c.getGreen(); + tB += c.getBlue(); + } + } + } + image->drop(); + if (total > 0) { + c.setRed(tR / total); + c.setGreen(tG / total); + c.setBlue(tB / total); + } + c.setAlpha(255); + return c; +} diff --git a/src/client/tile.h b/src/client/tile.h index 38f8bb623..674da66f2 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -110,6 +110,7 @@ public: virtual video::ITexture* generateTextureFromMesh( const TextureFromMeshParams ¶ms)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; + virtual video::SColor getTextureAverageColor(const std::string &name)=0; }; class IWritableTextureSource : public ITextureSource @@ -131,6 +132,7 @@ public: virtual void insertSourceImage(const std::string &name, video::IImage *img)=0; virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; + virtual video::SColor getTextureAverageColor(const std::string &name)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index eab81009f..73e36da98 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -43,6 +43,7 @@ void set_default_settings(Settings *settings) settings->setDefault("keymap_special1", "KEY_KEY_E"); settings->setDefault("keymap_chat", "KEY_KEY_T"); settings->setDefault("keymap_cmd", "/"); + settings->setDefault("keymap_minimap", "KEY_F9"); settings->setDefault("keymap_console", "KEY_F10"); settings->setDefault("keymap_rangeselect", "KEY_KEY_R"); settings->setDefault("keymap_freemove", "KEY_KEY_K"); @@ -176,6 +177,9 @@ void set_default_settings(Settings *settings) settings->setDefault("enable_particles", "true"); settings->setDefault("enable_mesh_cache", "true"); + settings->setDefault("enable_minimap", "true"); + settings->setDefault("minimap_shape_round", "true"); + settings->setDefault("curl_timeout", "5000"); settings->setDefault("curl_parallel_limit", "8"); settings->setDefault("curl_file_download_timeout", "300000"); diff --git a/src/drawscene.cpp b/src/drawscene.cpp index f7cfdd262..509f341d5 100644 --- a/src/drawscene.cpp +++ b/src/drawscene.cpp @@ -416,10 +416,11 @@ void draw_plain(Camera& camera, bool show_hud, Hud& hud, camera.drawWieldedTool(); } -void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, - Camera& camera, Client& client, LocalPlayer* player, Hud& hud, - gui::IGUIEnvironment* guienv, std::vector hilightboxes, - const v2u32& screensize, video::SColor skycolor, bool show_hud) +void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr, + Camera &camera, Client& client, LocalPlayer *player, Hud &hud, + Mapper &mapper, gui::IGUIEnvironment *guienv, + std::vector hilightboxes, const v2u32 &screensize, + video::SColor skycolor, bool show_hud, bool show_minimap) { TimeTaker timer("smgr"); @@ -484,6 +485,8 @@ void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, hud.drawCrosshair(); hud.drawHotbar(client.getPlayerItem()); hud.drawLuaElements(camera.getOffset()); + if (show_minimap) + mapper.drawMinimap(); } guienv->drawAll(); diff --git a/src/drawscene.h b/src/drawscene.h index 3268bcbf2..0630f2970 100644 --- a/src/drawscene.h +++ b/src/drawscene.h @@ -22,16 +22,18 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "camera.h" #include "hud.h" +#include "minimap.h" #include "irrlichttypes_extrabloated.h" -void draw_load_screen(const std::wstring &text, IrrlichtDevice* device, - gui::IGUIEnvironment* guienv, float dtime=0, int percent=0, - bool clouds=true); +void draw_load_screen(const std::wstring &text, IrrlichtDevice *device, + gui::IGUIEnvironment *guienv, float dtime = 0, int percent = 0, + bool clouds = true); -void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, - Camera& camera, Client& client, LocalPlayer* player, Hud& hud, - gui::IGUIEnvironment* guienv, std::vector hilightboxes, - const v2u32& screensize, video::SColor skycolor, bool show_hud); +void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr, + Camera &camera, Client &client, LocalPlayer *player, Hud &hud, + Mapper &mapper, gui::IGUIEnvironment *guienv, + std::vector hilightboxes, const v2u32 &screensize, + video::SColor skycolor, bool show_hud, bool show_minimap); #endif /* DRAWSCENE_H_ */ diff --git a/src/game.cpp b/src/game.cpp index be4897d75..94fb41852 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -57,6 +57,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/directiontables.h" #include "util/pointedthing.h" #include "version.h" +#include "minimap.h" #include "sound.h" @@ -866,6 +867,9 @@ public: services->setPixelShaderConstant("eyePosition", (irr::f32 *)&eye_position, 3); services->setVertexShaderConstant("eyePosition", (irr::f32 *)&eye_position, 3); + v3f minimap_yaw_vec = m_client->getMapper()->getYawVec(); + services->setPixelShaderConstant("yawVec", (irr::f32 *)&minimap_yaw_vec, 3); + // Uniform sampler layers int layer0 = 0; int layer1 = 1; @@ -1238,6 +1242,7 @@ struct KeyCache { KEYMAP_ID_CHAT, KEYMAP_ID_CMD, KEYMAP_ID_CONSOLE, + KEYMAP_ID_MINIMAP, KEYMAP_ID_FREEMOVE, KEYMAP_ID_FASTMOVE, KEYMAP_ID_NOCLIP, @@ -1287,6 +1292,7 @@ void KeyCache::populate() key[KEYMAP_ID_CHAT] = getKeySetting("keymap_chat"); key[KEYMAP_ID_CMD] = getKeySetting("keymap_cmd"); key[KEYMAP_ID_CONSOLE] = getKeySetting("keymap_console"); + key[KEYMAP_ID_MINIMAP] = getKeySetting("keymap_minimap"); key[KEYMAP_ID_FREEMOVE] = getKeySetting("keymap_freemove"); key[KEYMAP_ID_FASTMOVE] = getKeySetting("keymap_fastmove"); key[KEYMAP_ID_NOCLIP] = getKeySetting("keymap_noclip"); @@ -1392,6 +1398,7 @@ struct VolatileRunFlags { bool invert_mouse; bool show_chat; bool show_hud; + bool show_minimap; bool force_fog_off; bool show_debug; bool show_profiler_graph; @@ -1490,6 +1497,8 @@ protected: void toggleChat(float *statustext_time, bool *flag); void toggleHud(float *statustext_time, bool *flag); + void toggleMinimap(float *statustext_time, bool *flag1, bool *flag2, + bool shift_pressed); void toggleFog(float *statustext_time, bool *flag); void toggleDebug(float *statustext_time, bool *show_debug, bool *show_profiler_graph); @@ -1568,6 +1577,7 @@ private: Sky *sky; // Free using ->Drop() Inventory *local_inventory; Hud *hud; + Mapper *mapper; /* 'cache' This class does take ownership/responsibily for cleaning up etc of any of @@ -1648,7 +1658,8 @@ Game::Game() : clouds(NULL), sky(NULL), local_inventory(NULL), - hud(NULL) + hud(NULL), + mapper(NULL) { m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); m_cache_enable_node_highlighting = g_settings->getBool("enable_node_highlighting"); @@ -1750,6 +1761,7 @@ void Game::run() flags.show_chat = true; flags.show_hud = true; + flags.show_minimap = g_settings->getBool("enable_minimap"); flags.show_debug = g_settings->getBool("show_debug"); flags.invert_mouse = g_settings->getBool("invert_mouse"); flags.first_loop_after_window_activation = true; @@ -2065,6 +2077,9 @@ bool Game::createClient(const std::string &playername, return false; } + mapper = client->getMapper(); + mapper->setMinimapMode(MINIMAP_MODE_OFF); + return true; } @@ -2599,6 +2614,9 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, client->makeScreenshot(device); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_HUD])) { toggleHud(statustext_time, &flags->show_hud); + } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_MINIMAP])) { + toggleMinimap(statustext_time, &flags->show_minimap, &flags->show_hud, + input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SNEAK])); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_CHAT])) { toggleChat(statustext_time, &flags->show_chat); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_FORCE_FOG_OFF])) { @@ -2819,6 +2837,44 @@ void Game::toggleHud(float *statustext_time, bool *flag) client->setHighlighted(client->getHighlighted(), *flag); } +void Game::toggleMinimap(float *statustext_time, bool *flag, bool *show_hud, bool shift_pressed) +{ + if (*show_hud && g_settings->getBool("enable_minimap")) { + if (shift_pressed) { + mapper->toggleMinimapShape(); + return; + } + MinimapMode mode = mapper->getMinimapMode(); + mode = (MinimapMode)((int)(mode) + 1); + *flag = true; + switch (mode) { + case MINIMAP_MODE_SURFACEx1: + statustext = L"Minimap in surface mode, Zoom x1"; + break; + case MINIMAP_MODE_SURFACEx2: + statustext = L"Minimap in surface mode, Zoom x2"; + break; + case MINIMAP_MODE_SURFACEx4: + statustext = L"Minimap in surface mode, Zoom x4"; + break; + case MINIMAP_MODE_RADARx1: + statustext = L"Minimap in radar mode, Zoom x1"; + break; + case MINIMAP_MODE_RADARx2: + statustext = L"Minimap in radar mode, Zoom x2"; + break; + case MINIMAP_MODE_RADARx4: + statustext = L"Minimap in radar mode, Zoom x4"; + break; + default: + mode = MINIMAP_MODE_OFF; + *flag = false; + statustext = L"Minimap hidden"; + } + *statustext_time = 0; + mapper->setMinimapMode(mode); + } +} void Game::toggleFog(float *statustext_time, bool *flag) { @@ -3953,8 +4009,9 @@ void Game::updateFrame(std::vector &highlight_boxes, stats->beginscenetime = timer.stop(true); } - draw_scene(driver, smgr, *camera, *client, player, *hud, guienv, - highlight_boxes, screensize, skycolor, flags.show_hud); + draw_scene(driver, smgr, *camera, *client, player, *hud, *mapper, + guienv, highlight_boxes, screensize, skycolor, flags.show_hud, + flags.show_minimap); /* Profiler graph @@ -3987,6 +4044,13 @@ void Game::updateFrame(std::vector &highlight_boxes, player->hurt_tilt_strength = 0; } + /* + Update minimap pos + */ + if (flags.show_minimap && flags.show_hud) { + mapper->setPos(floatToInt(player->getPosition(), BS)); + } + /* End scene */ diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 79e3e81ba..0e4831166 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "gamedef.h" #include "mesh.h" +#include "minimap.h" #include "content_mapblock.h" #include "noise.h" #include "shader.h" @@ -1028,6 +1029,7 @@ static void updateAllFastFaceRows(MeshMakeData *data, MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_mesh(new scene::SMesh()), + m_minimap_mapblock(new MinimapMapblock), m_gamedef(data->m_gamedef), m_tsrc(m_gamedef->getTextureSource()), m_shdrsrc(m_gamedef->getShaderSource()), @@ -1041,6 +1043,32 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_enable_shaders = data->m_use_shaders; m_enable_highlighting = g_settings->getBool("enable_node_highlighting"); + if (g_settings->getBool("enable_minimap")) { + v3s16 blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE; + for(s16 x = 0; x < MAP_BLOCKSIZE; x++) { + for(s16 z = 0; z < MAP_BLOCKSIZE; z++) { + s16 air_count = 0; + bool surface_found = false; + MinimapPixel* minimap_pixel = &m_minimap_mapblock->data[x + z * MAP_BLOCKSIZE]; + for(s16 y = MAP_BLOCKSIZE -1; y > -1; y--) { + v3s16 p(x, y, z); + MapNode n = data->m_vmanip.getNodeNoEx(blockpos_nodes + p); + if (!surface_found && n.getContent() != CONTENT_AIR) { + minimap_pixel->height = y; + minimap_pixel->id = n.getContent(); + surface_found = true; + } else if (n.getContent() == CONTENT_AIR) { + air_count++; + } + } + if (!surface_found) { + minimap_pixel->id = CONTENT_AIR; + } + minimap_pixel->air_count = air_count; + } + } + } + // 4-21ms for MAP_BLOCKSIZE=16 (NOTE: probably outdated) // 24-155ms for MAP_BLOCKSIZE=32 (NOTE: probably outdated) //TimeTaker timer1("MapBlockMesh()"); diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h index 72c90c3e5..283006331 100644 --- a/src/mapblock_mesh.h +++ b/src/mapblock_mesh.h @@ -34,6 +34,7 @@ class IShaderSource; class MapBlock; +struct MinimapMapblock; struct MeshMakeData { @@ -108,6 +109,11 @@ public: return m_mesh; } + MinimapMapblock* getMinimapMapblock() + { + return m_minimap_mapblock; + } + bool isAnimationForced() const { return m_animation_force_timer == 0; @@ -123,6 +129,7 @@ public: private: scene::SMesh *m_mesh; + MinimapMapblock *m_minimap_mapblock; IGameDef *m_gamedef; ITextureSource *m_tsrc; IShaderSource *m_shdrsrc; diff --git a/src/minimap.cpp b/src/minimap.cpp new file mode 100644 index 000000000..61960ca1e --- /dev/null +++ b/src/minimap.cpp @@ -0,0 +1,472 @@ +/* +Minetest +Copyright (C) 2010-2015 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "minimap.h" +#include "logoutputbuffer.h" +#include "jthread/jmutexautolock.h" +#include "clientmap.h" +#include "settings.h" +#include "nodedef.h" +#include "porting.h" +#include "util/numeric.h" +#include "util/string.h" +#include + +QueuedMinimapUpdate::QueuedMinimapUpdate(): + pos(-1337,-1337,-1337), + data(NULL) +{ +} + +QueuedMinimapUpdate::~QueuedMinimapUpdate() +{ + delete data; +} + +MinimapUpdateQueue::MinimapUpdateQueue() +{ +} + +MinimapUpdateQueue::~MinimapUpdateQueue() +{ + JMutexAutoLock lock(m_mutex); + + for (std::vector::iterator + i = m_queue.begin(); + i != m_queue.end(); i++) + { + QueuedMinimapUpdate *q = *i; + delete q; + } +} + +void MinimapUpdateQueue::addBlock(v3s16 pos, MinimapMapblock *data) +{ + DSTACK(__FUNCTION_NAME); + + JMutexAutoLock lock(m_mutex); + + /* + Find if block is already in queue. + If it is, update the data and quit. + */ + for (std::vector::iterator + i = m_queue.begin(); + i != m_queue.end(); i++) + { + QueuedMinimapUpdate *q = *i; + if (q->pos == pos) { + delete q->data; + q->data = data; + return; + } + } + + /* + Add the block + */ + QueuedMinimapUpdate *q = new QueuedMinimapUpdate; + q->pos = pos; + q->data = data; + m_queue.push_back(q); +} + +QueuedMinimapUpdate * MinimapUpdateQueue::pop() +{ + JMutexAutoLock lock(m_mutex); + + for (std::vector::iterator + i = m_queue.begin(); + i != m_queue.end(); i++) + { + QueuedMinimapUpdate *q = *i; + m_queue.erase(i); + return q; + } + return NULL; +} + +/* + Minimap update thread +*/ + +void *MinimapUpdateThread::Thread() +{ + ThreadStarted(); + + log_register_thread("MinimapUpdateThread"); + + DSTACK(__FUNCTION_NAME); + + BEGIN_DEBUG_EXCEPTION_HANDLER + + porting::setThreadName("MinimapUpdateThread"); + + while (!StopRequested()) { + + while (m_queue.size()) { + QueuedMinimapUpdate *q = m_queue.pop(); + std::map::iterator it; + it = m_blocks_cache.find(q->pos); + if (q->data) { + m_blocks_cache[q->pos] = q->data; + } else if (it != m_blocks_cache.end()) { + delete it->second; + m_blocks_cache.erase(it); + } + } + + if (data->map_invalidated) { + if (data->mode != MINIMAP_MODE_OFF) { + getMap(data->pos, data->map_size, data->scan_height, data->radar); + data->map_invalidated = false; + } + } + // sleep_ms(10); + } + END_DEBUG_EXCEPTION_HANDLER(errorstream) + + return NULL; +} + +MinimapPixel *MinimapUpdateThread::getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height) +{ + pixel_height = height - MAP_BLOCKSIZE; + v3s16 blockpos_max, blockpos_min, relpos; + getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y - height / 2, pos.Z), blockpos_min, relpos); + getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y + height / 2, pos.Z), blockpos_max, relpos); + std::map::iterator it; + for (s16 i = blockpos_max.Y; i > blockpos_min.Y - 1; i--) { + it = m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); + if (it != m_blocks_cache.end()) { + MinimapPixel *pixel = &it->second->data[relpos.X + relpos.Z * MAP_BLOCKSIZE]; + if (pixel->id != CONTENT_AIR) { + pixel_height += pixel->height; + return pixel; + } + } + pixel_height -= MAP_BLOCKSIZE; + } + return NULL; +} + +s16 MinimapUpdateThread::getAirCount (v3s16 pos, s16 height) +{ + s16 air_count = 0; + v3s16 blockpos_max, blockpos_min, relpos; + getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y - height / 2, pos.Z), blockpos_min, relpos); + getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y + height / 2, pos.Z), blockpos_max, relpos); + std::map::iterator it; + for (s16 i = blockpos_max.Y; i > blockpos_min.Y - 1; i--) { + it = m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); + if (it != m_blocks_cache.end()) { + MinimapPixel *pixel = &it->second->data[relpos.X + relpos.Z * MAP_BLOCKSIZE]; + air_count += pixel->air_count; + } + } + return air_count; +} + +void MinimapUpdateThread::getMap (v3s16 pos, s16 size, s16 height, bool radar) +{ + v3s16 p = v3s16 (pos.X - size / 2, pos.Y, pos.Z - size / 2); + + for (s16 x = 0; x < size; x++) { + for (s16 z = 0; z < size; z++){ + u16 id = CONTENT_AIR; + MinimapPixel* minimap_pixel = &data->minimap_scan[x + z * size]; + if (!radar) { + s16 pixel_height = 0; + MinimapPixel* cached_pixel = + getMinimapPixel(v3s16(p.X + x, p.Y, p.Z + z), height, pixel_height); + if (cached_pixel) { + id = cached_pixel->id; + minimap_pixel->height = pixel_height; + } + } else { + minimap_pixel->air_count = getAirCount (v3s16(p.X + x, p.Y, p.Z + z), height); + } + minimap_pixel->id = id; + } + } +} + +Mapper::Mapper(IrrlichtDevice *device, Client *client) +{ + this->device = device; + this->client = client; + this->driver = device->getVideoDriver(); + this->tsrc = client->getTextureSource(); + this->player = client->getEnv().getLocalPlayer(); + this->shdrsrc = client->getShaderSource(); + + m_enable_shaders = g_settings->getBool("enable_shaders"); + data = new MinimapData; + data->mode = MINIMAP_MODE_OFF; + data->radar = false; + data->map_invalidated = true; + data->heightmap_image = NULL; + data->minimap_image = NULL; + data->texture = NULL; + data->minimap_shape_round = g_settings->getBool("minimap_shape_round"); + std::string fname1 = "minimap_mask_round.png"; + std::string fname2 = "minimap_overlay_round.png"; + data->minimap_mask_round = driver->createImage (tsrc->getTexture(fname1), + core::position2d(0,0), core::dimension2d(512,512)); + data->minimap_overlay_round = tsrc->getTexture(fname2); + fname1 = "minimap_mask_square.png"; + fname2 = "minimap_overlay_square.png"; + data->minimap_mask_square = driver->createImage (tsrc->getTexture(fname1), + core::position2d(0,0), core::dimension2d(512,512)); + data->minimap_overlay_square = tsrc->getTexture(fname2); + data->player_marker = tsrc->getTexture("player_marker.png"); + m_meshbuffer = getMinimapMeshBuffer(); + m_minimap_update_thread = new MinimapUpdateThread(device, client); + m_minimap_update_thread->data = data; + m_minimap_update_thread->Start(); +} + +Mapper::~Mapper() +{ + m_minimap_update_thread->Stop(); + m_minimap_update_thread->Wait(); + + for (std::map::iterator + it = m_minimap_update_thread->m_blocks_cache.begin(); + it != m_minimap_update_thread->m_blocks_cache.end(); it++){ + delete it->second; + } + + m_meshbuffer->drop(); + data->minimap_mask_round->drop(); + data->minimap_mask_square->drop(); + driver->removeTexture(data->texture); + driver->removeTexture(data->heightmap_texture); + driver->removeTexture(data->minimap_overlay_round); + driver->removeTexture(data->minimap_overlay_square); + delete data; + delete m_minimap_update_thread; +} + +void Mapper::addBlock (v3s16 pos, MinimapMapblock *data) +{ + m_minimap_update_thread->m_queue.addBlock(pos, data); +} + +MinimapMode Mapper::getMinimapMode() +{ + return data->mode; +} + +void Mapper::toggleMinimapShape() +{ + data->minimap_shape_round = !data->minimap_shape_round; + g_settings->setBool(("minimap_shape_round"), data->minimap_shape_round); +} + +void Mapper::setMinimapMode(MinimapMode mode) +{ + static const u16 modeDefs[7 * 3] = { + 0, 0, 0, + 0, 256, 256, + 0, 256, 128, + 0, 256, 64, + 1, 32, 128, + 1, 32, 64, + 1, 32, 32}; + + JMutexAutoLock lock(m_mutex); + data->radar = (bool)modeDefs[(int)mode * 3]; + data->scan_height = modeDefs[(int)mode * 3 + 1]; + data->map_size = modeDefs[(int)mode * 3 + 2]; + data->mode = mode; +} + +void Mapper::setPos(v3s16 pos) +{ + JMutexAutoLock lock(m_mutex); + data->pos = pos; +} + +video::ITexture *Mapper::getMinimapTexture() +{ + // update minimap textures when new scan is ready + if (!data->map_invalidated) { + // create minimap and heightmap image + core::dimension2d dim(data->map_size,data->map_size); + video::IImage *map_image = driver->createImage(video::ECF_A8R8G8B8, dim); + video::IImage *heightmap_image = driver->createImage(video::ECF_A8R8G8B8, dim); + video::IImage *minimap_image = driver->createImage(video::ECF_A8R8G8B8, + core::dimension2d(512, 512)); + + video::SColor c; + if (!data->radar) { + // surface mode + for (s16 x = 0; x < data->map_size; x++) { + for (s16 z = 0; z < data->map_size; z++) { + MinimapPixel* minimap_pixel = &data->minimap_scan[x + z * data->map_size]; + const ContentFeatures &f = client->getNodeDefManager()->get(minimap_pixel->id); + c = f.minimap_color; + c.setAlpha(240); + map_image->setPixel(x, data->map_size - z -1, c); + u32 h = minimap_pixel->height; + heightmap_image->setPixel(x,data->map_size -z -1, + video::SColor(255, h, h, h)); + } + } + } else { + // radar mode + c = video::SColor (240, 0 , 0, 0); + for (s16 x = 0; x < data->map_size; x++) { + for (s16 z = 0; z < data->map_size; z++) { + MinimapPixel* minimap_pixel = &data->minimap_scan[x + z * data->map_size]; + if (minimap_pixel->air_count > 0) { + c.setGreen(core::clamp(core::round32(32 + minimap_pixel->air_count * 8), 0, 255)); + } else { + c.setGreen(0); + } + map_image->setPixel(x, data->map_size - z -1, c); + } + } + } + + map_image->copyToScaling(minimap_image); + map_image->drop(); + + video::IImage *minimap_mask; + if (data->minimap_shape_round) { + minimap_mask = data->minimap_mask_round; + } else { + minimap_mask = data->minimap_mask_square; + } + for (s16 x = 0; x < 512; x++) { + for (s16 y = 0; y < 512; y++) { + video::SColor mask_col = minimap_mask->getPixel(x, y); + if (!mask_col.getAlpha()) { + minimap_image->setPixel(x, y, video::SColor(0,0,0,0)); + } + } + } + + if (data->texture) { + driver->removeTexture(data->texture); + } + if (data->heightmap_texture) { + driver->removeTexture(data->heightmap_texture); + } + data->texture = driver->addTexture("minimap__", minimap_image); + data->heightmap_texture = driver->addTexture("minimap_heightmap__", heightmap_image); + minimap_image->drop(); + heightmap_image->drop(); + + data->map_invalidated = true; + } + return data->texture; +} + +v3f Mapper::getYawVec() +{ + if (data->minimap_shape_round) { + return v3f(cos(player->getYaw()* core::DEGTORAD), + sin(player->getYaw()* core::DEGTORAD), 1.0); + } else { + return v3f(1.0, 0.0, 1.0); + } +} + +scene::SMeshBuffer *Mapper::getMinimapMeshBuffer() +{ + scene::SMeshBuffer *buf = new scene::SMeshBuffer(); + buf->Vertices.set_used(4); + buf->Indices .set_used(6); + video::SColor c(255, 255, 255, 255); + + buf->Vertices[0] = video::S3DVertex(-1, -1, 0, 0, 0, 1, c, 0, 1); + buf->Vertices[1] = video::S3DVertex(-1, 1, 0, 0, 0, 1, c, 0, 0); + buf->Vertices[2] = video::S3DVertex( 1, 1, 0, 0, 0, 1, c, 1, 0); + buf->Vertices[3] = video::S3DVertex( 1, -1, 0, 0, 0, 1, c, 1, 1); + + buf->Indices[0] = 0; + buf->Indices[1] = 1; + buf->Indices[2] = 2; + buf->Indices[3] = 2; + buf->Indices[4] = 3; + buf->Indices[5] = 0; + + return buf; +} + +void Mapper::drawMinimap() +{ + v2u32 screensize = porting::getWindowSize(); + u32 size = 0.25 * screensize.Y; + video::ITexture* minimap_texture = getMinimapTexture(); + core::matrix4 matrix; + + core::rect oldViewPort = driver->getViewPort(); + driver->setViewPort(core::rect(screensize.X - size - 10, 10, + screensize.X - 10, size + 10)); + core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION); + driver->setTransform(video::ETS_PROJECTION, core::matrix4()); + core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW); + driver->setTransform(video::ETS_VIEW, core::matrix4()); + matrix.makeIdentity(); + + if (minimap_texture) { + video::SMaterial& material = m_meshbuffer->getMaterial(); + material.setFlag(video::EMF_TRILINEAR_FILTER, true); + material.Lighting = false; + material.TextureLayer[0].Texture = minimap_texture; + material.TextureLayer[1].Texture = data->heightmap_texture; + if (m_enable_shaders && !data->radar) { + u16 sid = shdrsrc->getShader("minimap_shader", 1, 1); + material.MaterialType = shdrsrc->getShaderInfo(sid).material; + } else { + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + } + + if (data->minimap_shape_round) + matrix.setRotationDegrees(core::vector3df(0, 0, 360 - player->getYaw())); + driver->setTransform(video::ETS_WORLD, matrix); + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + video::ITexture *minimap_overlay; + if (data->minimap_shape_round) { + minimap_overlay = data->minimap_overlay_round; + } else { + minimap_overlay = data->minimap_overlay_square; + } + material.TextureLayer[0].Texture = minimap_overlay; + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + + if (!data->minimap_shape_round) { + matrix.setRotationDegrees(core::vector3df(0, 0, player->getYaw())); + driver->setTransform(video::ETS_WORLD, matrix); + material.TextureLayer[0].Texture = data->player_marker; + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + } + } + + driver->setTransform(video::ETS_VIEW, oldViewMat); + driver->setTransform(video::ETS_PROJECTION, oldProjMat); + driver->setViewPort(oldViewPort); +} diff --git a/src/minimap.h b/src/minimap.h new file mode 100644 index 000000000..ebb74c4fb --- /dev/null +++ b/src/minimap.h @@ -0,0 +1,168 @@ +/* +Minetest +Copyright (C) 2010-2015 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef MINIMAP_HEADER +#define MINIMAP_HEADER + +#include "irrlichttypes_extrabloated.h" +#include "client.h" +#include "voxel.h" +#include "jthread/jmutex.h" +#include +#include +#include + +enum MinimapMode { + MINIMAP_MODE_OFF, + MINIMAP_MODE_SURFACEx1, + MINIMAP_MODE_SURFACEx2, + MINIMAP_MODE_SURFACEx4, + MINIMAP_MODE_RADARx1, + MINIMAP_MODE_RADARx2, + MINIMAP_MODE_RADARx4 +}; + +struct MinimapPixel +{ + u16 id; + u16 height; + u16 air_count; + u16 light; +}; + +struct MinimapMapblock +{ + MinimapPixel data[MAP_BLOCKSIZE * MAP_BLOCKSIZE]; +}; + +struct MinimapData +{ + bool radar; + MinimapMode mode; + v3s16 pos; + v3s16 old_pos; + u16 scan_height; + u16 map_size; + MinimapPixel minimap_scan[512 * 512]; + bool map_invalidated; + bool minimap_shape_round; + video::IImage *minimap_image; + video::IImage *heightmap_image; + video::IImage *minimap_mask_round; + video::IImage *minimap_mask_square; + video::ITexture *texture; + video::ITexture *heightmap_texture; + video::ITexture *minimap_overlay_round; + video::ITexture *minimap_overlay_square; + video::ITexture *player_marker; +}; + +struct QueuedMinimapUpdate +{ + v3s16 pos; + MinimapMapblock *data; + + QueuedMinimapUpdate(); + ~QueuedMinimapUpdate(); +}; + +/* + A thread-safe queue of minimap mapblocks update tasks +*/ + +class MinimapUpdateQueue +{ +public: + MinimapUpdateQueue(); + + ~MinimapUpdateQueue(); + + void addBlock(v3s16 pos, MinimapMapblock *data); + + QueuedMinimapUpdate *pop(); + + u32 size() + { + JMutexAutoLock lock(m_mutex); + return m_queue.size(); + } + +private: + std::vector m_queue; + JMutex m_mutex; +}; + +class MinimapUpdateThread : public JThread +{ +private: + +public: + MinimapUpdateThread(IrrlichtDevice *device, Client *client) + { + this->device = device; + this->client = client; + this->driver = device->getVideoDriver(); + this->tsrc = client->getTextureSource(); + } + void getMap (v3s16 pos, s16 size, s16 height, bool radar); + MinimapPixel *getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height); + s16 getAirCount (v3s16 pos, s16 height); + video::SColor getColorFromId(u16 id); + IrrlichtDevice *device; + Client *client; + video::IVideoDriver *driver; + ITextureSource *tsrc; + void *Thread(); + MinimapData *data; + MinimapUpdateQueue m_queue; + std::map m_blocks_cache; +}; + +class Mapper +{ +private: + MinimapUpdateThread *m_minimap_update_thread; + video::ITexture *minimap_texture; + scene::SMeshBuffer *m_meshbuffer; + bool m_enable_shaders; + JMutex m_mutex; + +public: + Mapper(IrrlichtDevice *device, Client *client); + ~Mapper(); + + void addBlock(v3s16 pos, MinimapMapblock *data); + void setPos(v3s16 pos); + video::ITexture* getMinimapTexture(); + v3f getYawVec(); + MinimapMode getMinimapMode(); + void setMinimapMode(MinimapMode mode); + void toggleMinimapShape(); + scene::SMeshBuffer *getMinimapMeshBuffer(); + void drawMinimap(); + IrrlichtDevice *device; + Client *client; + video::IVideoDriver *driver; + LocalPlayer *player; + ITextureSource *tsrc; + IShaderSource *shdrsrc; + MinimapData *data; +}; + +#endif diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 6c2e96c4f..ba1ca2c65 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -202,6 +202,7 @@ void ContentFeatures::reset() #ifndef SERVER for(u32 i = 0; i < 24; i++) mesh_ptr[i] = NULL; + minimap_color = video::SColor(0, 0, 0, 0); #endif visual_scale = 1.0; for(u32 i = 0; i < 6; i++) @@ -766,7 +767,6 @@ void CNodeDefManager::applyTextureOverrides(const std::string &override_filepath } } - void CNodeDefManager::updateTextures(IGameDef *gamedef, void (*progress_callback)(void *progress_args, u32 progress, u32 max_progress), void *progress_callback_args) @@ -774,7 +774,6 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, #ifndef SERVER infostream << "CNodeDefManager::updateTextures(): Updating " "textures in node definitions" << std::endl; - ITextureSource *tsrc = gamedef->tsrc(); IShaderSource *shdsrc = gamedef->getShaderSource(); scene::ISceneManager* smgr = gamedef->getSceneManager(); @@ -797,6 +796,10 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, for (u32 i = 0; i < size; i++) { ContentFeatures *f = &m_content_features[i]; + // minimap pixel color - the average color of a texture + if (f->tiledef[0].name != "") + f->minimap_color = tsrc->getTextureAverageColor(f->tiledef[0].name); + // Figure out the actual tiles to use TileDef tiledef[6]; for (u32 j = 0; j < 6; j++) { diff --git a/src/nodedef.h b/src/nodedef.h index 3a5e5228d..bbce6ba3e 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -194,6 +194,7 @@ struct ContentFeatures std::string mesh; #ifndef SERVER scene::IMesh *mesh_ptr[24]; + video::SColor minimap_color; #endif float visual_scale; // Misc. scale parameter TileDef tiledef[6]; @@ -202,6 +203,7 @@ struct ContentFeatures // Post effect color, drawn when the camera is inside the node. video::SColor post_effect_color; + // Type of MapNode::param1 ContentParamType param_type; // Type of MapNode::param2 diff --git a/textures/base/pack/minimap_mask_round.png b/textures/base/pack/minimap_mask_round.png new file mode 100644 index 0000000000000000000000000000000000000000..797c780c7fec7a09a527f21543269931b51b973b GIT binary patch literal 4081 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 Iv}x&o0g+IHRR910 literal 0 HcmV?d00001 diff --git a/textures/base/pack/minimap_mask_square.png b/textures/base/pack/minimap_mask_square.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd23f7d8630f4890456b3f0fa2a45b53e65c19c GIT binary patch literal 1951 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn25lDE4H!vqjijof}4D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD+3&MTv8pKj+8tK`6p}1)jVN)>&&^HED`9XhN=+G#9$ zzMXbp_)+M2ij{#u0HOjY#lgVvAmKC%gMoACP6mbpDM0@s^Z_LufF=ONpc?Q?k*FN% zIG`?~Oh+h3xCxtB0|OCWKo~)ka!?>5e1|_26oB@lC`b4XVFW@9k8*?*iOL;-PJl!j z!U%*|15lQr7f4i&>SKbYqbf)Ej=TWc!?a-4y6?;kJAfV|HmxcE)k0zkVLL+10Vqq* zBodW30L_F1j02EG&~$`yL|`>A7%(EGLlRw1qH=^Q6@c!=k)rWSA&h7M8bLy;AW=C| zXfh@+4W;6Q0*@k>NTft9(*YI+1z>axRE#z>uh}iHrdiC`z|DZ^5TL_=;KwE5Q&If; Snc^dwKwM8(KbLh*2~7aY>y)qn literal 0 HcmV?d00001 diff --git a/textures/base/pack/minimap_overlay_round.png b/textures/base/pack/minimap_overlay_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1a6b3cc416ec6916f9e6ff16c36e8e7c440e5d24 GIT binary patch literal 20630 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 Date: Thu, 25 Jun 2015 23:55:01 +0100 Subject: [PATCH 151/670] Mgv5/mgv7 caves: Remove sand found in underground tunnels Add missing check for max_stone_y to mgv5 cavegen Tunnels now carve through sand below water_level --- src/mapgen_v5.cpp | 18 ++++++------------ src/mapgen_v7.cpp | 33 +++++++++++---------------------- 2 files changed, 17 insertions(+), 34 deletions(-) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 4d1c0df1d..00a1b915d 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -506,30 +506,24 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) void MapgenV5::generateCaves(int max_stone_y) { - u32 index = 0; - u32 index2d = 0; + if (max_stone_y >= node_min.Y) { + u32 index = 0; - for (s16 z=node_min.Z; z<=node_max.Z; z++) { - for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) { + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { u32 i = vm->m_area.index(node_min.X, y, z); - for (s16 x=node_min.X; x<=node_max.X; x++, i++, index++, index2d++) { + for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) { float d1 = contour(noise_cave1->result[index]); float d2 = contour(noise_cave2->result[index]); if (d1*d2 > 0.125) { - Biome *biome = (Biome *)bmgr->getRaw(biomemap[index2d]); content_t c = vm->m_data[i].getContent(); - if (!ndef->get(c).is_ground_content || c == CONTENT_AIR || - (y <= water_level && - c != biome->c_stone && - c != c_stone)) + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) continue; vm->m_data[i] = MapNode(CONTENT_AIR); } } - index2d -= ystride; } - index2d += ystride; } if (node_max.Y > LARGE_CAVE_DEPTH) diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index b5d1463db..7fe5a3848 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -852,32 +852,21 @@ void MapgenV7::generateCaves(int max_stone_y) { if (max_stone_y >= node_min.Y) { u32 index = 0; - u32 index2d = 0; - for (s16 z = node_min.Z; z <= node_max.Z; z++) { - for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { - u32 i = vm->m_area.index(node_min.X, y, z); - for (s16 x = node_min.X; x <= node_max.X; - x++, i++, index++, index2d++) { - float d1 = contour(noise_cave1->result[index]); - float d2 = contour(noise_cave2->result[index]); - if (d1 * d2 > 0.3) { - Biome *biome = (Biome *)bmgr-> - getRaw(biomemap[index2d]); - content_t c = vm->m_data[i].getContent(); - if (!ndef->get(c).is_ground_content || - c == CONTENT_AIR || - (y <= water_level && - c != biome->c_stone && - c != c_stone)) - continue; + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 i = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) { + float d1 = contour(noise_cave1->result[index]); + float d2 = contour(noise_cave2->result[index]); + if (d1 * d2 > 0.3) { + content_t c = vm->m_data[i].getContent(); + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) + continue; - vm->m_data[i] = MapNode(CONTENT_AIR); - } + vm->m_data[i] = MapNode(CONTENT_AIR); } - index2d -= ystride; } - index2d += ystride; } } From 420125debd3d010fcd3e7738c43f25c8f407ab63 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 27 Jun 2015 18:11:24 +0200 Subject: [PATCH 152/670] Remove busy polling inside minimap thread --- src/minimap.cpp | 45 ++++++++++++++++++++++++++++++++------------- src/minimap.h | 13 ++++++++++--- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/minimap.cpp b/src/minimap.cpp index 61960ca1e..753468c32 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "minimap.h" #include "logoutputbuffer.h" #include "jthread/jmutexautolock.h" +#include "jthread/jsemaphore.h" #include "clientmap.h" #include "settings.h" #include "nodedef.h" @@ -47,16 +48,15 @@ MinimapUpdateQueue::~MinimapUpdateQueue() { JMutexAutoLock lock(m_mutex); - for (std::vector::iterator + for (std::list::iterator i = m_queue.begin(); - i != m_queue.end(); i++) - { + i != m_queue.end(); ++i) { QueuedMinimapUpdate *q = *i; delete q; } } -void MinimapUpdateQueue::addBlock(v3s16 pos, MinimapMapblock *data) +bool MinimapUpdateQueue::addBlock(v3s16 pos, MinimapMapblock *data) { DSTACK(__FUNCTION_NAME); @@ -66,15 +66,14 @@ void MinimapUpdateQueue::addBlock(v3s16 pos, MinimapMapblock *data) Find if block is already in queue. If it is, update the data and quit. */ - for (std::vector::iterator + for (std::list::iterator i = m_queue.begin(); - i != m_queue.end(); i++) - { + i != m_queue.end(); ++i) { QueuedMinimapUpdate *q = *i; if (q->pos == pos) { delete q->data; q->data = data; - return; + return false; } } @@ -85,16 +84,16 @@ void MinimapUpdateQueue::addBlock(v3s16 pos, MinimapMapblock *data) q->pos = pos; q->data = data; m_queue.push_back(q); + return true; } QueuedMinimapUpdate * MinimapUpdateQueue::pop() { JMutexAutoLock lock(m_mutex); - for (std::vector::iterator + for (std::list::iterator i = m_queue.begin(); - i != m_queue.end(); i++) - { + i != m_queue.end(); i++) { QueuedMinimapUpdate *q = *i; m_queue.erase(i); return q; @@ -106,6 +105,22 @@ QueuedMinimapUpdate * MinimapUpdateQueue::pop() Minimap update thread */ +void MinimapUpdateThread::Stop() +{ + JThread::Stop(); + + // give us a nudge + m_queue_sem.Post(); +} + +void MinimapUpdateThread::enqueue_Block(v3s16 pos, MinimapMapblock *data) +{ + if (m_queue.addBlock(pos, data)) + // we had to allocate a new block + m_queue_sem.Post(); +} + + void *MinimapUpdateThread::Thread() { ThreadStarted(); @@ -120,8 +135,13 @@ void *MinimapUpdateThread::Thread() while (!StopRequested()) { + m_queue_sem.Wait(); + if (StopRequested()) break; + while (m_queue.size()) { QueuedMinimapUpdate *q = m_queue.pop(); + if (!q) + break; std::map::iterator it; it = m_blocks_cache.find(q->pos); if (q->data) { @@ -138,7 +158,6 @@ void *MinimapUpdateThread::Thread() data->map_invalidated = false; } } - // sleep_ms(10); } END_DEBUG_EXCEPTION_HANDLER(errorstream) @@ -266,7 +285,7 @@ Mapper::~Mapper() void Mapper::addBlock (v3s16 pos, MinimapMapblock *data) { - m_minimap_update_thread->m_queue.addBlock(pos, data); + m_minimap_update_thread->enqueue_Block(pos, data); } MinimapMode Mapper::getMinimapMode() diff --git a/src/minimap.h b/src/minimap.h index ebb74c4fb..1794da190 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client.h" #include "voxel.h" #include "jthread/jmutex.h" +#include "jthread/jsemaphore.h" #include #include #include @@ -93,8 +94,9 @@ public: ~MinimapUpdateQueue(); - void addBlock(v3s16 pos, MinimapMapblock *data); + bool addBlock(v3s16 pos, MinimapMapblock *data); + // blocking!! QueuedMinimapUpdate *pop(); u32 size() @@ -104,13 +106,15 @@ public: } private: - std::vector m_queue; + std::list m_queue; JMutex m_mutex; }; class MinimapUpdateThread : public JThread { private: + JSemaphore m_queue_sem; + MinimapUpdateQueue m_queue; public: MinimapUpdateThread(IrrlichtDevice *device, Client *client) @@ -124,13 +128,16 @@ public: MinimapPixel *getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height); s16 getAirCount (v3s16 pos, s16 height); video::SColor getColorFromId(u16 id); + + void enqueue_Block(v3s16 pos, MinimapMapblock *data); + IrrlichtDevice *device; Client *client; video::IVideoDriver *driver; ITextureSource *tsrc; + void Stop(); void *Thread(); MinimapData *data; - MinimapUpdateQueue m_queue; std::map m_blocks_cache; }; From b160f8dfe7e3bf8176e3f9f64dc2d9a9868d7fce Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 28 Jun 2015 12:17:36 +0200 Subject: [PATCH 153/670] Minimap update --- minetest.conf.example | 8 ++++++++ src/defaultsettings.cpp | 1 + src/minimap.cpp | 28 ++++++++++++++++++---------- src/minimap.h | 2 ++ src/nodedef.cpp | 3 ++- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index d1f1de6fb..6aaae2b14 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -266,6 +266,14 @@ #enable_mesh_cache = true # Enables caching of facedir rotated meshes +#enable_minimap = true +# Enables minimap +#minimap_shape_round = true +# true - round shape, false - square +#minimap_double_scan_height = true +# true = 256, false = 128 +# useable to make minimap smoother on slower machines + # The time in seconds it takes between repeated # right clicks when holding the right mouse button. #repeat_rightclick_time = 0.25 diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 73e36da98..ecd89242b 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -179,6 +179,7 @@ void set_default_settings(Settings *settings) settings->setDefault("enable_minimap", "true"); settings->setDefault("minimap_shape_round", "true"); + settings->setDefault("minimap_double_scan_height", "true"); settings->setDefault("curl_timeout", "5000"); settings->setDefault("curl_parallel_limit", "8"); diff --git a/src/minimap.cpp b/src/minimap.cpp index 753468c32..9adeb84bc 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -164,6 +164,15 @@ void *MinimapUpdateThread::Thread() return NULL; } +MinimapUpdateThread::~MinimapUpdateThread() +{ + for (std::map::iterator + it = m_blocks_cache.begin(); + it != m_blocks_cache.end(); it++) { + delete it->second; + } +} + MinimapPixel *MinimapUpdateThread::getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height) { pixel_height = height - MAP_BLOCKSIZE; @@ -236,6 +245,12 @@ Mapper::Mapper(IrrlichtDevice *device, Client *client) this->shdrsrc = client->getShaderSource(); m_enable_shaders = g_settings->getBool("enable_shaders"); + m_enable_shaders = g_settings->getBool("enable_shaders"); + if (g_settings->getBool("minimap_double_scan_height")) { + m_surface_mode_scan_height = 256; + } else { + m_surface_mode_scan_height = 128; + } data = new MinimapData; data->mode = MINIMAP_MODE_OFF; data->radar = false; @@ -265,13 +280,6 @@ Mapper::~Mapper() { m_minimap_update_thread->Stop(); m_minimap_update_thread->Wait(); - - for (std::map::iterator - it = m_minimap_update_thread->m_blocks_cache.begin(); - it != m_minimap_update_thread->m_blocks_cache.end(); it++){ - delete it->second; - } - m_meshbuffer->drop(); data->minimap_mask_round->drop(); data->minimap_mask_square->drop(); @@ -303,9 +311,9 @@ void Mapper::setMinimapMode(MinimapMode mode) { static const u16 modeDefs[7 * 3] = { 0, 0, 0, - 0, 256, 256, - 0, 256, 128, - 0, 256, 64, + 0, m_surface_mode_scan_height, 256, + 0, m_surface_mode_scan_height, 128, + 0, m_surface_mode_scan_height, 64, 1, 32, 128, 1, 32, 64, 1, 32, 32}; diff --git a/src/minimap.h b/src/minimap.h index 1794da190..220c3add0 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -124,6 +124,7 @@ public: this->driver = device->getVideoDriver(); this->tsrc = client->getTextureSource(); } + ~MinimapUpdateThread(); void getMap (v3s16 pos, s16 size, s16 height, bool radar); MinimapPixel *getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height); s16 getAirCount (v3s16 pos, s16 height); @@ -148,6 +149,7 @@ private: video::ITexture *minimap_texture; scene::SMeshBuffer *m_meshbuffer; bool m_enable_shaders; + u16 m_surface_mode_scan_height; JMutex m_mutex; public: diff --git a/src/nodedef.cpp b/src/nodedef.cpp index ba1ca2c65..e392f477a 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -787,6 +787,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, bool enable_bumpmapping = g_settings->getBool("enable_bumpmapping"); bool enable_parallax_occlusion = g_settings->getBool("enable_parallax_occlusion"); bool enable_mesh_cache = g_settings->getBool("enable_mesh_cache"); + bool enable_minimap = g_settings->getBool("enable_minimap"); bool use_normal_texture = enable_shaders && (enable_bumpmapping || enable_parallax_occlusion); @@ -797,7 +798,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, ContentFeatures *f = &m_content_features[i]; // minimap pixel color - the average color of a texture - if (f->tiledef[0].name != "") + if (enable_minimap && f->tiledef[0].name != "") f->minimap_color = tsrc->getTextureAverageColor(f->tiledef[0].name); // Figure out the actual tiles to use From 0a90fedabc07a3ba811f13ed8d673136e857ec02 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 28 Jun 2015 14:45:47 +0200 Subject: [PATCH 154/670] Bugfix: minimap was updated only with loading new blocks, allow forced updates with changing player pos --- src/minimap.cpp | 11 ++++++++++- src/minimap.h | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/minimap.cpp b/src/minimap.cpp index 9adeb84bc..02660f969 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -120,6 +120,10 @@ void MinimapUpdateThread::enqueue_Block(v3s16 pos, MinimapMapblock *data) m_queue_sem.Post(); } +void MinimapUpdateThread::forceUpdate() +{ + m_queue_sem.Post(); +} void *MinimapUpdateThread::Thread() { @@ -323,12 +327,17 @@ void Mapper::setMinimapMode(MinimapMode mode) data->scan_height = modeDefs[(int)mode * 3 + 1]; data->map_size = modeDefs[(int)mode * 3 + 2]; data->mode = mode; + m_minimap_update_thread->forceUpdate(); } void Mapper::setPos(v3s16 pos) { JMutexAutoLock lock(m_mutex); - data->pos = pos; + if (pos != data->old_pos) { + data->old_pos = data->pos; + data->pos = pos; + m_minimap_update_thread->forceUpdate(); + } } video::ITexture *Mapper::getMinimapTexture() diff --git a/src/minimap.h b/src/minimap.h index 220c3add0..37bc2f7cb 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -131,7 +131,7 @@ public: video::SColor getColorFromId(u16 id); void enqueue_Block(v3s16 pos, MinimapMapblock *data); - + void forceUpdate(); IrrlichtDevice *device; Client *client; video::IVideoDriver *driver; From 1455267c9e66f64cd49e01aac782060c95bb925e Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 28 Jun 2015 21:11:54 +0200 Subject: [PATCH 155/670] Bugfix: variable type mismatch --- client/shaders/nodes_shader/opengl_fragment.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 0e84eacf9..e531d72b7 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -66,7 +66,7 @@ float find_intersection(vec2 dp, vec2 ds) } float find_intersectionRGB(vec2 dp, vec2 ds) { - const float iterations = 24; + const float iterations = 24.0; const float depth_step = 1.0 / iterations; float depth = 1.0; for (int i = 0 ; i < iterations ; i++) { From 0d65ee878c5301afdbd163aa2274e73588f88ed3 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 2 Mar 2015 18:26:20 +0000 Subject: [PATCH 156/670] Add Lua errors to error dialog --- builtin/fstk/ui.lua | 40 +++++++++++++++++++++++++++-------- src/script/cpp_api/s_base.cpp | 22 +++++++++---------- src/script/cpp_api/s_base.h | 4 ++-- src/server.cpp | 32 ++++++++++++++-------------- 4 files changed, 60 insertions(+), 38 deletions(-) diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 708ea19cf..478a78ad5 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -23,7 +23,7 @@ ui.default = nil function ui.add(child) --TODO check child ui.childlist[child.name] = child - + return child.name end @@ -33,7 +33,7 @@ function ui.delete(child) if ui.childlist[child.name] == nil then return false end - + ui.childlist[child.name] = nil return true end @@ -60,11 +60,33 @@ function ui.update() -- handle errors if gamedata ~= nil and gamedata.errormessage ~= nil then - formspec = "size[12,3.2]" .. - "textarea[1,1;10,2;;ERROR: " .. - core.formspec_escape(gamedata.errormessage) .. - ";]".. - "button[4.5,2.5;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" + local ar = gamedata.errormessage:split("\n") + for i = 1, #ar do + local text = ar[i] + -- Hack to add word wrapping. + -- TODO: Add engine support for wrapping in formspecs + while #text > 80 do + if formspec ~= "" then + formspec = formspec .. "," + end + formspec = formspec .. core.formspec_escape(string.sub(text, 1, 79)) + text = string.sub(text, 80, #text) + end + if formspec ~= "" then + formspec = formspec .. "," + end + formspec = formspec .. core.formspec_escape(text) + end + local error_title + if string.find(gamedata.errormessage, "ModError") then + error_title = fgettext("An error occured in a Lua script, such as a mod:") + else + error_title = fgettext("An error occured:") + end + formspec = "size[12,5]" .. + "label[0.5,0;" .. error_title .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[4.5,4.6;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" else local active_toplevel_ui_elements = 0 for key,value in pairs(ui.childlist) do @@ -77,7 +99,7 @@ function ui.update() end end end - + -- no need to show addons if there ain't a toplevel element if (active_toplevel_ui_elements > 0) then for key,value in pairs(ui.childlist) do @@ -127,7 +149,7 @@ end -------------------------------------------------------------------------------- function ui.handle_events(event) - + for key,value in pairs(ui.childlist) do if value.handle_events ~= nil then diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 8b0b16bfb..e02a6aa0d 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -119,14 +119,14 @@ ScriptApiBase::~ScriptApiBase() } bool ScriptApiBase::loadMod(const std::string &script_path, - const std::string &mod_name) + const std::string &mod_name, std::string *error) { ModNameStorer mod_name_storer(getStack(), mod_name); - return loadScript(script_path); + return loadScript(script_path, error); } -bool ScriptApiBase::loadScript(const std::string &script_path) +bool ScriptApiBase::loadScript(const std::string &script_path, std::string *error) { verbosestream << "Loading and running script from " << script_path << std::endl; @@ -140,13 +140,14 @@ bool ScriptApiBase::loadScript(const std::string &script_path) } ok = ok && !lua_pcall(L, 0, 0, m_errorhandler); if (!ok) { - errorstream << "========== ERROR FROM LUA ===========" << std::endl; - errorstream << "Failed to load and run script from " << std::endl; - errorstream << script_path << ":" << std::endl; - errorstream << std::endl; - errorstream << lua_tostring(L, -1) << std::endl; - errorstream << std::endl; - errorstream << "======= END OF ERROR FROM LUA ========" << std::endl; + std::string error_msg = lua_tostring(L, -1); + if (error) + (*error) = error_msg; + errorstream << "========== ERROR FROM LUA ===========" << std::endl + << "Failed to load and run script from " << std::endl + << script_path << ":" << std::endl << std::endl + << error_msg << std::endl << std::endl + << "======= END OF ERROR FROM LUA ========" << std::endl; lua_pop(L, 1); // Pop error message from stack return false; } @@ -268,4 +269,3 @@ void ScriptApiBase::objectrefGet(lua_State *L, u16 id) lua_remove(L, -2); // object_refs lua_remove(L, -2); // core } - diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index cf9b7b934..ee2835da2 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -51,8 +51,8 @@ public: ScriptApiBase(); virtual ~ScriptApiBase(); - bool loadMod(const std::string &script_path, const std::string &mod_name); - bool loadScript(const std::string &script_path); + bool loadMod(const std::string &script_path, const std::string &mod_name, std::string *error=NULL); + bool loadScript(const std::string &script_path, std::string *error=NULL); /* object */ void addObjectReference(ServerActiveObject *cobj); diff --git a/src/server.cpp b/src/server.cpp index 0e3d94fae..f69c5a935 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -239,11 +239,9 @@ Server::Server( m_mods = modconf.getMods(); std::vector unsatisfied_mods = modconf.getUnsatisfiedMods(); // complain about mods with unsatisfied dependencies - if(!modconf.isConsistent()) - { + if(!modconf.isConsistent()) { for(std::vector::iterator it = unsatisfied_mods.begin(); - it != unsatisfied_mods.end(); ++it) - { + it != unsatisfied_mods.end(); ++it) { ModSpec mod = *it; errorstream << "mod \"" << mod.name << "\" has unsatisfied dependencies: "; for(std::set::iterator dep_it = mod.unsatisfied_depends.begin(); @@ -259,8 +257,7 @@ Server::Server( std::vector names = worldmt_settings.getNames(); std::set load_mod_names; for(std::vector::iterator it = names.begin(); - it != names.end(); ++it) - { + it != names.end(); ++it) { std::string name = *it; if(name.compare(0,9,"load_mod_")==0 && worldmt_settings.getBool(name)) load_mod_names.insert(name.substr(9)); @@ -272,8 +269,7 @@ Server::Server( for(std::vector::iterator it = unsatisfied_mods.begin(); it != unsatisfied_mods.end(); ++it) load_mod_names.erase((*it).name); - if(!load_mod_names.empty()) - { + if(!load_mod_names.empty()) { errorstream << "The following mods could not be found:"; for(std::set::iterator it = load_mod_names.begin(); it != load_mod_names.end(); ++it) @@ -296,15 +292,16 @@ Server::Server( m_script = new GameScripting(this); std::string script_path = getBuiltinLuaPath() + DIR_DELIM "init.lua"; + std::string error_msg; - if (!m_script->loadMod(script_path, BUILTIN_MOD_NAME)) { - throw ModError("Failed to load and run " + script_path); - } + if (!m_script->loadMod(script_path, BUILTIN_MOD_NAME, &error_msg)) + throw ModError("Failed to load and run " + script_path + + "\nError from Lua:\n" + error_msg); // Print mods infostream << "Server: Loading mods: "; for(std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++){ + i != m_mods.end(); i++) { const ModSpec &mod = *i; infostream << mod.name << " "; } @@ -314,18 +311,21 @@ Server::Server( i != m_mods.end(); i++) { const ModSpec &mod = *i; if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) { - errorstream << "Error loading mod \"" << mod.name + std::ostringstream err; + err << "Error loading mod \"" << mod.name << "\": mod_name does not follow naming conventions: " << "Only chararacters [a-z0-9_] are allowed." << std::endl; - throw ModError("Mod \"" + mod.name + "\" does not follow naming conventions."); + errorstream << err.str().c_str(); + throw ModError(err.str()); } std::string script_path = mod.path + DIR_DELIM "init.lua"; infostream << " [" << padStringRight(mod.name, 12) << "] [\"" << script_path << "\"]" << std::endl; - if (!m_script->loadMod(script_path, mod.name)) { + if (!m_script->loadMod(script_path, mod.name, &error_msg)) { errorstream << "Server: Failed to load and run " << script_path << std::endl; - throw ModError("Failed to load and run " + script_path); + throw ModError("Failed to load and run " + script_path + + "\nError from Lua:\n" + error_msg); } } From 4e28c8d3c8af51b728a049c28806e0f740ac0106 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Mon, 29 Jun 2015 02:39:22 -0400 Subject: [PATCH 157/670] Fix *BSD build with GNU iconv --- src/CMakeLists.txt | 9 ++++++++- src/util/string.cpp | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2f555860..0ed0b8015 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -249,11 +249,18 @@ else() else() set(PLATFORM_LIBS -lrt ${PLATFORM_LIBS}) endif(APPLE) - #set(CLIENT_PLATFORM_LIBS -lXxf86vm) + # This way Xxf86vm is found on OpenBSD too find_library(XXF86VM_LIBRARY Xxf86vm) mark_as_advanced(XXF86VM_LIBRARY) set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY}) + + # Prefer local iconv if installed + find_library(ICONV_LIBRARY iconv) + mark_as_advanced(ICONV_LIBRARY) + if (ICONV_LIBRARY) + set(PLATFORM_LIBS ${PLATFORM_LIBS} ${ICONV_LIBRARY}) + endif() endif() check_include_files(endian.h HAVE_ENDIAN_H) diff --git a/src/util/string.cpp b/src/util/string.cpp index 36a9481c5..187d2a078 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -30,22 +30,28 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #ifndef _WIN32 -#include + #include #else -#define _WIN32_WINNT 0x0501 -#include + #define _WIN32_WINNT 0x0501 + #include +#endif + +#if defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__NetBSD__) || \ + defined(__OpenBSD__) || defined(__DragonFly__)) + #define BSD_ICONV_USED #endif static bool parseHexColorString(const std::string &value, video::SColor &color); static bool parseNamedColorString(const std::string &value, video::SColor &color); #ifndef _WIN32 + bool convert(const char *to, const char *from, char *outbuf, size_t outbuf_size, char *inbuf, size_t inbuf_size) { iconv_t cd = iconv_open(to, from); -#if defined(__FreeBSD__) || defined(__FreeBSD) +#ifdef BSD_ICONV_USED const char *inbuf_ptr = inbuf; #else char *inbuf_ptr = inbuf; @@ -88,7 +94,7 @@ std::wstring utf8_to_wide(const std::string &input) delete[] outbuf; return L""; } - std::wstring out((wchar_t*)outbuf); + std::wstring out((wchar_t *)outbuf); delete[] inbuf; delete[] outbuf; @@ -97,12 +103,15 @@ std::wstring utf8_to_wide(const std::string &input) } #ifdef __ANDROID__ + // TODO: this is an ugly fix for wide_to_utf8 somehow not working on android std::string wide_to_utf8(const std::wstring &input) { return wide_to_narrow(input); } -#else + +#else // __ANDROID__ + std::string wide_to_utf8(const std::wstring &input) { size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t); @@ -128,14 +137,18 @@ std::string wide_to_utf8(const std::wstring &input) return out; } -#endif -#else + +#endif // __ANDROID__ + +#else // _WIN32 + std::wstring utf8_to_wide(const std::string &input) { size_t outbuf_size = input.size() + 1; wchar_t *outbuf = new wchar_t[outbuf_size]; memset(outbuf, 0, outbuf_size * sizeof(wchar_t)); - MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(), outbuf, outbuf_size); + MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(), + outbuf, outbuf_size); std::wstring out(outbuf); delete[] outbuf; return out; @@ -146,18 +159,20 @@ std::string wide_to_utf8(const std::wstring &input) size_t outbuf_size = (input.size() + 1) * 6; char *outbuf = new char[outbuf_size]; memset(outbuf, 0, outbuf_size); - WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(), outbuf, outbuf_size, NULL, NULL); + WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(), + outbuf, outbuf_size, NULL, NULL); std::string out(outbuf); delete[] outbuf; return out; } -#endif + +#endif // _WIN32 // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str) { - wchar_t* nstr = 0; + wchar_t *nstr = NULL; #if defined(_WIN32) int nResult = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR) str, -1, 0, 0); if (nResult == 0) { @@ -168,7 +183,7 @@ wchar_t *narrow_to_wide_c(const char *str) } #else size_t len = strlen(str); - nstr = new wchar_t[len+1]; + nstr = new wchar_t[len + 1]; std::wstring intermediate = narrow_to_wide(str); memset(nstr, 0, (len + 1) * sizeof(wchar_t)); From 29dda9f356042c403b3b7da1d717d32b45c9b6de Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 29 Jun 2015 11:06:03 +0200 Subject: [PATCH 158/670] Add UpdateThread and use it for minimap and mesh threads --- src/client.cpp | 37 +++++++-------------- src/client.h | 20 +++++++----- src/minimap.cpp | 82 +++++++++++++---------------------------------- src/minimap.h | 12 +++---- src/util/thread.h | 61 +++++++++++++++++++++++++++++++++++ 5 files changed, 114 insertions(+), 98 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index ce48df953..b02e6229c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -139,7 +139,7 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se // Returned pointer must be deleted // Returns NULL if queue is empty -QueuedMeshUpdate * MeshUpdateQueue::pop() +QueuedMeshUpdate *MeshUpdateQueue::pop() { JMutexAutoLock lock(m_mutex); @@ -162,26 +162,17 @@ QueuedMeshUpdate * MeshUpdateQueue::pop() MeshUpdateThread */ -void * MeshUpdateThread::Thread() +void MeshUpdateThread::enqueueUpdate(v3s16 p, MeshMakeData *data, + bool ack_block_to_server, bool urgent) { - ThreadStarted(); + m_queue_in.addBlock(p, data, ack_block_to_server, urgent); + deferUpdate(); +} - log_register_thread("MeshUpdateThread"); - - DSTACK(__FUNCTION_NAME); - - BEGIN_DEBUG_EXCEPTION_HANDLER - - porting::setThreadName("MeshUpdateThread"); - - while(!StopRequested()) - { - QueuedMeshUpdate *q = m_queue_in.pop(); - if(q == NULL) - { - sleep_ms(3); - continue; - } +void MeshUpdateThread::doUpdate() +{ + QueuedMeshUpdate *q; + while ((q = m_queue_in.pop())) { ScopeProfiler sp(g_profiler, "Client: Mesh making"); @@ -196,10 +187,6 @@ void * MeshUpdateThread::Thread() delete q; } - - END_DEBUG_EXCEPTION_HANDLER(errorstream) - - return NULL; } /* @@ -230,7 +217,7 @@ Client::Client( m_nodedef(nodedef), m_sound(sound), m_event(event), - m_mesh_update_thread(this), + m_mesh_update_thread(), m_env( new ClientMap(this, this, control, device->getSceneManager()->getRootSceneNode(), @@ -1600,7 +1587,7 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent) } // Add task to queue - m_mesh_update_thread.m_queue_in.addBlock(p, data, ack_to_server, urgent); + m_mesh_update_thread.enqueueUpdate(p, data, ack_to_server, urgent); } void Client::addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server, bool urgent) diff --git a/src/client.h b/src/client.h index 474daf3bc..efd373e42 100644 --- a/src/client.h +++ b/src/client.h @@ -113,23 +113,27 @@ struct MeshUpdateResult } }; -class MeshUpdateThread : public JThread +class MeshUpdateThread : public UpdateThread { +private: + MeshUpdateQueue m_queue_in; + +protected: + const char *getName() + { return "MeshUpdateThread"; } + virtual void doUpdate(); + public: - MeshUpdateThread(IGameDef *gamedef): - m_gamedef(gamedef) + MeshUpdateThread() { } - void * Thread(); - - MeshUpdateQueue m_queue_in; + void enqueueUpdate(v3s16 p, MeshMakeData *data, + bool ack_block_to_server, bool urgent); MutexedQueue m_queue_out; - IGameDef *m_gamedef; - v3s16 m_camera_offset; }; diff --git a/src/minimap.cpp b/src/minimap.cpp index 02660f969..8fe8b466d 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -105,67 +105,31 @@ QueuedMinimapUpdate * MinimapUpdateQueue::pop() Minimap update thread */ -void MinimapUpdateThread::Stop() -{ - JThread::Stop(); - - // give us a nudge - m_queue_sem.Post(); -} - void MinimapUpdateThread::enqueue_Block(v3s16 pos, MinimapMapblock *data) { - if (m_queue.addBlock(pos, data)) - // we had to allocate a new block - m_queue_sem.Post(); + m_queue.addBlock(pos, data); + deferUpdate(); } -void MinimapUpdateThread::forceUpdate() +void MinimapUpdateThread::doUpdate() { - m_queue_sem.Post(); -} - -void *MinimapUpdateThread::Thread() -{ - ThreadStarted(); - - log_register_thread("MinimapUpdateThread"); - - DSTACK(__FUNCTION_NAME); - - BEGIN_DEBUG_EXCEPTION_HANDLER - - porting::setThreadName("MinimapUpdateThread"); - - while (!StopRequested()) { - - m_queue_sem.Wait(); - if (StopRequested()) break; - - while (m_queue.size()) { - QueuedMinimapUpdate *q = m_queue.pop(); - if (!q) - break; - std::map::iterator it; - it = m_blocks_cache.find(q->pos); - if (q->data) { - m_blocks_cache[q->pos] = q->data; - } else if (it != m_blocks_cache.end()) { - delete it->second; - m_blocks_cache.erase(it); - } - } - - if (data->map_invalidated) { - if (data->mode != MINIMAP_MODE_OFF) { - getMap(data->pos, data->map_size, data->scan_height, data->radar); - data->map_invalidated = false; - } + while (m_queue.size()) { + QueuedMinimapUpdate *q = m_queue.pop(); + std::map::iterator it; + it = m_blocks_cache.find(q->pos); + if (q->data) { + m_blocks_cache[q->pos] = q->data; + } else if (it != m_blocks_cache.end()) { + delete it->second; + m_blocks_cache.erase(it); + } + } + if (data->map_invalidated) { + if (data->mode != MINIMAP_MODE_OFF) { + getMap(data->pos, data->map_size, data->scan_height, data->radar); + data->map_invalidated = false; } } - END_DEBUG_EXCEPTION_HANDLER(errorstream) - - return NULL; } MinimapUpdateThread::~MinimapUpdateThread() @@ -177,7 +141,7 @@ MinimapUpdateThread::~MinimapUpdateThread() } } -MinimapPixel *MinimapUpdateThread::getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height) +MinimapPixel *MinimapUpdateThread::getMinimapPixel(v3s16 pos, s16 height, s16 &pixel_height) { pixel_height = height - MAP_BLOCKSIZE; v3s16 blockpos_max, blockpos_min, relpos; @@ -198,7 +162,7 @@ MinimapPixel *MinimapUpdateThread::getMinimapPixel (v3s16 pos, s16 height, s16 & return NULL; } -s16 MinimapUpdateThread::getAirCount (v3s16 pos, s16 height) +s16 MinimapUpdateThread::getAirCount(v3s16 pos, s16 height) { s16 air_count = 0; v3s16 blockpos_max, blockpos_min, relpos; @@ -215,7 +179,7 @@ s16 MinimapUpdateThread::getAirCount (v3s16 pos, s16 height) return air_count; } -void MinimapUpdateThread::getMap (v3s16 pos, s16 size, s16 height, bool radar) +void MinimapUpdateThread::getMap(v3s16 pos, s16 size, s16 height, bool radar) { v3s16 p = v3s16 (pos.X - size / 2, pos.Y, pos.Z - size / 2); @@ -327,7 +291,7 @@ void Mapper::setMinimapMode(MinimapMode mode) data->scan_height = modeDefs[(int)mode * 3 + 1]; data->map_size = modeDefs[(int)mode * 3 + 2]; data->mode = mode; - m_minimap_update_thread->forceUpdate(); + m_minimap_update_thread->deferUpdate(); } void Mapper::setPos(v3s16 pos) @@ -336,7 +300,7 @@ void Mapper::setPos(v3s16 pos) if (pos != data->old_pos) { data->old_pos = data->pos; data->pos = pos; - m_minimap_update_thread->forceUpdate(); + m_minimap_update_thread->deferUpdate(); } } diff --git a/src/minimap.h b/src/minimap.h index 37bc2f7cb..3cb7da898 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -96,7 +96,6 @@ public: bool addBlock(v3s16 pos, MinimapMapblock *data); - // blocking!! QueuedMinimapUpdate *pop(); u32 size() @@ -110,12 +109,16 @@ private: JMutex m_mutex; }; -class MinimapUpdateThread : public JThread +class MinimapUpdateThread : public UpdateThread { private: - JSemaphore m_queue_sem; MinimapUpdateQueue m_queue; +protected: + const char *getName() + { return "MinimapUpdateThread"; } + virtual void doUpdate(); + public: MinimapUpdateThread(IrrlichtDevice *device, Client *client) { @@ -131,13 +134,10 @@ public: video::SColor getColorFromId(u16 id); void enqueue_Block(v3s16 pos, MinimapMapblock *data); - void forceUpdate(); IrrlichtDevice *device; Client *client; video::IVideoDriver *driver; ITextureSource *tsrc; - void Stop(); - void *Thread(); MinimapData *data; std::map m_blocks_cache; }; diff --git a/src/util/thread.h b/src/util/thread.h index eda9c0ca2..faa5869ca 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../jthread/jmutex.h" #include "../jthread/jmutexautolock.h" #include "porting.h" +#include "log.h" template class MutexedVariable @@ -208,5 +209,65 @@ private: MutexedQueue< GetRequest > m_queue; }; +class UpdateThread : public JThread +{ +private: + JSemaphore m_update_sem; + +protected: + virtual void doUpdate() = 0; + virtual const char *getName() = 0; + +public: + UpdateThread() + { + } + ~UpdateThread() + {} + + void deferUpdate() + { + m_update_sem.Post(); + } + + void Stop() + { + JThread::Stop(); + + // give us a nudge + m_update_sem.Post(); + } + + void *Thread() + { + ThreadStarted(); + + const char *thread_name = getName(); + + log_register_thread(thread_name); + + DSTACK(__FUNCTION_NAME); + + BEGIN_DEBUG_EXCEPTION_HANDLER + + porting::setThreadName(thread_name); + + while (!StopRequested()) { + + m_update_sem.Wait(); + + // Empty the queue, just in case doUpdate() is expensive + while (m_update_sem.GetValue()) m_update_sem.Wait(); + + if (StopRequested()) break; + + doUpdate(); + } + END_DEBUG_EXCEPTION_HANDLER(errorstream) + + return NULL; + } +}; + #endif From 91f95fd4df82645e23a9734795d11ec9b8e522f8 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 30 Jun 2015 06:32:52 +0100 Subject: [PATCH 159/670] Biome API: Increase heat and humidity noise spreads to 1000 --- minetest.conf.example | 4 ++-- src/mapgen.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 6aaae2b14..6b0525fde 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -541,9 +541,9 @@ # other noise parameters are shown in positional format to save space. # Noise parameters for biome API temperature, humidity and biome blend -#mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 +#mg_biome_np_heat = 50, 50, (1000, 1000, 1000), 5349, 3, 0.5, 2.0 #mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 -#mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 +#mg_biome_np_humidity = 50, 50, (1000, 1000, 1000), 842, 3, 0.5, 2.0 #mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 #mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 diff --git a/src/mapgen.h b/src/mapgen.h index 74fca4f5a..b0758ba41 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -127,9 +127,9 @@ struct MapgenParams { seed(0), water_level(1), flags(MG_TREES | MG_CAVES | MG_LIGHT), - np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)), + np_biome_heat(NoiseParams(50, 50, v3f(1000.0, 1000.0, 1000.0), 5349, 3, 0.5, 2.0)), np_biome_heat_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0)), - np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)), + np_biome_humidity(NoiseParams(50, 50, v3f(1000.0, 1000.0, 1000.0), 842, 3, 0.5, 2.0)), np_biome_humidity_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)), sparams(NULL) {} From 85f3d575ec3d99ef2ce680d4a2546e4d31327d83 Mon Sep 17 00:00:00 2001 From: "jeanpatrick.guerrero@gmail.com" Date: Mon, 29 Jun 2015 15:41:05 +0200 Subject: [PATCH 160/670] Fix bugs in mainmenu --- builtin/mainmenu/common.lua | 31 ++++++++++++++++++ builtin/mainmenu/tab_server.lua | 47 ++++----------------------- builtin/mainmenu/tab_singleplayer.lua | 47 ++++----------------------- 3 files changed, 44 insertions(+), 81 deletions(-) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index 6126c61a4..bcb075f99 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -300,3 +300,34 @@ function is_server_protocol_compat_or_error(proto_min, proto_max) return true end +-------------------------------------------------------------------------------- +function menu_worldmt(selected, setting, value) + local world = menudata.worldlist:get_list()[selected] + if world then + local filename = world.path .. DIR_DELIM .. "world.mt" + local world_conf = Settings(filename) + + if value then + if not world_conf:write() then + core.log("error", "Failed to write world config file") + end + return world_conf:set(setting, value) + else + return world_conf:get(setting) + end + else + return nil + end +end + +function menu_worldmt_legacy() + local modes = {"creative_mode", "enable_damage"} + for _, mode in pairs(modes) do + local mode = menu_worldmt(selected, ""..mode.."") + if mode then + core.setting_set(""..mode.."", mode) + else + menu_worldmt(selected, ""..mode.."", core.setting_get(""..mode.."")) + end + end +end diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua index d78af768f..2362d32a1 100644 --- a/builtin/mainmenu/tab_server.lua +++ b/builtin/mainmenu/tab_server.lua @@ -67,32 +67,9 @@ local function main_button_handler(this, fields, name, tabdata) if fields["srv_worlds"] ~= nil then local event = core.explode_textlist_event(fields["srv_worlds"]) - local selected = core.get_textlist_index("srv_worlds") - if selected ~= nil then - local filename = menudata.worldlist:get_list()[selected].path - local worldconfig = modmgr.get_worldconfig(filename) - filename = filename .. DIR_DELIM .. "world.mt" - if worldconfig.creative_mode ~= nil then - core.setting_set("creative_mode", worldconfig.creative_mode) - else - local worldfile = Settings(filename) - worldfile:set("creative_mode", core.setting_get("creative_mode")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - if worldconfig.enable_damage ~= nil then - core.setting_set("enable_damage", worldconfig.enable_damage) - else - local worldfile = Settings(filename) - worldfile:set("enable_damage", core.setting_get("enable_damage")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - end + menu_worldmt_legacy() if event.type == "DCL" then world_doubleclick = true @@ -111,28 +88,16 @@ local function main_button_handler(this, fields, name, tabdata) if fields["cb_creative_mode"] then core.setting_set("creative_mode", fields["cb_creative_mode"]) local selected = core.get_textlist_index("srv_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"]) - local worldfile = Settings(filename) - worldfile:set("creative_mode", fields["cb_creative_mode"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end if fields["cb_enable_damage"] then core.setting_set("enable_damage", fields["cb_enable_damage"]) local selected = core.get_textlist_index("srv_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"]) - local worldfile = Settings(filename) - worldfile:set("enable_damage", fields["cb_enable_damage"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end @@ -159,9 +124,11 @@ local function main_button_handler(this, fields, name, tabdata) --update last game local world = menudata.worldlist:get_raw_element(gamedata.selected_world) + if world then + local game, index = gamemgr.find_by_gameid(world.gameid) + core.setting_set("menu_last_game", game.id) + end - local game,index = gamemgr.find_by_gameid(world.gameid) - core.setting_set("menu_last_game",game.id) core.start() return true end diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index c2b850e44..916b0c188 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -23,9 +23,9 @@ local function current_game() end local function singleplayer_refresh_gamebar() - + local old_bar = ui.find_by_name("game_button_bar") - + if old_bar ~= nil then old_bar:delete() end @@ -76,7 +76,7 @@ end local function get_formspec(tabview, name, tabdata) local retval = "" - + local index = filterlist.get_current_index(menudata.worldlist, tonumber(core.setting_get("mainmenu_last_selected_world")) ) @@ -105,32 +105,9 @@ local function main_button_handler(this, fields, name, tabdata) if fields["sp_worlds"] ~= nil then local event = core.explode_textlist_event(fields["sp_worlds"]) - local selected = core.get_textlist_index("sp_worlds") - if selected ~= nil then - local filename = menudata.worldlist:get_list()[selected].path - local worldconfig = modmgr.get_worldconfig(filename) - filename = filename .. DIR_DELIM .. "world.mt" - if worldconfig.creative_mode ~= nil then - core.setting_set("creative_mode", worldconfig.creative_mode) - else - local worldfile = Settings(filename) - worldfile:set("creative_mode", core.setting_get("creative_mode")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - if worldconfig.enable_damage ~= nil then - core.setting_set("enable_damage", worldconfig.enable_damage) - else - local worldfile = Settings(filename) - worldfile:set("enable_damage", core.setting_get("enable_damage")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - end + menu_worldmt_legacy() if event.type == "DCL" then world_doubleclick = true @@ -150,28 +127,16 @@ local function main_button_handler(this, fields, name, tabdata) if fields["cb_creative_mode"] then core.setting_set("creative_mode", fields["cb_creative_mode"]) local selected = core.get_textlist_index("sp_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"]) - local worldfile = Settings(filename) - worldfile:set("creative_mode", fields["cb_creative_mode"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end if fields["cb_enable_damage"] then core.setting_set("enable_damage", fields["cb_enable_damage"]) local selected = core.get_textlist_index("sp_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"]) - local worldfile = Settings(filename) - worldfile:set("enable_damage", fields["cb_enable_damage"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end From 29b0dc89e6789bce8663b74feeb32f1961a784d7 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 30 Jun 2015 19:58:06 +0200 Subject: [PATCH 161/670] Fix single click world select --- builtin/mainmenu/common.lua | 16 ++++++++-------- builtin/mainmenu/tab_server.lua | 2 +- builtin/mainmenu/tab_singleplayer.lua | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index bcb075f99..5cd16a9ea 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -307,7 +307,7 @@ function menu_worldmt(selected, setting, value) local filename = world.path .. DIR_DELIM .. "world.mt" local world_conf = Settings(filename) - if value then + if value ~= nil then if not world_conf:write() then core.log("error", "Failed to write world config file") end @@ -320,14 +320,14 @@ function menu_worldmt(selected, setting, value) end end -function menu_worldmt_legacy() - local modes = {"creative_mode", "enable_damage"} - for _, mode in pairs(modes) do - local mode = menu_worldmt(selected, ""..mode.."") - if mode then - core.setting_set(""..mode.."", mode) +function menu_worldmt_legacy(selected) + local modes_names = {"creative_mode", "enable_damage"} + for _, mode_name in pairs(modes_names) do + local mode_val = menu_worldmt(selected, mode_name) + if mode_val ~= nil then + core.setting_set(mode_name, mode_val) else - menu_worldmt(selected, ""..mode.."", core.setting_get(""..mode.."")) + menu_worldmt(selected, mode_name, core.setting_get(mode_name)) end end end diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua index 2362d32a1..3459f3f2f 100644 --- a/builtin/mainmenu/tab_server.lua +++ b/builtin/mainmenu/tab_server.lua @@ -69,7 +69,7 @@ local function main_button_handler(this, fields, name, tabdata) local event = core.explode_textlist_event(fields["srv_worlds"]) local selected = core.get_textlist_index("srv_worlds") - menu_worldmt_legacy() + menu_worldmt_legacy(selected) if event.type == "DCL" then world_doubleclick = true diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index 916b0c188..a7cf5120c 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -107,7 +107,7 @@ local function main_button_handler(this, fields, name, tabdata) local event = core.explode_textlist_event(fields["sp_worlds"]) local selected = core.get_textlist_index("sp_worlds") - menu_worldmt_legacy() + menu_worldmt_legacy(selected) if event.type == "DCL" then world_doubleclick = true From 842579eb8c31e6a5d4fb3a56413380b11b7252b7 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 30 Jun 2015 21:04:06 +0200 Subject: [PATCH 162/670] Close keybind settings menu with esc --- src/guiKeyChangeMenu.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/guiKeyChangeMenu.cpp b/src/guiKeyChangeMenu.cpp index 008ac8c5d..261592394 100644 --- a/src/guiKeyChangeMenu.cpp +++ b/src/guiKeyChangeMenu.cpp @@ -269,8 +269,7 @@ bool GUIKeyChangeMenu::resetMenu() bool GUIKeyChangeMenu::OnEvent(const SEvent& event) { if (event.EventType == EET_KEY_INPUT_EVENT && activeKey >= 0 - && event.KeyInput.PressedDown) - { + && event.KeyInput.PressedDown) { bool prefer_character = shift_down; KeyPress kp(event.KeyInput, prefer_character); @@ -328,9 +327,12 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event) return true; } } - } - if (event.EventType == EET_GUI_EVENT) - { + } else if (event.EventType == EET_KEY_INPUT_EVENT && activeKey < 0 + && event.KeyInput.PressedDown + && event.KeyInput.Key == irr::KEY_ESCAPE) { + quitMenu(); + return true; + } else if (event.EventType == EET_GUI_EVENT) { if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) { From 370a33686ac6ce731c989bcd513aa351666ab5ae Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 30 Jun 2015 21:14:28 +0200 Subject: [PATCH 163/670] Defer minimap update when shape changed --- src/minimap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/minimap.cpp b/src/minimap.cpp index 8fe8b466d..b26f8c665 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -273,6 +273,7 @@ void Mapper::toggleMinimapShape() { data->minimap_shape_round = !data->minimap_shape_round; g_settings->setBool(("minimap_shape_round"), data->minimap_shape_round); + m_minimap_update_thread->deferUpdate(); } void Mapper::setMinimapMode(MinimapMode mode) From 9e3e6dc5ec8ea63d65c635fcac0c80e0cd0e666d Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 30 Jun 2015 21:34:23 +0200 Subject: [PATCH 164/670] Make m_blocks_cache private @RealBadAngel has removed all outside access of the cache. --- src/minimap.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/minimap.h b/src/minimap.h index 3cb7da898..4ca0451b7 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -113,6 +113,7 @@ class MinimapUpdateThread : public UpdateThread { private: MinimapUpdateQueue m_queue; + std::map m_blocks_cache; protected: const char *getName() @@ -139,7 +140,6 @@ public: video::IVideoDriver *driver; ITextureSource *tsrc; MinimapData *data; - std::map m_blocks_cache; }; class Mapper From d75009a75853bd188f132e93165622c5e1315f70 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 1 Jul 2015 04:12:55 +0200 Subject: [PATCH 165/670] Add android tools environment to gitignore Previously, if you did `make envpaths` (as described in README.android), the new file got listed by git as new file. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 238be2676..42cb718a3 100644 --- a/.gitignore +++ b/.gitignore @@ -92,6 +92,7 @@ build/android/jni/src build/android/libs build/android/obj build/android/path.cfg +build/android/and_env build/android/AndroidManifest.xml timestamp From c0dafa1c10918af03227941f14b6c5b7285c27ad Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 30 Jun 2015 14:31:54 +0100 Subject: [PATCH 166/670] Cavegen: Cleanup code. Define constant for MGV7_LAVA_DEPTH --- src/cavegen.cpp | 106 +++++++++++++++++++++++++++--------------------- src/cavegen.h | 1 + 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/src/cavegen.cpp b/src/cavegen.cpp index 1786b252d..8bb8b847a 100644 --- a/src/cavegen.cpp +++ b/src/cavegen.cpp @@ -32,11 +32,11 @@ NoiseParams nparams_caveliquids(0, 1, v3f(150.0, 150.0, 150.0), 776, 3, 0.6, 2.0 CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) { - this->mg = mg; - this->vm = mg->vm; - this->ndef = mg->ndef; - this->water_level = mg->water_level; - this->ps = ps; + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->ps = ps; this->c_water_source = mg->c_water_source; this->c_lava_source = mg->c_lava_source; this->c_ice = mg->c_ice; @@ -45,8 +45,8 @@ CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) { dswitchint = ps->range(1, 14); flooded = ps->range(1, 2) == 2; - part_max_length_rs = ps->range(2, 4); - tunnel_routepoints = ps->range(5, ps->range(15, 30)); + part_max_length_rs = ps->range(2, 4); + tunnel_routepoints = ps->range(5, ps->range(15, 30)); min_tunnel_diameter = 5; max_tunnel_diameter = ps->range(7, ps->range(8, 24)); @@ -157,7 +157,7 @@ void CaveV5::makeTunnel(bool dirswitch) { p = orpi + of + rs / 2; if (p.Z >= node_min.Z && p.Z <= node_max.Z && - p.X >= node_min.X && p.X <= node_max.X) { + p.X >= node_min.X && p.X <= node_max.X) { u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X); s16 h = mg->heightmap[index]; if (h < p.Y) @@ -215,7 +215,7 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { startp += of; float nval = NoisePerlin3D(np_caveliquids, startp.X, - startp.Y, startp.Z, mg->seed); + startp.Y, startp.Z, mg->seed); MapNode liquidnode = nval < 0.40 ? lavanode : waternode; v3f fp = orp + vec * f; @@ -238,7 +238,7 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { s16 maxabsxz = MYMAX(abs(x0), abs(z0)); s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) : - rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { if (large_cave_is_flat) { @@ -251,9 +251,10 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { p += of; if (!is_ravine && mg->heightmap && should_make_cave_hole && - p.X <= node_max.X && p.Z <= node_max.Z) { + p.X <= node_max.X && p.Z <= node_max.Z) { int maplen = node_max.X - node_min.X + 1; - int idx = (p.Z - node_min.Z) * maplen + (p.X - node_min.X); + int idx = (p.Z - node_min.Z) * maplen + + (p.X - node_min.X); if (p.Y >= mg->heightmap[idx] - 2) continue; } @@ -269,10 +270,13 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; int full_ymax = node_max.Y + MAP_BLOCKSIZE; - if (flooded && full_ymin < water_level && full_ymax > water_level) - vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode; + if (flooded && full_ymin < water_level && + full_ymax > water_level) + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; else if (flooded && full_ymax < water_level) - vm->m_data[i] = (p.Y < startp.Y - 4) ? liquidnode : airnode; + vm->m_data[i] = (p.Y < startp.Y - 4) ? + liquidnode : airnode; else vm->m_data[i] = airnode; } @@ -285,24 +289,24 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_cave) { - this->mg = mg; - this->vm = mg->vm; - this->ndef = mg->ndef; - this->water_level = mg->water_level; - this->large_cave = is_large_cave; - this->ps = ps; - this->ps2 = ps2; + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->large_cave = is_large_cave; + this->ps = ps; + this->ps2 = ps2; this->c_water_source = mg->c_water_source; this->c_lava_source = mg->c_lava_source; min_tunnel_diameter = 2; max_tunnel_diameter = ps->range(2, 6); - dswitchint = ps->range(1, 14); - flooded = true; + dswitchint = ps->range(1, 14); + flooded = true; if (large_cave) { - part_max_length_rs = ps->range(2,4); - tunnel_routepoints = ps->range(5, ps->range(15,30)); + part_max_length_rs = ps->range(2,4); + tunnel_routepoints = ps->range(5, ps->range(15,30)); min_tunnel_diameter = 5; max_tunnel_diameter = ps->range(7, ps->range(8,24)); } else { @@ -438,7 +442,8 @@ void CaveV6::makeTunnel(bool dirswitch) { v3s16 p1 = orpi + veci + of + rs / 2; if (p1.Z >= node_min.Z && p1.Z <= node_max.Z && p1.X >= node_min.X && p1.X <= node_max.X) { - u32 index1 = (p1.Z - node_min.Z) * mg->ystride + (p1.X - node_min.X); + u32 index1 = (p1.Z - node_min.Z) * mg->ystride + + (p1.X - node_min.X); h1 = mg->heightmap[index1]; } else { h1 = water_level; // If not in heightmap @@ -447,7 +452,8 @@ void CaveV6::makeTunnel(bool dirswitch) { v3s16 p2 = orpi + of + rs / 2; if (p2.Z >= node_min.Z && p2.Z <= node_max.Z && p2.X >= node_min.X && p2.X <= node_max.X) { - u32 index2 = (p2.Z - node_min.Z) * mg->ystride + (p2.X - node_min.X); + u32 index2 = (p2.Z - node_min.Z) * mg->ystride + + (p2.X - node_min.X); h2 = mg->heightmap[index2]; } else { h2 = water_level; @@ -540,10 +546,13 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; int full_ymax = node_max.Y + MAP_BLOCKSIZE; - if (flooded && full_ymin < water_level && full_ymax > water_level) { - vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode; + if (flooded && full_ymin < water_level && + full_ymax > water_level) { + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; } else if (flooded && full_ymax < water_level) { - vm->m_data[i] = (p.Y < startp.Y - 2) ? lavanode : airnode; + vm->m_data[i] = (p.Y < startp.Y - 2) ? + lavanode : airnode; } else { vm->m_data[i] = airnode; } @@ -564,11 +573,11 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { - this->mg = mg; - this->vm = mg->vm; - this->ndef = mg->ndef; - this->water_level = mg->water_level; - this->ps = ps; + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->ps = ps; this->c_water_source = mg->c_water_source; this->c_lava_source = mg->c_lava_source; this->c_ice = mg->c_ice; @@ -577,8 +586,8 @@ CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { dswitchint = ps->range(1, 14); flooded = ps->range(1, 2) == 2; - part_max_length_rs = ps->range(2, 4); - tunnel_routepoints = ps->range(5, ps->range(15, 30)); + part_max_length_rs = ps->range(2, 4); + tunnel_routepoints = ps->range(5, ps->range(15, 30)); min_tunnel_diameter = 5; max_tunnel_diameter = ps->range(7, ps->range(8, 24)); @@ -748,8 +757,9 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { startp += of; float nval = NoisePerlin3D(np_caveliquids, startp.X, - startp.Y, startp.Z, mg->seed); - MapNode liquidnode = (nval < 0.40 && node_max.Y < -256) ? lavanode : waternode; + startp.Y, startp.Z, mg->seed); + MapNode liquidnode = (nval < 0.40 && node_max.Y < MGV7_LAVA_DEPTH) ? + lavanode : waternode; v3f fp = orp + vec * f; fp.X += 0.1 * ps->range(-10, 10); @@ -771,7 +781,7 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { s16 maxabsxz = MYMAX(abs(x0), abs(z0)); s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) : - rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { if (large_cave_is_flat) { @@ -784,9 +794,10 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { p += of; if (!is_ravine && mg->heightmap && should_make_cave_hole && - p.X <= node_max.X && p.Z <= node_max.Z) { + p.X <= node_max.X && p.Z <= node_max.Z) { int maplen = node_max.X - node_min.X + 1; - int idx = (p.Z - node_min.Z) * maplen + (p.X - node_min.X); + int idx = (p.Z - node_min.Z) * maplen + + (p.X - node_min.X); if (p.Y >= mg->heightmap[idx] - 2) continue; } @@ -802,10 +813,13 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; int full_ymax = node_max.Y + MAP_BLOCKSIZE; - if (flooded && full_ymin < water_level && full_ymax > water_level) - vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode; + if (flooded && full_ymin < water_level && + full_ymax > water_level) + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; else if (flooded && full_ymax < water_level) - vm->m_data[i] = (p.Y < startp.Y - 4) ? liquidnode : airnode; + vm->m_data[i] = (p.Y < startp.Y - 4) ? + liquidnode : airnode; else vm->m_data[i] = airnode; } diff --git a/src/cavegen.h b/src/cavegen.h index 27626753a..38ef57c5a 100644 --- a/src/cavegen.h +++ b/src/cavegen.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define CAVEGEN_HEADER #define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1 +#define MGV7_LAVA_DEPTH -256 class MapgenV5; class MapgenV6; From b2160bcecdecb00bb59e6ad8ece6518255dab4ad Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 1 Jul 2015 13:49:48 +0200 Subject: [PATCH 167/670] Disable mesh cache by default --- minetest.conf.example | 2 +- src/defaultsettings.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 6b0525fde..6138b6d43 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -263,7 +263,7 @@ # Lower is darker, Higher is lighter. The valid range of values for this # setting is 0.25 to 4.0 inclusive. If the value is out of range it will be # set to the nearest valid value. -#enable_mesh_cache = true +#enable_mesh_cache = false # Enables caching of facedir rotated meshes #enable_minimap = true diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index ecd89242b..9015c28a4 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -175,7 +175,7 @@ void set_default_settings(Settings *settings) settings->setDefault("enable_shaders", "true"); settings->setDefault("repeat_rightclick_time", "0.25"); settings->setDefault("enable_particles", "true"); - settings->setDefault("enable_mesh_cache", "true"); + settings->setDefault("enable_mesh_cache", "false"); settings->setDefault("enable_minimap", "true"); settings->setDefault("minimap_shape_round", "true"); From 2e44873ac987c484ef7f9ace5eeabfd376f6d8f8 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 1 Jul 2015 17:03:02 +0200 Subject: [PATCH 168/670] Inventory manager style cleanup and further checks --- src/inventorymanager.cpp | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 96ce48086..d23d1529d 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -172,16 +172,16 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame Inventory *inv_from = mgr->getInventory(from_inv); Inventory *inv_to = mgr->getInventory(to_inv); - if(!inv_from){ - infostream<<"IMoveAction::apply(): FAIL: source inventory not found: " - <<"from_inv=\""< list_to->getSize()) { + infostream << "IMoveAction::apply(): FAIL: destination index out of bounds: " + << "to_i=" << to_i + << ", size=" << list_to->getSize() << std::endl; + return; + } /* Do not handle rollback if both inventories are that of the same player */ From 75d2cfef5cedd47dd0141953f61ae6ba5b0c8ded Mon Sep 17 00:00:00 2001 From: Sokomine Date: Wed, 1 Jul 2015 18:56:27 +0200 Subject: [PATCH 169/670] Fix world.mt not written when selecting mode --- builtin/mainmenu/common.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index 5cd16a9ea..cbc95bc85 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -311,7 +311,8 @@ function menu_worldmt(selected, setting, value) if not world_conf:write() then core.log("error", "Failed to write world config file") end - return world_conf:set(setting, value) + world_conf:set(setting, value) + world_conf:write() else return world_conf:get(setting) end From 8a85e5e58decf77df27d114574026ff8032b8a45 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Thu, 2 Jul 2015 21:36:45 +0200 Subject: [PATCH 170/670] Shaders fixes and cleanup relief mapping code. --- .../shaders/nodes_shader/opengl_fragment.glsl | 63 +++++++------------ .../shaders/nodes_shader/opengl_vertex.glsl | 10 +-- src/shader.cpp | 5 +- 3 files changed, 33 insertions(+), 45 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index e531d72b7..8dc3a5683 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -39,37 +39,21 @@ vec4 get_normal_map(vec2 uv) float find_intersection(vec2 dp, vec2 ds) { - const int linear_steps = 10; - const int binary_steps = 5; - const float depth_step = 1.0 / linear_steps; - float size = depth_step; + const float depth_step = 1.0 / 24.0; float depth = 1.0; - float best_depth = 1.0; - for (int i = 0 ; i < linear_steps - 1 ; ++i) { - vec4 t = texture2D(normalTexture, dp + ds * depth); - if (best_depth > 0.05) - if (depth >= t.a) - best_depth = depth; - depth -= size; + for (int i = 0 ; i < 24 ; i++) { + float h = texture2D(normalTexture, dp + ds * depth).a; + if (h >= depth) + break; + depth -= depth_step; } - depth = best_depth - size; - for (int i = 0 ; i < binary_steps ; ++i) { - size *= 0.5; - vec4 t = texture2D(normalTexture, dp + ds * depth); - if (depth >= t.a) { - best_depth = depth; - depth -= 2 * size; - } - depth += size; - } - return best_depth; + return depth; } float find_intersectionRGB(vec2 dp, vec2 ds) { - const float iterations = 24.0; - const float depth_step = 1.0 / iterations; + const float depth_step = 1.0 / 24.0; float depth = 1.0; - for (int i = 0 ; i < iterations ; i++) { + for (int i = 0 ; i < 24 ; i++) { float h = get_rgb_height(dp + ds * depth); if (h >= depth) break; @@ -85,40 +69,41 @@ void main (void) vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; -#ifdef USE_NORMALMAPS +#if USE_NORMALMAPS == 1 if (texture2D(useNormalmap,vec2(1.0, 1.0)).r > 0.0) { normalTexturePresent = true; } #endif #ifdef ENABLE_PARALLAX_OCCLUSION - vec3 eyeRay = normalize(tsEyeVec); + vec2 eyeRay = vec2 (tsEyeVec.x, -tsEyeVec.y); + const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; + const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; + #if PARALLAX_OCCLUSION_MODE == 0 // Parallax occlusion with slope information if (normalTexturePresent && area_enable_parallax > 0.0) { - const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; - const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; - for(int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { + for (int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { vec4 normal = texture2D(normalTexture, uv.xy); float h = normal.a * scale - bias; - uv += h * normal.z * eyeRay.xy; + uv += h * normal.z * eyeRay; } #endif #if PARALLAX_OCCLUSION_MODE == 1 // Relief mapping if (normalTexturePresent && area_enable_parallax > 0.0) { - vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; + vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; float dist = find_intersection(uv, ds); uv += dist * ds; #endif - } else if (area_enable_parallax > 0.0) { - vec2 ds = eyeRay.xy * PARALLAX_OCCLUSION_SCALE; + } else if (GENERATE_NORMALMAPS == 1 && area_enable_parallax > 0.0) { + vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; float dist = find_intersectionRGB(uv, ds); uv += dist * ds; } #endif -#ifdef USE_NORMALMAPS +#if USE_NORMALMAPS == 1 if (normalTexturePresent) { bump = get_normal_map(uv); use_normalmap = true; @@ -136,7 +121,7 @@ void main (void) 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); + bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0); use_normalmap = true; } @@ -145,9 +130,9 @@ void main (void) #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); + 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; diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 5c4d46be6..9f8210d12 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -41,7 +41,7 @@ void main(void) //Allow parallax/relief mapping only for certain kind of nodes //Variable is also used to control area of the effect -#if ((DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) && GENERATE_NORMALMAPS) +#if (DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) area_enable_parallax = 1.0; #else area_enable_parallax = 0.0; @@ -94,7 +94,7 @@ void main(void) // Don't generate heightmaps when too far from the eye float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); - if (dist > 100.0) { + if (dist > 120.0) { area_enable_parallax = 0.0; } @@ -103,7 +103,7 @@ void main(void) vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz); - binormal = normalize(gl_NormalMatrix * -gl_MultiTexCoord2.xyz); + binormal = normalize(gl_NormalMatrix * gl_MultiTexCoord2.xyz); vec3 v; @@ -111,13 +111,13 @@ void main(void) v.x = dot(lightVec, tangent); v.y = dot(lightVec, binormal); v.z = dot(lightVec, normal); - tsLightVec = v; + tsLightVec = normalize (v); eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; v.x = dot(eyeVec, tangent); v.y = dot(eyeVec, binormal); v.z = dot(eyeVec, normal); - tsEyeVec = v; + tsEyeVec = normalize (v); vec4 color; float day = gl_Color.r; diff --git a/src/shader.cpp b/src/shader.cpp index a6d18e1be..7e4f40810 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -731,8 +731,11 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype, shaders_header += "\n"; } + shaders_header += "#define USE_NORMALMAPS "; if (g_settings->getBool("enable_bumpmapping") || g_settings->getBool("enable_parallax_occlusion")) - shaders_header += "#define USE_NORMALMAPS\n"; + shaders_header += "1\n"; + else + shaders_header += "0\n"; if (g_settings->getBool("enable_waving_water")){ shaders_header += "#define ENABLE_WAVING_WATER 1\n"; From 0a0378fecef5c6b4be6d034d8bced2a1568dde81 Mon Sep 17 00:00:00 2001 From: Sokomine Date: Thu, 2 Jul 2015 16:26:09 +0200 Subject: [PATCH 171/670] Set server_announce to world.mt and respect modes when changing subgame --- builtin/mainmenu/common.lua | 2 +- builtin/mainmenu/tab_server.lua | 3 +++ builtin/mainmenu/tab_singleplayer.lua | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index cbc95bc85..14a64361d 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -322,7 +322,7 @@ function menu_worldmt(selected, setting, value) end function menu_worldmt_legacy(selected) - local modes_names = {"creative_mode", "enable_damage"} + local modes_names = {"creative_mode", "enable_damage", "server_announce"} for _, mode_name in pairs(modes_names) do local mode_val = menu_worldmt(selected, mode_name) if mode_val ~= nil then diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua index 3459f3f2f..62747c572 100644 --- a/builtin/mainmenu/tab_server.lua +++ b/builtin/mainmenu/tab_server.lua @@ -103,6 +103,9 @@ local function main_button_handler(this, fields, name, tabdata) if fields["cb_server_announce"] then core.setting_set("server_announce", fields["cb_server_announce"]) + local selected = core.get_textlist_index("srv_worlds") + menu_worldmt(selected, "server_announce", fields["cb_server_announce"]) + return true end diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index a7cf5120c..a7fa55666 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -38,6 +38,14 @@ local function singleplayer_refresh_gamebar() core.set_topleft_text(gamemgr.games[j].name) core.setting_set("menu_last_game",gamemgr.games[j].id) menudata.worldlist:set_filtercriteria(gamemgr.games[j].id) + local index = filterlist.get_current_index(menudata.worldlist, + tonumber(core.setting_get("mainmenu_last_selected_world"))) + local selected = core.get_textlist_index("sp_worlds") + if not index or index < 1 then + index = math.min(core.get_textlist_index("sp_worlds"), + #menudata.worldlist:get_list()) + end + menu_worldmt_legacy(index) return true end end From 7b171ea2be0e476d7cdc9300b53ba86a9f694161 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 2 Jul 2015 23:14:30 -0400 Subject: [PATCH 172/670] Fix code style from recent commits and add misc. optimizations --- src/player.h | 71 +++++++++++----- src/porting.cpp | 24 +++--- src/script/common/c_content.cpp | 14 ++-- src/script/common/c_content.h | 73 ++++++++-------- src/script/common/c_converter.h | 2 - src/script/cpp_api/s_base.cpp | 33 ++++---- src/script/cpp_api/s_base.h | 3 +- src/server.cpp | 143 +++++++++++++++----------------- src/server.h | 8 +- 9 files changed, 186 insertions(+), 185 deletions(-) diff --git a/src/player.h b/src/player.h index 4db0e4c58..c84cc1c92 100644 --- a/src/player.h +++ b/src/player.h @@ -130,13 +130,8 @@ public: v3f getEyeOffset() { - // This is at the height of the eyes of the current figure - // return v3f(0, BS*1.5, 0); - // This is more like in minecraft - if(camera_barely_in_ceiling) - return v3f(0,BS*1.5,0); - else - return v3f(0,BS*1.625,0); + float eye_height = camera_barely_in_ceiling ? 1.5f : 1.625f; + return v3f(0, BS * eye_height, 0); } v3f getEyePosition() @@ -197,12 +192,13 @@ public: return (m_yaw + 90.) * core::DEGTORAD; } - const char * getName() const + const char *getName() const { return m_name; } - core::aabbox3d getCollisionbox() { + core::aabbox3d getCollisionbox() + { return m_collisionbox; } @@ -215,62 +211,91 @@ public: return size; } - void setHotbarItemcount(s32 hotbar_itemcount) { + void setHotbarItemcount(s32 hotbar_itemcount) + { hud_hotbar_itemcount = hotbar_itemcount; } - s32 getHotbarItemcount() { + + s32 getHotbarItemcount() + { return hud_hotbar_itemcount; } - void setHotbarImage(std::string name) { + + void setHotbarImage(const std::string &name) + { hud_hotbar_image = name; } - std::string getHotbarImage() { + + std::string getHotbarImage() + { return hud_hotbar_image; } - void setHotbarSelectedImage(std::string name) { + + void setHotbarSelectedImage(const std::string &name) + { hud_hotbar_selected_image = name; } + std::string getHotbarSelectedImage() { return hud_hotbar_selected_image; } void setSky(const video::SColor &bgcolor, const std::string &type, - const std::vector ¶ms) { + const std::vector ¶ms) + { m_sky_bgcolor = bgcolor; m_sky_type = type; m_sky_params = params; } + void getSky(video::SColor *bgcolor, std::string *type, - std::vector *params) { + std::vector *params) + { *bgcolor = m_sky_bgcolor; *type = m_sky_type; *params = m_sky_params; } - void overrideDayNightRatio(bool do_override, float ratio) { + + void overrideDayNightRatio(bool do_override, float ratio) + { m_day_night_ratio_do_override = do_override; m_day_night_ratio = ratio; } - void getDayNightRatio(bool *do_override, float *ratio) { + + void getDayNightRatio(bool *do_override, float *ratio) + { *do_override = m_day_night_ratio_do_override; *ratio = m_day_night_ratio; } - void setLocalAnimations(v2s32 frames[4], float frame_speed) { + + void setLocalAnimations(v2s32 frames[4], float frame_speed) + { for (int i = 0; i < 4; i++) local_animations[i] = frames[i]; local_animation_speed = frame_speed; } - void getLocalAnimations(v2s32 *frames, float *frame_speed) { + + void getLocalAnimations(v2s32 *frames, float *frame_speed) + { for (int i = 0; i < 4; i++) frames[i] = local_animations[i]; *frame_speed = local_animation_speed; } virtual bool isLocal() const - { return false; } + { + return false; + } + virtual PlayerSAO *getPlayerSAO() - { return NULL; } + { + return NULL; + } + virtual void setPlayerSAO(PlayerSAO *sao) - { FATAL_ERROR("FIXME"); } + { + FATAL_ERROR("FIXME"); + } /* serialize() writes a bunch of text that can contain diff --git a/src/porting.cpp b/src/porting.cpp index 29c82fe24..44f1fcff1 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -749,25 +749,23 @@ const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type) static float calcDisplayDensity() { - const char* current_display = getenv("DISPLAY"); + const char *current_display = getenv("DISPLAY"); if (current_display != NULL) { - Display * x11display = XOpenDisplay(current_display); + Display *x11display = XOpenDisplay(current_display); - if (x11display != NULL) { - /* try x direct */ - float dpi_height = - floor(DisplayHeight(x11display, 0) / - (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5); - float dpi_width = - floor(DisplayWidth(x11display, 0) / - (DisplayWidthMM(x11display, 0) * 0.039370) +0.5); + if (x11display != NULL) { + /* try x direct */ + float dpi_height = floor(DisplayHeight(x11display, 0) / + (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5); + float dpi_width = floor(DisplayWidth(x11display, 0) / + (DisplayWidthMM(x11display, 0) * 0.039370) + 0.5); - XCloseDisplay(x11display); + XCloseDisplay(x11display); - return std::max(dpi_height,dpi_width) / 96.0; - } + return std::max(dpi_height,dpi_width) / 96.0; } + } /* return manually specified dpi */ return g_settings->getFloat("screen_dpi")/96.0; diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 94fcdecbb..4db92190b 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -985,11 +985,11 @@ void read_groups(lua_State *L, int index, } /******************************************************************************/ -void push_groups(lua_State *L, std::map groups) +void push_groups(lua_State *L, const std::map &groups) { lua_newtable(L); - for (std::map::iterator it = groups.begin(); - it != groups.end(); ++it) { + std::map::const_iterator it; + for (it = groups.begin(); it != groups.end(); ++it) { lua_pushnumber(L, it->second); lua_setfield(L, -2, it->first.c_str()); } @@ -998,12 +998,10 @@ void push_groups(lua_State *L, std::map groups) /******************************************************************************/ void push_items(lua_State *L, const std::vector &items) { - // Create and fill table lua_createtable(L, items.size(), 0); - std::vector::const_iterator iter = items.begin(); - for (u32 i = 0; iter != items.end(); iter++) { - LuaItemStack::create(L, *iter); - lua_rawseti(L, -2, ++i); + for (u32 i = 0; i != items.size(); i++) { + LuaItemStack::create(L, items[i]); + lua_rawseti(L, -2, i + 1); } } diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h index 69b2a8355..4547009e7 100644 --- a/src/script/common/c_content.h +++ b/src/script/common/c_content.h @@ -62,61 +62,56 @@ struct NoiseParams; class Schematic; -ContentFeatures read_content_features (lua_State *L, int index); -TileDef read_tiledef (lua_State *L, int index); -void read_soundspec (lua_State *L, int index, - SimpleSoundSpec &spec); -NodeBox read_nodebox (lua_State *L, int index); +ContentFeatures read_content_features (lua_State *L, int index); +TileDef read_tiledef (lua_State *L, int index); +void read_soundspec (lua_State *L, int index, + SimpleSoundSpec &spec); +NodeBox read_nodebox (lua_State *L, int index); -void read_server_sound_params (lua_State *L, int index, - ServerSoundParams ¶ms); +void read_server_sound_params (lua_State *L, int index, + ServerSoundParams ¶ms); -void push_dig_params (lua_State *L,const DigParams ¶ms); -void push_hit_params (lua_State *L,const HitParams ¶ms); +void push_dig_params (lua_State *L, + const DigParams ¶ms); +void push_hit_params (lua_State *L, + const HitParams ¶ms); -ItemStack read_item (lua_State *L, int index, Server* srv); +ItemStack read_item (lua_State *L, int index, Server *srv); -ToolCapabilities read_tool_capabilities (lua_State *L, - int table); +ToolCapabilities read_tool_capabilities (lua_State *L, int table); void push_tool_capabilities (lua_State *L, const ToolCapabilities &prop); -ItemDefinition read_item_definition (lua_State *L, - int index, +ItemDefinition read_item_definition (lua_State *L, int index, ItemDefinition default_def); -void read_object_properties (lua_State *L, - int index, +void read_object_properties (lua_State *L, int index, + ObjectProperties *prop); +void push_object_properties (lua_State *L, ObjectProperties *prop); -void push_object_properties (lua_State *L, - ObjectProperties *prop); void push_inventory_list (lua_State *L, Inventory *inv, const char *name); -void read_inventory_list (lua_State *L, - int tableindex, - Inventory *inv, - const char *name, - Server* srv, - int forcesize=-1); +void read_inventory_list (lua_State *L, int tableindex, + Inventory *inv, const char *name, + Server *srv, int forcesize=-1); -MapNode readnode (lua_State *L, - int index, +MapNode readnode (lua_State *L, int index, INodeDefManager *ndef); -void pushnode (lua_State *L, - const MapNode &n, +void pushnode (lua_State *L, const MapNode &n, INodeDefManager *ndef); NodeBox read_nodebox (lua_State *L, int index); -void read_groups (lua_State *L, - int index, +void read_groups (lua_State *L, int index, std::map &result); +void push_groups (lua_State *L, + const std::map &groups); + //TODO rename to "read_enum_field" -int getenumfield (lua_State *L, - int table, +int getenumfield (lua_State *L, int table, const char *fieldname, const EnumString *spec, int default_); @@ -129,8 +124,9 @@ bool getflagsfield (lua_State *L, int table, bool read_flags (lua_State *L, int index, FlagDesc *flagdesc, u32 *flags, u32 *flagmask); -void push_flags_string (lua_State *L, FlagDesc *flagdesc, - u32 flags, u32 flagmask); + +void push_flags_string (lua_State *L, FlagDesc *flagdesc, + u32 flags, u32 flagmask); u32 read_flags_table (lua_State *L, int table, FlagDesc *flagdesc, u32 *flagmask); @@ -146,24 +142,21 @@ void read_soundspec (lua_State *L, int index, SimpleSoundSpec &spec); - bool string_to_enum (const EnumString *spec, int &result, const std::string &str); bool read_noiseparams (lua_State *L, int index, NoiseParams *np); -void push_noiseparams (lua_State *L, NoiseParams *np); +void push_noiseparams (lua_State *L, NoiseParams *np); void luaentity_get (lua_State *L,u16 id); bool push_json_value (lua_State *L, const Json::Value &value, int nullindex); -void read_json_value (lua_State *L, - Json::Value &root, - int index, - u8 recursion = 0); +void read_json_value (lua_State *L, Json::Value &root, + int index, u8 recursion = 0); extern struct EnumString es_TileAnimationType[]; diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index 8a49c7a73..18a045d2a 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -104,8 +104,6 @@ void push_ARGB8 (lua_State *L, video::SColor color); void pushFloatPos (lua_State *L, v3f p); void push_v3f (lua_State *L, v3f p); void push_v2f (lua_State *L, v2f p); -void push_groups (lua_State *L, - std::map groups); void warn_if_field_exists(lua_State *L, int table, const char *fieldname, diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index e02a6aa0d..2eb7419b5 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -142,7 +142,7 @@ bool ScriptApiBase::loadScript(const std::string &script_path, std::string *erro if (!ok) { std::string error_msg = lua_tostring(L, -1); if (error) - (*error) = error_msg; + *error = error_msg; errorstream << "========== ERROR FROM LUA ===========" << std::endl << "Failed to load and run script from " << std::endl << script_path << ":" << std::endl << std::endl @@ -157,8 +157,8 @@ bool ScriptApiBase::loadScript(const std::string &script_path, std::string *erro void ScriptApiBase::realityCheck() { int top = lua_gettop(m_luastack); - if(top >= 30){ - dstream<<"Stack is over 30:"<= 30) { + dstream << "Stack is over 30:" << std::endl; stackDump(dstream); std::string traceback = script_get_backtrace(m_luastack); throw LuaError("Stack is over 30 (reality check)\n" + traceback); @@ -172,34 +172,29 @@ void ScriptApiBase::scriptError() void ScriptApiBase::stackDump(std::ostream &o) { - int i; int top = lua_gettop(m_luastack); - for (i = 1; i <= top; i++) { /* repeat for each level */ + for (int i = 1; i <= top; i++) { /* repeat for each level */ int t = lua_type(m_luastack, i); switch (t) { - case LUA_TSTRING: /* strings */ - o<<"\""<getId() == 0){ + if (cobj == NULL || cobj->getId() == 0) { ObjectRef::create(L, cobj); } else { objectrefGet(L, cobj->getId()); diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index ee2835da2..13076d3d1 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -51,7 +51,8 @@ public: ScriptApiBase(); virtual ~ScriptApiBase(); - bool loadMod(const std::string &script_path, const std::string &mod_name, std::string *error=NULL); + bool loadMod(const std::string &script_path, const std::string &mod_name, + std::string *error=NULL); bool loadScript(const std::string &script_path, std::string *error=NULL); /* object */ diff --git a/src/server.cpp b/src/server.cpp index f69c5a935..e9aee47b2 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2838,7 +2838,7 @@ std::string Server::getBanDescription(const std::string &ip_or_name) void Server::notifyPlayer(const char *name, const std::wstring &msg) { Player *player = m_env->getPlayer(name); - if(!player) + if (!player) return; if (player->peer_id == PEER_ID_INEXISTENT) @@ -2847,21 +2847,19 @@ void Server::notifyPlayer(const char *name, const std::wstring &msg) SendChatMessage(player->peer_id, msg); } -bool Server::showFormspec(const char *playername, const std::string &formspec, const std::string &formname) +bool Server::showFormspec(const char *playername, const std::string &formspec, + const std::string &formname) { Player *player = m_env->getPlayer(playername); - - if(!player) - { - infostream<<"showFormspec: couldn't find player:"<peer_id, formspec, formname); return true; } -u32 Server::hudAdd(Player *player, HudElement *form) { +u32 Server::hudAdd(Player *player, HudElement *form) +{ if (!player) return -1; @@ -2887,7 +2885,8 @@ bool Server::hudRemove(Player *player, u32 id) { return true; } -bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data) { +bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data) +{ if (!player) return false; @@ -2895,7 +2894,8 @@ bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data) return true; } -bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) { +bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) +{ if (!player) return false; @@ -2911,7 +2911,8 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) { return true; } -bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) { +bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) +{ if (!player) return false; if (hotbar_itemcount <= 0 || hotbar_itemcount > HUD_HOTBAR_ITEMCOUNT_MAX) @@ -2924,13 +2925,15 @@ bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) { return true; } -s32 Server::hudGetHotbarItemcount(Player *player) { +s32 Server::hudGetHotbarItemcount(Player *player) +{ if (!player) return 0; return player->getHotbarItemcount(); } -void Server::hudSetHotbarImage(Player *player, std::string name) { +void Server::hudSetHotbarImage(Player *player, std::string name) +{ if (!player) return; @@ -2938,13 +2941,15 @@ void Server::hudSetHotbarImage(Player *player, std::string name) { SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_IMAGE, name); } -std::string Server::hudGetHotbarImage(Player *player) { +std::string Server::hudGetHotbarImage(Player *player) +{ if (!player) return ""; return player->getHotbarImage(); } -void Server::hudSetHotbarSelectedImage(Player *player, std::string name) { +void Server::hudSetHotbarSelectedImage(Player *player, std::string name) +{ if (!player) return; @@ -2952,14 +2957,16 @@ void Server::hudSetHotbarSelectedImage(Player *player, std::string name) { SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_SELECTED_IMAGE, name); } -std::string Server::hudGetHotbarSelectedImage(Player *player) { +std::string Server::hudGetHotbarSelectedImage(Player *player) +{ if (!player) return ""; return player->getHotbarSelectedImage(); } -bool Server::setLocalPlayerAnimations(Player *player, v2s32 animation_frames[4], f32 frame_speed) +bool Server::setLocalPlayerAnimations(Player *player, + v2s32 animation_frames[4], f32 frame_speed) { if (!player) return false; @@ -2981,7 +2988,7 @@ bool Server::setPlayerEyeOffset(Player *player, v3f first, v3f third) } bool Server::setSky(Player *player, const video::SColor &bgcolor, - const std::string &type, const std::vector ¶ms) + const std::string &type, const std::vector ¶ms) { if (!player) return false; @@ -2992,7 +2999,7 @@ bool Server::setSky(Player *player, const video::SColor &bgcolor, } bool Server::overrideDayNightRatio(Player *player, bool do_override, - float ratio) + float ratio) { if (!player) return false; @@ -3008,9 +3015,9 @@ void Server::notifyPlayers(const std::wstring &msg) } void Server::spawnParticle(const char *playername, v3f pos, - v3f velocity, v3f acceleration, - float expirationtime, float size, bool - collisiondetection, bool vertical, std::string texture) + v3f velocity, v3f acceleration, + float expirationtime, float size, bool + collisiondetection, bool vertical, const std::string &texture) { Player *player = m_env->getPlayer(playername); if(!player) @@ -3020,21 +3027,17 @@ void Server::spawnParticle(const char *playername, v3f pos, } void Server::spawnParticleAll(v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, - bool collisiondetection, bool vertical, std::string texture) + float expirationtime, float size, + bool collisiondetection, bool vertical, const std::string &texture) { SendSpawnParticle(PEER_ID_INEXISTENT,pos, velocity, acceleration, expirationtime, size, collisiondetection, vertical, texture); } -u32 Server::addParticleSpawner(const char *playername, - 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 vertical, std::string texture) +u32 Server::addParticleSpawner(const char *playername, 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 vertical, const std::string &texture) { Player *player = m_env->getPlayer(playername); if(!player) @@ -3062,12 +3065,12 @@ u32 Server::addParticleSpawner(const char *playername, } u32 Server::addParticleSpawnerAll(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 vertical, std::string texture) + v3f minpos, v3f maxpos, + v3f minvel, v3f maxvel, + v3f minacc, v3f maxacc, + float minexptime, float maxexptime, + float minsize, float maxsize, + bool collisiondetection, bool vertical, const std::string &texture) { u32 id = 0; for(;;) // look for unused particlespawner id @@ -3128,24 +3131,6 @@ Inventory* Server::createDetachedInventory(const std::string &name) return inv; } -class BoolScopeSet -{ -public: - BoolScopeSet(bool *dst, bool val): - m_dst(dst) - { - m_orig_state = *m_dst; - *m_dst = val; - } - ~BoolScopeSet() - { - *m_dst = m_orig_state; - } -private: - bool *m_dst; - bool m_orig_state; -}; - // actions: time-reversed list // Return value: success/failure bool Server::rollbackRevertActions(const std::list &actions, @@ -3195,27 +3180,29 @@ bool Server::rollbackRevertActions(const std::list &actions, // IGameDef interface // Under envlock -IItemDefManager* Server::getItemDefManager() +IItemDefManager *Server::getItemDefManager() { return m_itemdef; } -INodeDefManager* Server::getNodeDefManager() + +INodeDefManager *Server::getNodeDefManager() { return m_nodedef; } -ICraftDefManager* Server::getCraftDefManager() + +ICraftDefManager *Server::getCraftDefManager() { return m_craftdef; } -ITextureSource* Server::getTextureSource() +ITextureSource *Server::getTextureSource() { return NULL; } -IShaderSource* Server::getShaderSource() +IShaderSource *Server::getShaderSource() { return NULL; } -scene::ISceneManager* Server::getSceneManager() +scene::ISceneManager *Server::getSceneManager() { return NULL; } @@ -3224,44 +3211,50 @@ u16 Server::allocateUnknownNodeId(const std::string &name) { return m_nodedef->allocateDummy(name); } -ISoundManager* Server::getSoundManager() + +ISoundManager *Server::getSoundManager() { return &dummySoundManager; } -MtEventManager* Server::getEventManager() + +MtEventManager *Server::getEventManager() { return m_event; } -IWritableItemDefManager* Server::getWritableItemDefManager() +IWritableItemDefManager *Server::getWritableItemDefManager() { return m_itemdef; } -IWritableNodeDefManager* Server::getWritableNodeDefManager() + +IWritableNodeDefManager *Server::getWritableNodeDefManager() { return m_nodedef; } -IWritableCraftDefManager* Server::getWritableCraftDefManager() + +IWritableCraftDefManager *Server::getWritableCraftDefManager() { return m_craftdef; } -const ModSpec* Server::getModSpec(const std::string &modname) const +const ModSpec *Server::getModSpec(const std::string &modname) const { - for(std::vector::const_iterator i = m_mods.begin(); - i != m_mods.end(); i++){ - const ModSpec &mod = *i; - if(mod.name == modname) + std::vector::const_iterator it; + for (it = m_mods.begin(); it != m_mods.end(); ++it) { + const ModSpec &mod = *it; + if (mod.name == modname) return &mod; } return NULL; } + void Server::getModNames(std::vector &modlist) { - for(std::vector::iterator i = m_mods.begin(); i != m_mods.end(); i++) { - modlist.push_back(i->name); - } + std::vector::iterator it; + for (it = m_mods.begin(); it != m_mods.end(); ++it) + modlist.push_back(it->name); } + std::string Server::getBuiltinLuaPath() { return porting::path_share + DIR_DELIM + "builtin"; diff --git a/src/server.h b/src/server.h index 131c3c67b..877109a77 100644 --- a/src/server.h +++ b/src/server.h @@ -267,11 +267,11 @@ public: void spawnParticle(const char *playername, v3f pos, v3f velocity, v3f acceleration, float expirationtime, float size, - bool collisiondetection, bool vertical, std::string texture); + bool collisiondetection, bool vertical, const std::string &texture); void spawnParticleAll(v3f pos, v3f velocity, v3f acceleration, float expirationtime, float size, - bool collisiondetection, bool vertical, std::string texture); + bool collisiondetection, bool vertical, const std::string &texture); u32 addParticleSpawner(const char *playername, u16 amount, float spawntime, @@ -280,7 +280,7 @@ public: v3f minacc, v3f maxacc, float minexptime, float maxexptime, float minsize, float maxsize, - bool collisiondetection, bool vertical, std::string texture); + bool collisiondetection, bool vertical, const std::string &texture); u32 addParticleSpawnerAll(u16 amount, float spawntime, v3f minpos, v3f maxpos, @@ -288,7 +288,7 @@ public: v3f minacc, v3f maxacc, float minexptime, float maxexptime, float minsize, float maxsize, - bool collisiondetection, bool vertical, std::string texture); + bool collisiondetection, bool vertical, const std::string &texture); void deleteParticleSpawner(const char *playername, u32 id); void deleteParticleSpawnerAll(u32 id); From 87b9cdab07f70a7f2dd6531650242b0893eb5930 Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Sat, 4 Jul 2015 11:28:09 +0200 Subject: [PATCH 173/670] Fix missing check for 0 in craft replacements --- src/craftdef.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/craftdef.cpp b/src/craftdef.cpp index cc0e83be7..bad0d393b 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -235,8 +235,8 @@ static void craftDecrementOrReplaceInput(CraftInput &input, } } } - // No replacement was found, simply decrement count to zero - if (!found_replacement) + // No replacement was found, simply decrement count by one + if (!found_replacement && it->count > 0) it->remove(1); } } From 96989e0a6aa3ab069b5aeeab44a6280d6d51364a Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 4 Jul 2015 16:21:37 +0200 Subject: [PATCH 174/670] Craftdef: Use numbers instead of iterators Use numbers instead of iterators to traverse various vectors. --- src/craftdef.cpp | 201 +++++++++++++++++++++++------------------------ 1 file changed, 99 insertions(+), 102 deletions(-) diff --git a/src/craftdef.cpp b/src/craftdef.cpp index bad0d393b..022b98da3 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -112,10 +112,9 @@ static std::vector craftGetItemNames( const std::vector &itemstrings, IGameDef *gamedef) { std::vector result; - for (std::vector::const_iterator - it = itemstrings.begin(); - it != itemstrings.end(); it++) { - result.push_back(craftGetItemName(*it, gamedef)); + for (std::vector::size_type i = 0; + i < itemstrings.size(); i++) { + result.push_back(craftGetItemName(itemstrings[i], gamedef)); } return result; } @@ -125,10 +124,9 @@ static std::vector craftGetItemNames( const std::vector &items, IGameDef *gamedef) { std::vector result; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++) { - result.push_back(it->name); + for (std::vector::size_type i = 0; + i < items.size(); i++) { + result.push_back(items[i].name); } return result; } @@ -138,10 +136,9 @@ static std::vector craftGetItems( const std::vector &items, IGameDef *gamedef) { std::vector result; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++) { - result.push_back(ItemStack(std::string(*it), (u16)1, + for (std::vector::size_type i = 0; + i < items.size(); i++) { + result.push_back(ItemStack(std::string(items[i]), (u16)1, (u16)0, "", gamedef->getItemDefManager())); } return result; @@ -156,11 +153,10 @@ static bool craftGetBounds(const std::vector &items, unsigned int w bool success = false; unsigned int x = 0; unsigned int y = 0; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++) { + for (std::vector::size_type i = 0; + i < items.size(); i++) { // Is this an actual item? - if (*it != "") { + if (items[i] != "") { if (!success) { // This is the first nonempty item min_x = max_x = x; @@ -187,11 +183,10 @@ static bool craftGetBounds(const std::vector &items, unsigned int w // Removes 1 from each item stack static void craftDecrementInput(CraftInput &input, IGameDef *gamedef) { - for (std::vector::iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->count != 0) - it->remove(1); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + if (input.items[i].count != 0) + input.items[i].remove(1); } } @@ -211,24 +206,24 @@ static void craftDecrementOrReplaceInput(CraftInput &input, // Make a copy of the replacements pair list std::vector > pairs = replacements.pairs; - for (std::vector::iterator - it = input.items.begin(); - it != input.items.end(); it++) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + ItemStack &item = input.items[i]; // Find an appropriate replacement bool found_replacement = false; for (std::vector >::iterator j = pairs.begin(); - j != pairs.end(); j++) { - if (it->name == craftGetItemName(j->first, gamedef)) { - if (it->count == 1) { - it->deSerialize(j->second, gamedef->idef()); + j != pairs.end(); ++j) { + if (item.name == craftGetItemName(j->first, gamedef)) { + if (item.count == 1) { + item.deSerialize(j->second, gamedef->idef()); found_replacement = true; pairs.erase(j); break; } else { ItemStack rep; rep.deSerialize(j->second, gamedef->idef()); - it->remove(1); + item.remove(1); found_replacement = true; output_replacements.push_back(rep); break; @@ -236,8 +231,8 @@ static void craftDecrementOrReplaceInput(CraftInput &input, } } // No replacement was found, simply decrement count by one - if (!found_replacement && it->count > 0) - it->remove(1); + if (!found_replacement && item.count > 0) + item.remove(1); } } @@ -246,18 +241,16 @@ static std::string craftDumpMatrix(const std::vector &items, unsigned int width) { std::ostringstream os(std::ios::binary); - os<<"{ "; - unsigned int x = 0; - for(std::vector::const_iterator - it = items.begin(); - it != items.end(); it++, x++) { - if (x == width) { - os<<"; "; - x = 0; - } else if (x != 0) { - os<<","; + os << "{ "; + for(std::vector::size_type i = 0; + i < items.size(); i++) { + if (i == width) { + os << "; "; + i = 0; + } else if (i != 0) { + os << ","; } - os << '"' << (*it) << '"'; + os << '"' << items[i] << '"'; } os << " }"; return os.str(); @@ -269,17 +262,15 @@ std::string craftDumpMatrix(const std::vector &items, { std::ostringstream os(std::ios::binary); os << "{ "; - unsigned int x = 0; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++, x++) { - if (x == width) { + for (std::vector::size_type i = 0; + i < items.size(); i++) { + if (i == width) { os << "; "; - x = 0; - } else if (x != 0) { - os<<","; + i = 0; + } else if (i != 0) { + os << ","; } - os << '"' << (it->getItemString()) << '"'; + os << '"' << (items[i].getItemString()) << '"'; } os << " }"; return os.str(); @@ -318,10 +309,12 @@ std::string CraftReplacements::dump() const std::ostringstream os(std::ios::binary); os<<"{"; const char *sep = ""; - for (std::vector >::const_iterator - it = pairs.begin(); - it != pairs.end(); it++) { - os << sep << '"' << (it->first) << "\"=>\"" << (it->second) << '"'; + for (std::vector >::size_type i = 0; + i < pairs.size(); i++) { + const std::pair &repl_p = pairs[i]; + os << sep + << '"' << (repl_p.first) + << "\"=>\"" << (repl_p.second) << '"'; sep = ","; } os << "}"; @@ -479,11 +472,11 @@ bool CraftDefinitionShapeless::check(const CraftInput &input, IGameDef *gamedef) // Filter empty items out of input std::vector input_filtered; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->name != "") - input_filtered.push_back(it->name); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const ItemStack &item = input.items[i]; + if (item.name != "") + input_filtered.push_back(item.name); } // If there is a wrong number of items in input, no match @@ -627,14 +620,14 @@ bool CraftDefinitionToolRepair::check(const CraftInput &input, IGameDef *gamedef ItemStack item1; ItemStack item2; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (!it->empty()) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const ItemStack &item = input.items[i]; + if (!item.empty()) { if (item1.empty()) - item1 = *it; + item1 = item; else if (item2.empty()) - item2 = *it; + item2 = item; else return false; } @@ -647,14 +640,14 @@ CraftOutput CraftDefinitionToolRepair::getOutput(const CraftInput &input, IGameD { ItemStack item1; ItemStack item2; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (!it->empty()) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const ItemStack &item = input.items[i]; + if (!item.empty()) { if (item1.empty()) - item1 = *it; + item1 = item; else if (item2.empty()) - item2 = *it; + item2 = item; } } ItemStack repaired = craftToolRepair(item1, item2, additional_wear, gamedef); @@ -697,11 +690,11 @@ bool CraftDefinitionCooking::check(const CraftInput &input, IGameDef *gamedef) c // Filter empty items out of input std::vector input_filtered; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->name != "") - input_filtered.push_back(it->name); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const std::string &name = input.items[i].name; + if (name != "") + input_filtered.push_back(name); } // If there is a wrong number of items in input, no match @@ -789,11 +782,11 @@ bool CraftDefinitionFuel::check(const CraftInput &input, IGameDef *gamedef) cons // Filter empty items out of input std::vector input_filtered; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->name != "") - input_filtered.push_back(it->name); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const std::string &name = input.items[i].name; + if (name != "") + input_filtered.push_back(name); } // If there is a wrong number of items in input, no match @@ -889,10 +882,9 @@ public: // If all input items are empty, abort. bool all_empty = true; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (!it->empty()) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + if (!input.items[i].empty()) { all_empty = false; break; } @@ -921,10 +913,9 @@ public: const std::vector &hash_collisions = col_iter->second; // Walk crafting definitions from back to front, so that later // definitions can override earlier ones. - for (std::vector::const_reverse_iterator - it = hash_collisions.rbegin(); - it != hash_collisions.rend(); it++) { - CraftDefinition *def = *it; + for (std::vector::size_type + i = hash_collisions.size(); i > 0; i--) { + CraftDefinition *def = hash_collisions[i - 1]; /*errorstream << "Checking " << input.dump() << std::endl << " against " << def->dump() << std::endl;*/ @@ -957,11 +948,12 @@ public: recipes.reserve(limit ? MYMIN(limit, vec.size()) : vec.size()); - for (std::vector::const_reverse_iterator - it = vec.rbegin(); it != vec.rend(); ++it) { + for (std::vector::size_type i = vec.size(); + i > 0; i--) { + CraftDefinition *def = vec[i - 1]; if (limit && recipes.size() >= limit) break; - recipes.push_back(*it); + recipes.push_back(def); } return recipes; @@ -974,9 +966,12 @@ public: for (std::map >::const_iterator it = (m_craft_defs[type]).begin(); it != (m_craft_defs[type]).end(); it++) { - for (std::vector::const_iterator - iit = it->second.begin(); iit != it->second.end(); iit++) { - os << "type " << type << " hash " << it->first << (*iit)->dump() << "\n"; + for (std::vector::size_type i = 0; + i < it->second.size(); i++) { + os << "type " << type + << " hash " << it->first + << " def " << it->second[i]->dump() + << "\n"; } } } @@ -1000,7 +995,8 @@ public: it = m_craft_defs[type].begin(); it != m_craft_defs[type].end(); it++) { for (std::vector::iterator - iit = it->second.begin(); iit != it->second.end(); iit++) { + iit = it->second.begin(); + iit != it->second.end(); ++iit) { delete *iit; } it->second.clear(); @@ -1012,10 +1008,11 @@ public: virtual void initHashes(IGameDef *gamedef) { // Move the CraftDefs from the unhashed layer into layers higher up. - for (std::vector::iterator - it = (m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0]).begin(); - it != (m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0]).end(); it++) { - CraftDefinition *def = *it; + std::vector &unhashed = + m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0]; + for (std::vector::size_type i = 0; + i < unhashed.size(); i++) { + CraftDefinition *def = unhashed[i]; // Initialize and get the definition's hash def->initHash(gamedef); @@ -1025,7 +1022,7 @@ public: // Enter the definition m_craft_defs[type][hash].push_back(def); } - m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0].clear(); + unhashed.clear(); } private: //TODO: change both maps to unordered_map when c++11 can be used From c53520aa314960855fc57bf09045c3f977557bb5 Mon Sep 17 00:00:00 2001 From: "jeanpatrick.guerrero@gmail.com" Date: Sat, 4 Jul 2015 15:08:32 +0200 Subject: [PATCH 175/670] Fix attempt to start a world when no world is selected/created --- builtin/mainmenu/tab_singleplayer.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index a7fa55666..4ae4dde35 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -152,12 +152,14 @@ local function main_button_handler(this, fields, name, tabdata) world_doubleclick or fields["key_enter"] then local selected = core.get_textlist_index("sp_worlds") + gamedata.selected_world = menudata.worldlist:get_raw_index(selected) - if selected ~= nil then - gamedata.selected_world = menudata.worldlist:get_raw_index(selected) - gamedata.singleplayer = true - + 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 end From 64dc0532098ceeaa8a9de01984bd6a309578ec1e Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 4 Jul 2015 19:43:46 +0200 Subject: [PATCH 176/670] Fix endless loop since grandparent commit --- src/craftdef.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/craftdef.cpp b/src/craftdef.cpp index 022b98da3..409481e64 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -242,12 +242,13 @@ static std::string craftDumpMatrix(const std::vector &items, { std::ostringstream os(std::ios::binary); os << "{ "; + unsigned int x = 0; for(std::vector::size_type i = 0; - i < items.size(); i++) { - if (i == width) { + i < items.size(); i++, x++) { + if (x == width) { os << "; "; - i = 0; - } else if (i != 0) { + x = 0; + } else if (x != 0) { os << ","; } os << '"' << items[i] << '"'; @@ -262,12 +263,13 @@ std::string craftDumpMatrix(const std::vector &items, { std::ostringstream os(std::ios::binary); os << "{ "; + unsigned int x = 0; for (std::vector::size_type i = 0; - i < items.size(); i++) { - if (i == width) { + i < items.size(); i++, x++) { + if (x == width) { os << "; "; - i = 0; - } else if (i != 0) { + x = 0; + } else if (x != 0) { os << ","; } os << '"' << (items[i].getItemString()) << '"'; From d786a272c0a400f9aa2c89d696aa6f9840f83d03 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 3 Jul 2015 22:47:31 +0100 Subject: [PATCH 177/670] Mgv7: Lower base of mountain generation to -112 and define constant --- src/mapgen_v7.cpp | 4 ++-- src/mapgen_v7.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 7fe5a3848..a111256a4 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -363,7 +363,7 @@ void MapgenV7::calculateNoise() noise_ridge_uwater->perlinMap2D(x, z); } - if ((spflags & MGV7_MOUNTAINS) && node_max.Y >= 0) { + if ((spflags & MGV7_MOUNTAINS) && node_max.Y >= MOUNTAIN_BASE) { noise_mountain->perlinMap3D(x, y, z); noise_mount_height->perlinMap2D(x, z); } @@ -536,7 +536,7 @@ int MapgenV7::generateBaseTerrain() int MapgenV7::generateMountainTerrain(int ymax) { - if (node_max.Y < 0) + if (node_max.Y < MOUNTAIN_BASE) return ymax; MapNode n_stone(c_stone); diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index 0a8a8c876..6fa1a0f1c 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" +#define MOUNTAIN_BASE -112 + /////////////////// Mapgen V7 flags #define MGV7_MOUNTAINS 0x01 #define MGV7_RIDGES 0x02 From a93838707a9aab104c20b6a971d8c622184a508f Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Sun, 5 Jul 2015 00:53:38 +0200 Subject: [PATCH 178/670] Use minetest logging facilities for irrlicht log output --- src/client/inputhandler.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index 7cd3ddc71..3da856f7b 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -85,10 +85,18 @@ public: mouse_wheel += event.MouseInput.Wheel; } } - } - if (event.EventType == irr::EET_LOG_TEXT_EVENT) { - dstream << std::string("Irrlicht log: ") + std::string(event.LogEvent.Text) - << std::endl; + } else if (event.EventType == irr::EET_LOG_TEXT_EVENT) { + static const enum LogMessageLevel irr_loglev_conv[] = { + LMT_VERBOSE, // ELL_DEBUG + LMT_INFO, // ELL_INFORMATION + LMT_ACTION, // ELL_WARNING + LMT_ERROR, // ELL_ERROR + LMT_ERROR, // ELL_NONE + }; + assert(event.LogEvent.Level < sizeof(irr_loglev_conv)); + log_printline(irr_loglev_conv[event.LogEvent.Level], + std::string("Irrlicht: ") + + (const char*) event.LogEvent.Text); return true; } /* always return false in order to continue processing events */ From d92d376148f7ed35df1c757aab5eca5645bb8ddd Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 5 Jul 2015 21:05:07 +0200 Subject: [PATCH 179/670] Client: better m_proto_ver initialisation Previously, m_proto_ver was set to the serialisation version inside the legacy init packet. Now, if the server doesn't send a protocol version (protocols < 25), we set m_proto_ver to some value < 25 and > 0. --- src/client.cpp | 1 + src/client.h | 6 ++++++ src/network/clientpackethandler.cpp | 15 +++++++++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index b02e6229c..2f8babfa2 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -229,6 +229,7 @@ Client::Client( m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), m_device(device), m_server_ser_ver(SER_FMT_VER_INVALID), + m_proto_ver(0), m_playeritem(0), m_inventory_updated(false), m_inventory_from_server(NULL), diff --git a/src/client.h b/src/client.h index efd373e42..7c1a19eed 100644 --- a/src/client.h +++ b/src/client.h @@ -595,8 +595,14 @@ private: Mapper *m_mapper; // Server serialization version u8 m_server_ser_ver; + // Used version of the protocol with server + // Values smaller than 25 only mean they are smaller than 25, + // and aren't accurate. We simply just don't know, because + // the server didn't send the version back then. + // If 0, server init hasn't been received yet. u8 m_proto_ver; + u16 m_playeritem; bool m_inventory_updated; Inventory *m_inventory_from_server; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index c0acff985..1ec6a2a1a 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -151,20 +151,23 @@ void Client::handleCommand_InitLegacy(NetworkPacket* pkt) if (pkt->getSize() < 1) return; - u8 deployed; - *pkt >> deployed; + u8 server_ser_ver; + *pkt >> server_ser_ver; infostream << "Client: TOCLIENT_INIT_LEGACY received with " - "deployed=" << ((int)deployed & 0xff) << std::endl; + "server_ser_ver=" << ((int)server_ser_ver & 0xff) << std::endl; - if (!ser_ver_supported(deployed)) { + if (!ser_ver_supported(server_ser_ver)) { infostream << "Client: TOCLIENT_INIT_LEGACY: Server sent " << "unsupported ser_fmt_ver"<< std::endl; return; } - m_server_ser_ver = deployed; - m_proto_ver = deployed; + m_server_ser_ver = server_ser_ver; + + // We can be totally wrong with this guess + // but we only need some value < 25. + m_proto_ver = 24; // Get player position v3s16 playerpos_s16(0, BS * 2 + BS * 20, 0); From ba15c98e4d5d7f4bc515e351d6af1a084d46092e Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 5 Jul 2015 00:56:31 +0100 Subject: [PATCH 180/670] Mgv7: Auto-set lowest mountain generation level Lowest level of base terrain determines mountain generation in mapchunk Change some positional function arguments from int to s16 --- src/mapgen_v7.cpp | 45 +++++++++++++++++++++++++-------------------- src/mapgen_v7.h | 14 ++++++-------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index a111256a4..4eb305dc5 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -363,10 +363,7 @@ void MapgenV7::calculateNoise() noise_ridge_uwater->perlinMap2D(x, z); } - if ((spflags & MGV7_MOUNTAINS) && node_max.Y >= MOUNTAIN_BASE) { - noise_mountain->perlinMap3D(x, y, z); - noise_mount_height->perlinMap2D(x, z); - } + // Mountain noises are calculated in generateMountainTerrain() noise_filler_depth->perlinMap2D(x, z); noise_heat->perlinMap2D(x, z); @@ -397,7 +394,7 @@ Biome *MapgenV7::getBiomeAtPoint(v3s16 p) } //needs to be updated -float MapgenV7::baseTerrainLevelAtPoint(int x, int z) +float MapgenV7::baseTerrainLevelAtPoint(s16 x, s16 z) { float hselect = NoisePerlin2D(&noise_height_select->np, x, z, seed); hselect = rangelim(hselect, 0.0, 1.0); @@ -430,7 +427,7 @@ float MapgenV7::baseTerrainLevelFromMap(int index) } -bool MapgenV7::getMountainTerrainAtPoint(int x, int y, int z) +bool MapgenV7::getMountainTerrainAtPoint(s16 x, s16 y, s16 z) { float mnt_h_n = NoisePerlin2D(&noise_mount_height->np, x, z, seed); float mnt_n = NoisePerlin3D(&noise_mountain->np, x, y, z, seed); @@ -438,7 +435,7 @@ bool MapgenV7::getMountainTerrainAtPoint(int x, int y, int z) } -bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, int y) +bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y) { float mounthn = noise_mount_height->result[idx_xz]; float mountn = noise_mountain->result[idx_xyz]; @@ -483,26 +480,30 @@ void MapgenV7::carveRivers() { int MapgenV7::generateTerrain() { - int ymax = generateBaseTerrain(); + s16 stone_surface_min_y; + s16 stone_surface_max_y; - if (spflags & MGV7_MOUNTAINS) - ymax = generateMountainTerrain(ymax); + generateBaseTerrain(&stone_surface_min_y, &stone_surface_max_y); + + if ((spflags & MGV7_MOUNTAINS) && stone_surface_min_y < node_max.Y) + stone_surface_max_y = generateMountainTerrain(stone_surface_max_y); if (spflags & MGV7_RIDGES) generateRidgeTerrain(); - return ymax; + return stone_surface_max_y; } -int MapgenV7::generateBaseTerrain() +void MapgenV7::generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_max_y) { MapNode n_air(CONTENT_AIR); MapNode n_stone(c_stone); MapNode n_water(c_water_source); - int stone_surface_max_y = -MAP_GENERATION_LIMIT; v3s16 em = vm->m_area.getExtent(); + s16 surface_min_y = MAP_GENERATION_LIMIT; + s16 surface_max_y = -MAP_GENERATION_LIMIT; u32 index = 0; for (s16 z = node_min.Z; z <= node_max.Z; z++) @@ -513,8 +514,11 @@ int MapgenV7::generateBaseTerrain() heightmap[index] = surface_y; ridge_heightmap[index] = surface_y; - if (surface_y > stone_surface_max_y) - stone_surface_max_y = surface_y; + if (surface_y < surface_min_y) + surface_min_y = surface_y; + + if (surface_y > surface_max_y) + surface_max_y = surface_y; u32 i = vm->m_area.index(x, node_min.Y - 1, z); for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { @@ -530,14 +534,15 @@ int MapgenV7::generateBaseTerrain() } } - return stone_surface_max_y; + *stone_surface_min_y = surface_min_y; + *stone_surface_max_y = surface_max_y; } -int MapgenV7::generateMountainTerrain(int ymax) +int MapgenV7::generateMountainTerrain(s16 ymax) { - if (node_max.Y < MOUNTAIN_BASE) - return ymax; + noise_mountain->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z); + noise_mount_height->perlinMap2D(node_min.X, node_min.Z); MapNode n_stone(c_stone); u32 j = 0; @@ -848,7 +853,7 @@ void MapgenV7::addTopNodes() #endif -void MapgenV7::generateCaves(int max_stone_y) +void MapgenV7::generateCaves(s16 max_stone_y) { if (max_stone_y >= node_min.Y) { u32 index = 0; diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index 6fa1a0f1c..c0cfa8c77 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -22,8 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" -#define MOUNTAIN_BASE -112 - /////////////////// Mapgen V7 flags #define MGV7_MOUNTAINS 0x01 #define MGV7_RIDGES 0x02 @@ -107,16 +105,16 @@ public: int getGroundLevelAtPoint(v2s16 p); Biome *getBiomeAtPoint(v3s16 p); - float baseTerrainLevelAtPoint(int x, int z); + float baseTerrainLevelAtPoint(s16 x, s16 z); float baseTerrainLevelFromMap(int index); - bool getMountainTerrainAtPoint(int x, int y, int z); - bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, int y); + bool getMountainTerrainAtPoint(s16 x, s16 y, s16 z); + bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y); void calculateNoise(); virtual int generateTerrain(); - int generateBaseTerrain(); - int generateMountainTerrain(int ymax); + void generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_max_y); + int generateMountainTerrain(s16 ymax); void generateRidgeTerrain(); MgStoneType generateBiomes(float *heat_map, float *humidity_map); @@ -124,7 +122,7 @@ public: //void addTopNodes(); - void generateCaves(int max_stone_y); + void generateCaves(s16 max_stone_y); }; struct MapgenFactoryV7 : public MapgenFactory { From e234d8b3786d5adfbdf3d1a2123c3e8d91c21880 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 8 Jul 2015 00:45:24 -0400 Subject: [PATCH 181/670] Clean-up Minimap code - Fixed race conditions - Fixed null dereference - Fixed out-of-bounds array access - MinimapMapblock is now allocated and added to update queue only when enabled - Removed dependency on LocalPlayer - Fixed code style - Simplified expressions and program logic - Cleaned minimap object interfaces --- src/client.cpp | 14 +- src/game.cpp | 3 +- src/mapblock_mesh.cpp | 32 +-- src/minimap.cpp | 653 ++++++++++++++++++++++++------------------ src/minimap.h | 146 +++++----- 5 files changed, 450 insertions(+), 398 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 2f8babfa2..66aac6229 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -525,18 +525,23 @@ void Client::step(float dtime) while (!m_mesh_update_thread.m_queue_out.empty()) { num_processed_meshes++; + + MinimapMapblock *minimap_mapblock = NULL; + bool do_mapper_update = true; + MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx(); MapBlock *block = m_env.getMap().getBlockNoCreateNoEx(r.p); - MinimapMapblock *minimap_mapblock = NULL; if (block) { // Delete the old mesh - if (block->mesh != NULL) { + if (block->mesh != NULL) { delete block->mesh; block->mesh = NULL; } - if (r.mesh) + if (r.mesh) { minimap_mapblock = r.mesh->getMinimapMapblock(); + do_mapper_update = (minimap_mapblock != NULL); + } if (r.mesh && r.mesh->getMesh()->getMeshBufferCount() == 0) { delete r.mesh; @@ -550,7 +555,8 @@ void Client::step(float dtime) minimap_mapblock = NULL; } - m_mapper->addBlock(r.p, minimap_mapblock); + if (do_mapper_update) + m_mapper->addBlock(r.p, minimap_mapblock); if (r.ack_block_to_server) { /* diff --git a/src/game.cpp b/src/game.cpp index 94fb41852..0189143b8 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4045,10 +4045,11 @@ void Game::updateFrame(std::vector &highlight_boxes, } /* - Update minimap pos + Update minimap pos and rotation */ if (flags.show_minimap && flags.show_hud) { mapper->setPos(floatToInt(player->getPosition(), BS)); + mapper->setAngle(player->getYaw()); } /* diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 0e4831166..145ab40c2 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1029,7 +1029,7 @@ static void updateAllFastFaceRows(MeshMakeData *data, MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_mesh(new scene::SMesh()), - m_minimap_mapblock(new MinimapMapblock), + m_minimap_mapblock(NULL), m_gamedef(data->m_gamedef), m_tsrc(m_gamedef->getTextureSource()), m_shdrsrc(m_gamedef->getShaderSource()), @@ -1044,29 +1044,9 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_enable_highlighting = g_settings->getBool("enable_node_highlighting"); if (g_settings->getBool("enable_minimap")) { - v3s16 blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE; - for(s16 x = 0; x < MAP_BLOCKSIZE; x++) { - for(s16 z = 0; z < MAP_BLOCKSIZE; z++) { - s16 air_count = 0; - bool surface_found = false; - MinimapPixel* minimap_pixel = &m_minimap_mapblock->data[x + z * MAP_BLOCKSIZE]; - for(s16 y = MAP_BLOCKSIZE -1; y > -1; y--) { - v3s16 p(x, y, z); - MapNode n = data->m_vmanip.getNodeNoEx(blockpos_nodes + p); - if (!surface_found && n.getContent() != CONTENT_AIR) { - minimap_pixel->height = y; - minimap_pixel->id = n.getContent(); - surface_found = true; - } else if (n.getContent() == CONTENT_AIR) { - air_count++; - } - } - if (!surface_found) { - minimap_pixel->id = CONTENT_AIR; - } - minimap_pixel->air_count = air_count; - } - } + m_minimap_mapblock = new MinimapMapblock; + m_minimap_mapblock->getMinimapNodes( + &data->m_vmanip, data->m_blockpos * MAP_BLOCKSIZE); } // 4-21ms for MAP_BLOCKSIZE=16 (NOTE: probably outdated) @@ -1183,7 +1163,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): } if(m_enable_highlighting && p.tile.material_flags & MATERIAL_FLAG_HIGHLIGHTED) - m_highlighted_materials.push_back(i); + m_highlighted_materials.push_back(i); for(u32 j = 0; j < p.vertices.size(); j++) { @@ -1400,7 +1380,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat // Node highlighting if (m_enable_highlighting) { u8 day = m_highlight_mesh_color.getRed(); - u8 night = m_highlight_mesh_color.getGreen(); + u8 night = m_highlight_mesh_color.getGreen(); video::SColor hc; finalColorBlend(hc, day, night, daynight_ratio); float sin_r = 0.07 * sin(1.5 * time); diff --git a/src/minimap.cpp b/src/minimap.cpp index b26f8c665..d37a083ef 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "minimap.h" +#include #include "logoutputbuffer.h" #include "jthread/jmutexautolock.h" #include "jthread/jsemaphore.h" @@ -27,138 +28,125 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "util/numeric.h" #include "util/string.h" -#include -QueuedMinimapUpdate::QueuedMinimapUpdate(): - pos(-1337,-1337,-1337), - data(NULL) -{ -} -QueuedMinimapUpdate::~QueuedMinimapUpdate() -{ - delete data; -} - -MinimapUpdateQueue::MinimapUpdateQueue() -{ -} - -MinimapUpdateQueue::~MinimapUpdateQueue() -{ - JMutexAutoLock lock(m_mutex); - - for (std::list::iterator - i = m_queue.begin(); - i != m_queue.end(); ++i) { - QueuedMinimapUpdate *q = *i; - delete q; - } -} - -bool MinimapUpdateQueue::addBlock(v3s16 pos, MinimapMapblock *data) -{ - DSTACK(__FUNCTION_NAME); - - JMutexAutoLock lock(m_mutex); - - /* - Find if block is already in queue. - If it is, update the data and quit. - */ - for (std::list::iterator - i = m_queue.begin(); - i != m_queue.end(); ++i) { - QueuedMinimapUpdate *q = *i; - if (q->pos == pos) { - delete q->data; - q->data = data; - return false; - } - } - - /* - Add the block - */ - QueuedMinimapUpdate *q = new QueuedMinimapUpdate; - q->pos = pos; - q->data = data; - m_queue.push_back(q); - return true; -} - -QueuedMinimapUpdate * MinimapUpdateQueue::pop() -{ - JMutexAutoLock lock(m_mutex); - - for (std::list::iterator - i = m_queue.begin(); - i != m_queue.end(); i++) { - QueuedMinimapUpdate *q = *i; - m_queue.erase(i); - return q; - } - return NULL; -} - -/* - Minimap update thread -*/ - -void MinimapUpdateThread::enqueue_Block(v3s16 pos, MinimapMapblock *data) -{ - m_queue.addBlock(pos, data); - deferUpdate(); -} - -void MinimapUpdateThread::doUpdate() -{ - while (m_queue.size()) { - QueuedMinimapUpdate *q = m_queue.pop(); - std::map::iterator it; - it = m_blocks_cache.find(q->pos); - if (q->data) { - m_blocks_cache[q->pos] = q->data; - } else if (it != m_blocks_cache.end()) { - delete it->second; - m_blocks_cache.erase(it); - } - } - if (data->map_invalidated) { - if (data->mode != MINIMAP_MODE_OFF) { - getMap(data->pos, data->map_size, data->scan_height, data->radar); - data->map_invalidated = false; - } - } -} +//// +//// MinimapUpdateThread +//// MinimapUpdateThread::~MinimapUpdateThread() { for (std::map::iterator it = m_blocks_cache.begin(); - it != m_blocks_cache.end(); it++) { + it != m_blocks_cache.end(); ++it) { delete it->second; } + + for (std::deque::iterator + it = m_update_queue.begin(); + it != m_update_queue.end(); ++it) { + QueuedMinimapUpdate &q = *it; + delete q.data; + } } -MinimapPixel *MinimapUpdateThread::getMinimapPixel(v3s16 pos, s16 height, s16 &pixel_height) +bool MinimapUpdateThread::pushBlockUpdate(v3s16 pos, MinimapMapblock *data) { - pixel_height = height - MAP_BLOCKSIZE; + JMutexAutoLock lock(m_queue_mutex); + + // Find if block is already in queue. + // If it is, update the data and quit. + for (std::deque::iterator + it = m_update_queue.begin(); + it != m_update_queue.end(); ++it) { + QueuedMinimapUpdate &q = *it; + if (q.pos == pos) { + delete q.data; + q.data = data; + return false; + } + } + + // Add the block + QueuedMinimapUpdate q; + q.pos = pos; + q.data = data; + m_update_queue.push_back(q); + + return true; +} + +bool MinimapUpdateThread::popBlockUpdate(QueuedMinimapUpdate *update) +{ + JMutexAutoLock lock(m_queue_mutex); + + if (m_update_queue.empty()) + return false; + + *update = m_update_queue.front(); + m_update_queue.pop_front(); + + return true; +} + +void MinimapUpdateThread::enqueueBlock(v3s16 pos, MinimapMapblock *data) +{ + pushBlockUpdate(pos, data); + deferUpdate(); +} + + +void MinimapUpdateThread::doUpdate() +{ + QueuedMinimapUpdate update; + + while (popBlockUpdate(&update)) { + if (update.data) { + m_blocks_cache[update.pos] = update.data; + } else { + std::map::iterator it; + it = m_blocks_cache.find(update.pos); + if (it != m_blocks_cache.end()) { + delete it->second; + m_blocks_cache.erase(it); + } + } + } + + if (data->map_invalidated && data->mode != MINIMAP_MODE_OFF) { + getMap(data->pos, data->map_size, data->scan_height, data->is_radar); + data->map_invalidated = false; + } +} + +MinimapPixel *MinimapUpdateThread::getMinimapPixel(v3s16 pos, + s16 scan_height, s16 *pixel_height) +{ + s16 height = scan_height - MAP_BLOCKSIZE; v3s16 blockpos_max, blockpos_min, relpos; - getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y - height / 2, pos.Z), blockpos_min, relpos); - getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y + height / 2, pos.Z), blockpos_max, relpos); - std::map::iterator it; + + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y - scan_height / 2, pos.Z), + blockpos_min, relpos); + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y + scan_height / 2, pos.Z), + blockpos_max, relpos); + for (s16 i = blockpos_max.Y; i > blockpos_min.Y - 1; i--) { - it = m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); + std::map::iterator it = + m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); if (it != m_blocks_cache.end()) { - MinimapPixel *pixel = &it->second->data[relpos.X + relpos.Z * MAP_BLOCKSIZE]; + MinimapMapblock *mmblock = it->second; + MinimapPixel *pixel = &mmblock->data[relpos.Z * MAP_BLOCKSIZE + relpos.X]; if (pixel->id != CONTENT_AIR) { - pixel_height += pixel->height; + *pixel_height = height + pixel->height; return pixel; } } - pixel_height -= MAP_BLOCKSIZE; + + height -= MAP_BLOCKSIZE; } + return NULL; } @@ -166,80 +154,100 @@ s16 MinimapUpdateThread::getAirCount(v3s16 pos, s16 height) { s16 air_count = 0; v3s16 blockpos_max, blockpos_min, relpos; - getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y - height / 2, pos.Z), blockpos_min, relpos); - getNodeBlockPosWithOffset(v3s16(pos.X, pos.Y + height / 2, pos.Z), blockpos_max, relpos); - std::map::iterator it; + + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y - height / 2, pos.Z), + blockpos_min, relpos); + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y + height / 2, pos.Z), + blockpos_max, relpos); + for (s16 i = blockpos_max.Y; i > blockpos_min.Y - 1; i--) { - it = m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); + std::map::iterator it = + m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); if (it != m_blocks_cache.end()) { - MinimapPixel *pixel = &it->second->data[relpos.X + relpos.Z * MAP_BLOCKSIZE]; + MinimapMapblock *mmblock = it->second; + MinimapPixel *pixel = &mmblock->data[relpos.Z * MAP_BLOCKSIZE + relpos.X]; air_count += pixel->air_count; } } + return air_count; } -void MinimapUpdateThread::getMap(v3s16 pos, s16 size, s16 height, bool radar) +void MinimapUpdateThread::getMap(v3s16 pos, s16 size, s16 height, bool is_radar) { - v3s16 p = v3s16 (pos.X - size / 2, pos.Y, pos.Z - size / 2); + v3s16 p = v3s16(pos.X - size / 2, pos.Y, pos.Z - size / 2); - for (s16 x = 0; x < size; x++) { - for (s16 z = 0; z < size; z++){ - u16 id = CONTENT_AIR; - MinimapPixel* minimap_pixel = &data->minimap_scan[x + z * size]; - if (!radar) { - s16 pixel_height = 0; - MinimapPixel* cached_pixel = - getMinimapPixel(v3s16(p.X + x, p.Y, p.Z + z), height, pixel_height); - if (cached_pixel) { - id = cached_pixel->id; - minimap_pixel->height = pixel_height; - } - } else { - minimap_pixel->air_count = getAirCount (v3s16(p.X + x, p.Y, p.Z + z), height); + for (s16 x = 0; x < size; x++) + for (s16 z = 0; z < size; z++) { + u16 id = CONTENT_AIR; + MinimapPixel *mmpixel = &data->minimap_scan[x + z * size]; + + if (!is_radar) { + s16 pixel_height = 0; + MinimapPixel *cached_pixel = + getMinimapPixel(v3s16(p.X + x, p.Y, p.Z + z), height, &pixel_height); + if (cached_pixel) { + id = cached_pixel->id; + mmpixel->height = pixel_height; } - minimap_pixel->id = id; + } else { + mmpixel->air_count = getAirCount(v3s16(p.X + x, p.Y, p.Z + z), height); } + + mmpixel->id = id; } } +//// +//// Mapper +//// + Mapper::Mapper(IrrlichtDevice *device, Client *client) { - this->device = device; - this->client = client; - this->driver = device->getVideoDriver(); - this->tsrc = client->getTextureSource(); - this->player = client->getEnv().getLocalPlayer(); - this->shdrsrc = client->getShaderSource(); + this->driver = device->getVideoDriver(); + this->m_tsrc = client->getTextureSource(); + this->m_shdrsrc = client->getShaderSource(); + this->m_ndef = client->getNodeDefManager(); + // Initialize static settings m_enable_shaders = g_settings->getBool("enable_shaders"); - m_enable_shaders = g_settings->getBool("enable_shaders"); - if (g_settings->getBool("minimap_double_scan_height")) { - m_surface_mode_scan_height = 256; - } else { - m_surface_mode_scan_height = 128; - } + m_surface_mode_scan_height = + g_settings->getBool("minimap_double_scan_height") ? 256 : 128; + + // Initialize minimap data data = new MinimapData; - data->mode = MINIMAP_MODE_OFF; - data->radar = false; + data->mode = MINIMAP_MODE_OFF; + data->is_radar = false; data->map_invalidated = true; data->heightmap_image = NULL; - data->minimap_image = NULL; - data->texture = NULL; + data->minimap_image = NULL; + data->texture = NULL; data->minimap_shape_round = g_settings->getBool("minimap_shape_round"); - std::string fname1 = "minimap_mask_round.png"; - std::string fname2 = "minimap_overlay_round.png"; - data->minimap_mask_round = driver->createImage (tsrc->getTexture(fname1), - core::position2d(0,0), core::dimension2d(512,512)); - data->minimap_overlay_round = tsrc->getTexture(fname2); - fname1 = "minimap_mask_square.png"; - fname2 = "minimap_overlay_square.png"; - data->minimap_mask_square = driver->createImage (tsrc->getTexture(fname1), - core::position2d(0,0), core::dimension2d(512,512)); - data->minimap_overlay_square = tsrc->getTexture(fname2); - data->player_marker = tsrc->getTexture("player_marker.png"); + + // Get round minimap textures + data->minimap_mask_round = driver->createImage( + m_tsrc->getTexture("minimap_mask_round.png"), + core::position2d(0, 0), + core::dimension2d(MINIMAP_MAX_SX, MINIMAP_MAX_SY)); + data->minimap_overlay_round = m_tsrc->getTexture("minimap_overlay_round.png"); + + // Get square minimap textures + data->minimap_mask_square = driver->createImage( + m_tsrc->getTexture("minimap_mask_square.png"), + core::position2d(0, 0), + core::dimension2d(MINIMAP_MAX_SX, MINIMAP_MAX_SY)); + data->minimap_overlay_square = m_tsrc->getTexture("minimap_overlay_square.png"); + + // Create player marker texture + data->player_marker = m_tsrc->getTexture("player_marker.png"); + + // Create mesh buffer for minimap m_meshbuffer = getMinimapMeshBuffer(); - m_minimap_update_thread = new MinimapUpdateThread(device, client); + + // Initialize and start thread + m_minimap_update_thread = new MinimapUpdateThread(); m_minimap_update_thread->data = data; m_minimap_update_thread->Start(); } @@ -248,20 +256,24 @@ Mapper::~Mapper() { m_minimap_update_thread->Stop(); m_minimap_update_thread->Wait(); + m_meshbuffer->drop(); + data->minimap_mask_round->drop(); data->minimap_mask_square->drop(); + driver->removeTexture(data->texture); driver->removeTexture(data->heightmap_texture); driver->removeTexture(data->minimap_overlay_round); driver->removeTexture(data->minimap_overlay_square); + delete data; delete m_minimap_update_thread; } -void Mapper::addBlock (v3s16 pos, MinimapMapblock *data) +void Mapper::addBlock(v3s16 pos, MinimapMapblock *data) { - m_minimap_update_thread->enqueue_Block(pos, data); + m_minimap_update_thread->enqueueBlock(pos, data); } MinimapMode Mapper::getMinimapMode() @@ -271,121 +283,150 @@ MinimapMode Mapper::getMinimapMode() void Mapper::toggleMinimapShape() { + JMutexAutoLock lock(m_mutex); + data->minimap_shape_round = !data->minimap_shape_round; - g_settings->setBool(("minimap_shape_round"), data->minimap_shape_round); + g_settings->setBool("minimap_shape_round", data->minimap_shape_round); m_minimap_update_thread->deferUpdate(); } void Mapper::setMinimapMode(MinimapMode mode) { - static const u16 modeDefs[7 * 3] = { - 0, 0, 0, - 0, m_surface_mode_scan_height, 256, - 0, m_surface_mode_scan_height, 128, - 0, m_surface_mode_scan_height, 64, - 1, 32, 128, - 1, 32, 64, - 1, 32, 32}; + static const MinimapModeDef modedefs[MINIMAP_MODE_COUNT] = { + {false, 0, 0}, + {false, m_surface_mode_scan_height, 256}, + {false, m_surface_mode_scan_height, 128}, + {false, m_surface_mode_scan_height, 64}, + {true, 32, 128}, + {true, 32, 64}, + {true, 32, 32} + }; + + if (mode >= MINIMAP_MODE_COUNT) + return; JMutexAutoLock lock(m_mutex); - data->radar = (bool)modeDefs[(int)mode * 3]; - data->scan_height = modeDefs[(int)mode * 3 + 1]; - data->map_size = modeDefs[(int)mode * 3 + 2]; - data->mode = mode; + + data->is_radar = modedefs[mode].is_radar; + data->scan_height = modedefs[mode].scan_height; + data->map_size = modedefs[mode].map_size; + data->mode = mode; + m_minimap_update_thread->deferUpdate(); } void Mapper::setPos(v3s16 pos) { - JMutexAutoLock lock(m_mutex); - if (pos != data->old_pos) { - data->old_pos = data->pos; - data->pos = pos; + bool do_update = false; + + { + JMutexAutoLock lock(m_mutex); + + if (pos != data->old_pos) { + data->old_pos = data->pos; + data->pos = pos; + do_update = true; + } + } + + if (do_update) m_minimap_update_thread->deferUpdate(); +} + +void Mapper::setAngle(f32 angle) +{ + m_angle = angle; +} + +void Mapper::blitMinimapPixelsToImageRadar(video::IImage *map_image) +{ + for (s16 x = 0; x < data->map_size; x++) + for (s16 z = 0; z < data->map_size; z++) { + MinimapPixel *mmpixel = &data->minimap_scan[x + z * data->map_size]; + + video::SColor c(240, 0, 0, 0); + if (mmpixel->air_count > 0) + c.setGreen(core::clamp(core::round32(32 + mmpixel->air_count * 8), 0, 255)); + + map_image->setPixel(x, data->map_size - z - 1, c); + } +} + +void Mapper::blitMinimapPixelsToImageSurface( + video::IImage *map_image, video::IImage *heightmap_image) +{ + for (s16 x = 0; x < data->map_size; x++) + for (s16 z = 0; z < data->map_size; z++) { + MinimapPixel *mmpixel = &data->minimap_scan[x + z * data->map_size]; + + video::SColor c = m_ndef->get(mmpixel->id).minimap_color; + c.setAlpha(240); + + map_image->setPixel(x, data->map_size - z - 1, c); + + u32 h = mmpixel->height; + heightmap_image->setPixel(x,data->map_size - z - 1, + video::SColor(255, h, h, h)); } } video::ITexture *Mapper::getMinimapTexture() { // update minimap textures when new scan is ready - if (!data->map_invalidated) { - // create minimap and heightmap image - core::dimension2d dim(data->map_size,data->map_size); - video::IImage *map_image = driver->createImage(video::ECF_A8R8G8B8, dim); - video::IImage *heightmap_image = driver->createImage(video::ECF_A8R8G8B8, dim); - video::IImage *minimap_image = driver->createImage(video::ECF_A8R8G8B8, - core::dimension2d(512, 512)); + if (data->map_invalidated) + return data->texture; - video::SColor c; - if (!data->radar) { - // surface mode - for (s16 x = 0; x < data->map_size; x++) { - for (s16 z = 0; z < data->map_size; z++) { - MinimapPixel* minimap_pixel = &data->minimap_scan[x + z * data->map_size]; - const ContentFeatures &f = client->getNodeDefManager()->get(minimap_pixel->id); - c = f.minimap_color; - c.setAlpha(240); - map_image->setPixel(x, data->map_size - z -1, c); - u32 h = minimap_pixel->height; - heightmap_image->setPixel(x,data->map_size -z -1, - video::SColor(255, h, h, h)); - } - } - } else { - // radar mode - c = video::SColor (240, 0 , 0, 0); - for (s16 x = 0; x < data->map_size; x++) { - for (s16 z = 0; z < data->map_size; z++) { - MinimapPixel* minimap_pixel = &data->minimap_scan[x + z * data->map_size]; - if (minimap_pixel->air_count > 0) { - c.setGreen(core::clamp(core::round32(32 + minimap_pixel->air_count * 8), 0, 255)); - } else { - c.setGreen(0); - } - map_image->setPixel(x, data->map_size - z -1, c); - } - } - } + // create minimap and heightmap images in memory + core::dimension2d dim(data->map_size, data->map_size); + video::IImage *map_image = driver->createImage(video::ECF_A8R8G8B8, dim); + video::IImage *heightmap_image = driver->createImage(video::ECF_A8R8G8B8, dim); + video::IImage *minimap_image = driver->createImage(video::ECF_A8R8G8B8, + core::dimension2d(MINIMAP_MAX_SX, MINIMAP_MAX_SY)); - map_image->copyToScaling(minimap_image); - map_image->drop(); + // Blit MinimapPixels to images + if (data->is_radar) + blitMinimapPixelsToImageRadar(map_image); + else + blitMinimapPixelsToImageSurface(map_image, heightmap_image); - video::IImage *minimap_mask; - if (data->minimap_shape_round) { - minimap_mask = data->minimap_mask_round; - } else { - minimap_mask = data->minimap_mask_square; - } - for (s16 x = 0; x < 512; x++) { - for (s16 y = 0; y < 512; y++) { - video::SColor mask_col = minimap_mask->getPixel(x, y); - if (!mask_col.getAlpha()) { - minimap_image->setPixel(x, y, video::SColor(0,0,0,0)); - } - } - } + map_image->copyToScaling(minimap_image); + map_image->drop(); - if (data->texture) { - driver->removeTexture(data->texture); - } - if (data->heightmap_texture) { - driver->removeTexture(data->heightmap_texture); - } - data->texture = driver->addTexture("minimap__", minimap_image); - data->heightmap_texture = driver->addTexture("minimap_heightmap__", heightmap_image); - minimap_image->drop(); - heightmap_image->drop(); + video::IImage *minimap_mask = data->minimap_shape_round ? + data->minimap_mask_round : data->minimap_mask_square; - data->map_invalidated = true; + if (minimap_mask) { + for (s16 y = 0; y < MINIMAP_MAX_SY; y++) + for (s16 x = 0; x < MINIMAP_MAX_SX; x++) { + video::SColor mask_col = minimap_mask->getPixel(x, y); + if (!mask_col.getAlpha()) + minimap_image->setPixel(x, y, video::SColor(0,0,0,0)); + } } + + if (data->texture) + driver->removeTexture(data->texture); + if (data->heightmap_texture) + driver->removeTexture(data->heightmap_texture); + + data->texture = driver->addTexture("minimap__", minimap_image); + data->heightmap_texture = + driver->addTexture("minimap_heightmap__", heightmap_image); + minimap_image->drop(); + heightmap_image->drop(); + + data->map_invalidated = true; + return data->texture; } v3f Mapper::getYawVec() { if (data->minimap_shape_round) { - return v3f(cos(player->getYaw()* core::DEGTORAD), - sin(player->getYaw()* core::DEGTORAD), 1.0); + return v3f( + cos(m_angle * core::DEGTORAD), + sin(m_angle * core::DEGTORAD), + 1.0); } else { return v3f(1.0, 0.0, 1.0); } @@ -395,7 +436,7 @@ scene::SMeshBuffer *Mapper::getMinimapMeshBuffer() { scene::SMeshBuffer *buf = new scene::SMeshBuffer(); buf->Vertices.set_used(4); - buf->Indices .set_used(6); + buf->Indices.set_used(6); video::SColor c(255, 255, 255, 255); buf->Vertices[0] = video::S3DVertex(-1, -1, 0, 0, 0, 1, c, 0, 1); @@ -415,59 +456,99 @@ scene::SMeshBuffer *Mapper::getMinimapMeshBuffer() void Mapper::drawMinimap() { + video::ITexture *minimap_texture = getMinimapTexture(); + if (!minimap_texture) + return; + v2u32 screensize = porting::getWindowSize(); - u32 size = 0.25 * screensize.Y; - video::ITexture* minimap_texture = getMinimapTexture(); - core::matrix4 matrix; + const u32 size = 0.25 * screensize.Y; core::rect oldViewPort = driver->getViewPort(); - driver->setViewPort(core::rect(screensize.X - size - 10, 10, - screensize.X - 10, size + 10)); core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION); - driver->setTransform(video::ETS_PROJECTION, core::matrix4()); core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW); + + driver->setViewPort(core::rect( + screensize.X - size - 10, 10, + screensize.X - 10, size + 10)); + driver->setTransform(video::ETS_PROJECTION, core::matrix4()); driver->setTransform(video::ETS_VIEW, core::matrix4()); + + core::matrix4 matrix; matrix.makeIdentity(); - if (minimap_texture) { - video::SMaterial& material = m_meshbuffer->getMaterial(); - material.setFlag(video::EMF_TRILINEAR_FILTER, true); - material.Lighting = false; - material.TextureLayer[0].Texture = minimap_texture; - material.TextureLayer[1].Texture = data->heightmap_texture; - if (m_enable_shaders && !data->radar) { - u16 sid = shdrsrc->getShader("minimap_shader", 1, 1); - material.MaterialType = shdrsrc->getShaderInfo(sid).material; - } else { - material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - } + video::SMaterial &material = m_meshbuffer->getMaterial(); + material.setFlag(video::EMF_TRILINEAR_FILTER, true); + material.Lighting = false; + material.TextureLayer[0].Texture = minimap_texture; + material.TextureLayer[1].Texture = data->heightmap_texture; + + if (m_enable_shaders && !data->is_radar) { + u16 sid = m_shdrsrc->getShader("minimap_shader", 1, 1); + material.MaterialType = m_shdrsrc->getShaderInfo(sid).material; + } else { + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + } + + if (data->minimap_shape_round) + matrix.setRotationDegrees(core::vector3df(0, 0, 360 - m_angle)); + + // Draw minimap + driver->setTransform(video::ETS_WORLD, matrix); + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + + // Draw overlay + video::ITexture *minimap_overlay = data->minimap_shape_round ? + data->minimap_overlay_round : data->minimap_overlay_square; + material.TextureLayer[0].Texture = minimap_overlay; + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + + // If round minimap, draw player marker + if (!data->minimap_shape_round) { + matrix.setRotationDegrees(core::vector3df(0, 0, m_angle)); + material.TextureLayer[0].Texture = data->player_marker; - if (data->minimap_shape_round) - matrix.setRotationDegrees(core::vector3df(0, 0, 360 - player->getYaw())); driver->setTransform(video::ETS_WORLD, matrix); driver->setMaterial(material); driver->drawMeshBuffer(m_meshbuffer); - video::ITexture *minimap_overlay; - if (data->minimap_shape_round) { - minimap_overlay = data->minimap_overlay_round; - } else { - minimap_overlay = data->minimap_overlay_square; - } - material.TextureLayer[0].Texture = minimap_overlay; - material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - driver->setMaterial(material); - driver->drawMeshBuffer(m_meshbuffer); - - if (!data->minimap_shape_round) { - matrix.setRotationDegrees(core::vector3df(0, 0, player->getYaw())); - driver->setTransform(video::ETS_WORLD, matrix); - material.TextureLayer[0].Texture = data->player_marker; - driver->setMaterial(material); - driver->drawMeshBuffer(m_meshbuffer); - } } + // Reset transformations driver->setTransform(video::ETS_VIEW, oldViewMat); driver->setTransform(video::ETS_PROJECTION, oldProjMat); driver->setViewPort(oldViewPort); } + +//// +//// MinimapMapblock +//// + +void MinimapMapblock::getMinimapNodes(VoxelManipulator *vmanip, v3s16 pos) +{ + + for (s16 x = 0; x < MAP_BLOCKSIZE; x++) + for (s16 z = 0; z < MAP_BLOCKSIZE; z++) { + s16 air_count = 0; + bool surface_found = false; + MinimapPixel *mmpixel = &data[z * MAP_BLOCKSIZE + x]; + + for (s16 y = MAP_BLOCKSIZE -1; y >= 0; y--) { + v3s16 p(x, y, z); + MapNode n = vmanip->getNodeNoEx(pos + p); + if (!surface_found && n.getContent() != CONTENT_AIR) { + mmpixel->height = y; + mmpixel->id = n.getContent(); + surface_found = true; + } else if (n.getContent() == CONTENT_AIR) { + air_count++; + } + } + + if (!surface_found) + mmpixel->id = CONTENT_AIR; + + mmpixel->air_count = air_count; + } +} diff --git a/src/minimap.h b/src/minimap.h index 4ca0451b7..edb491717 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -20,14 +20,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MINIMAP_HEADER #define MINIMAP_HEADER +#include +#include +#include #include "irrlichttypes_extrabloated.h" #include "client.h" #include "voxel.h" #include "jthread/jmutex.h" #include "jthread/jsemaphore.h" -#include -#include -#include + +#define MINIMAP_MAX_SX 512 +#define MINIMAP_MAX_SY 512 enum MinimapMode { MINIMAP_MODE_OFF, @@ -36,31 +39,37 @@ enum MinimapMode { MINIMAP_MODE_SURFACEx4, MINIMAP_MODE_RADARx1, MINIMAP_MODE_RADARx2, - MINIMAP_MODE_RADARx4 + MINIMAP_MODE_RADARx4, + MINIMAP_MODE_COUNT, }; -struct MinimapPixel -{ +struct MinimapModeDef { + bool is_radar; + u16 scan_height; + u16 map_size; +}; + +struct MinimapPixel { u16 id; u16 height; u16 air_count; u16 light; }; -struct MinimapMapblock -{ +struct MinimapMapblock { + void getMinimapNodes(VoxelManipulator *vmanip, v3s16 pos); + MinimapPixel data[MAP_BLOCKSIZE * MAP_BLOCKSIZE]; }; -struct MinimapData -{ - bool radar; +struct MinimapData { + bool is_radar; MinimapMode mode; v3s16 pos; v3s16 old_pos; u16 scan_height; u16 map_size; - MinimapPixel minimap_scan[512 * 512]; + MinimapPixel minimap_scan[MINIMAP_MAX_SX * MINIMAP_MAX_SY]; bool map_invalidated; bool minimap_shape_round; video::IImage *minimap_image; @@ -74,104 +83,79 @@ struct MinimapData video::ITexture *player_marker; }; -struct QueuedMinimapUpdate -{ +struct QueuedMinimapUpdate { v3s16 pos; MinimapMapblock *data; - - QueuedMinimapUpdate(); - ~QueuedMinimapUpdate(); }; -/* - A thread-safe queue of minimap mapblocks update tasks -*/ - -class MinimapUpdateQueue -{ +class MinimapUpdateThread : public UpdateThread { public: - MinimapUpdateQueue(); + virtual ~MinimapUpdateThread(); - ~MinimapUpdateQueue(); + void getMap(v3s16 pos, s16 size, s16 height, bool radar); + MinimapPixel *getMinimapPixel(v3s16 pos, s16 height, s16 *pixel_height); + s16 getAirCount(v3s16 pos, s16 height); + video::SColor getColorFromId(u16 id); - bool addBlock(v3s16 pos, MinimapMapblock *data); + void enqueueBlock(v3s16 pos, MinimapMapblock *data); - QueuedMinimapUpdate *pop(); + bool pushBlockUpdate(v3s16 pos, MinimapMapblock *data); + bool popBlockUpdate(QueuedMinimapUpdate *update); - u32 size() - { - JMutexAutoLock lock(m_mutex); - return m_queue.size(); - } - -private: - std::list m_queue; - JMutex m_mutex; -}; - -class MinimapUpdateThread : public UpdateThread -{ -private: - MinimapUpdateQueue m_queue; - std::map m_blocks_cache; + MinimapData *data; protected: const char *getName() - { return "MinimapUpdateThread"; } + { + return "MinimapUpdateThread"; + } + virtual void doUpdate(); -public: - MinimapUpdateThread(IrrlichtDevice *device, Client *client) - { - this->device = device; - this->client = client; - this->driver = device->getVideoDriver(); - this->tsrc = client->getTextureSource(); - } - ~MinimapUpdateThread(); - void getMap (v3s16 pos, s16 size, s16 height, bool radar); - MinimapPixel *getMinimapPixel (v3s16 pos, s16 height, s16 &pixel_height); - s16 getAirCount (v3s16 pos, s16 height); - video::SColor getColorFromId(u16 id); - - void enqueue_Block(v3s16 pos, MinimapMapblock *data); - IrrlichtDevice *device; - Client *client; - video::IVideoDriver *driver; - ITextureSource *tsrc; - MinimapData *data; +private: + JMutex m_queue_mutex; + std::deque m_update_queue; + std::map m_blocks_cache; }; -class Mapper -{ -private: - MinimapUpdateThread *m_minimap_update_thread; - video::ITexture *minimap_texture; - scene::SMeshBuffer *m_meshbuffer; - bool m_enable_shaders; - u16 m_surface_mode_scan_height; - JMutex m_mutex; - +class Mapper { public: Mapper(IrrlichtDevice *device, Client *client); ~Mapper(); void addBlock(v3s16 pos, MinimapMapblock *data); - void setPos(v3s16 pos); - video::ITexture* getMinimapTexture(); + v3f getYawVec(); MinimapMode getMinimapMode(); + + void setPos(v3s16 pos); + void setAngle(f32 angle); void setMinimapMode(MinimapMode mode); void toggleMinimapShape(); + + + video::ITexture *getMinimapTexture(); + + void blitMinimapPixelsToImageRadar(video::IImage *map_image); + void blitMinimapPixelsToImageSurface(video::IImage *map_image, + video::IImage *heightmap_image); + scene::SMeshBuffer *getMinimapMeshBuffer(); void drawMinimap(); - IrrlichtDevice *device; - Client *client; + video::IVideoDriver *driver; - LocalPlayer *player; - ITextureSource *tsrc; - IShaderSource *shdrsrc; MinimapData *data; + +private: + ITextureSource *m_tsrc; + IShaderSource *m_shdrsrc; + INodeDefManager *m_ndef; + MinimapUpdateThread *m_minimap_update_thread; + scene::SMeshBuffer *m_meshbuffer; + bool m_enable_shaders; + u16 m_surface_mode_scan_height; + f32 m_angle; + JMutex m_mutex; }; #endif From b0784ba87168e24b0533fc8718a0157cda5ea405 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 7 Jul 2015 05:55:07 +0200 Subject: [PATCH 182/670] Use UTF-8 instead of narrow Use wide_to_utf8 and utf8_to_wide instead of wide_to_narrow and narrow_to_wide at almost all places. Only exceptions: test functions for narrow conversion, and chat, which is done in a separate commit. --- src/client/clientlauncher.cpp | 2 +- src/content_cao.cpp | 2 +- src/fontengine.h | 2 +- src/game.cpp | 58 ++++++++++++++--------------- src/gettext.cpp | 5 ++- src/gettext.h | 4 +- src/guiEngine.cpp | 10 ++--- src/guiFileSelectMenu.cpp | 4 +- src/guiPasswordChange.cpp | 4 +- src/guiTable.cpp | 2 +- src/hud.cpp | 10 ++--- src/network/clientpackethandler.cpp | 2 +- src/network/serverpackethandler.cpp | 22 +++++------ src/script/lua_api/l_mainmenu.cpp | 2 +- src/script/lua_api/l_server.cpp | 2 +- src/server.cpp | 2 +- src/unittest/test_serialization.cpp | 2 +- src/util/string.cpp | 10 +++++ src/util/string.h | 2 + 19 files changed, 80 insertions(+), 67 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 41ba4f307..50f0690d8 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -183,7 +183,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) { // Set the window caption const wchar_t *text = wgettext("Main Menu"); - device->setWindowCaption((narrow_to_wide(PROJECT_NAME_C) + L" [" + text + L"]").c_str()); + device->setWindowCaption((utf8_to_wide(PROJECT_NAME_C) + L" [" + text + L"]").c_str()); delete[] text; try { // This is used for catching disconnects diff --git a/src/content_cao.cpp b/src/content_cao.cpp index d38cb892a..a16bd4efa 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -970,7 +970,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, if (node && m_is_player && !m_is_local_player) { // Add a text node for showing the name gui::IGUIEnvironment* gui = irr->getGUIEnvironment(); - std::wstring wname = narrow_to_wide(m_name); + std::wstring wname = utf8_to_wide(m_name); m_textnode = smgr->addTextSceneNode(gui->getSkin()->getFont(), wname.c_str(), m_nametag_color, node); m_textnode->grab(); diff --git a/src/fontengine.h b/src/fontengine.h index 9edde05f8..9f7266775 100644 --- a/src/fontengine.h +++ b/src/fontengine.h @@ -59,7 +59,7 @@ public: unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified) { - return getTextWidth(narrow_to_wide(text)); + return getTextWidth(utf8_to_wide(text)); } /** get text width if a text for a specific font */ diff --git a/src/game.cpp b/src/game.cpp index 0189143b8..ef3cb9044 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -85,7 +85,7 @@ struct TextDestNodeMetadata : public TextDest { // This is deprecated I guess? -celeron55 void gotText(std::wstring text) { - std::string ntext = wide_to_narrow(text); + std::string ntext = wide_to_utf8(text); infostream << "Submitting 'text' field of node at (" << m_p.X << "," << m_p.Y << "," << m_p.Z << "): " << ntext << std::endl; StringMap fields; @@ -183,7 +183,7 @@ struct LocalFormspecHandler : public TextDest { (fields.find("quit") != fields.end())) { StringMap::const_iterator it = fields.find("f_text"); if (it != fields.end()) - m_client->typeChatMessage(narrow_to_wide(it->second)); + m_client->typeChatMessage(utf8_to_wide(it->second)); return; } @@ -445,7 +445,7 @@ void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, FontEngine *fe, std::ostringstream os(std::ios_base::binary); g_profiler->printPage(os, show_profiler, show_profiler_max); - std::wstring text = narrow_to_wide(os.str()); + std::wstring text = utf8_to_wide(os.str()); guitext_profiler->setText(text.c_str()); guitext_profiler->setVisible(true); @@ -582,16 +582,16 @@ public: s32 texth = 15; char buf[10]; snprintf(buf, 10, "%.3g", show_max); - font->draw(narrow_to_wide(buf).c_str(), + font->draw(utf8_to_wide(buf).c_str(), core::rect(textx, y - graphh, textx2, y - graphh + texth), meta.color); snprintf(buf, 10, "%.3g", show_min); - font->draw(narrow_to_wide(buf).c_str(), + font->draw(utf8_to_wide(buf).c_str(), core::rect(textx, y - texth, textx2, y), meta.color); - font->draw(narrow_to_wide(id).c_str(), + font->draw(utf8_to_wide(id).c_str(), core::rect(textx, y - graphh / 2 - texth / 2, textx2, y - graphh / 2 + texth / 2), meta.color); @@ -1049,7 +1049,7 @@ static void show_chat_menu(GUIFormSpecMenu **cur_formspec, FORMSPEC_VERSION_STRING SIZE_TAG "field[3,2.35;6,0.5;f_text;;" + text + "]" - "button_exit[4,3;3,0.5;btn_send;" + wide_to_narrow(wstrgettext("Proceed")) + "]" + "button_exit[4,3;3,0.5;btn_send;" + wide_to_utf8(wstrgettext("Proceed")) + "]" ; /* Create menu */ @@ -1089,7 +1089,7 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, bool singleplayermode) { #ifdef __ANDROID__ - std::string control_text = wide_to_narrow(wstrgettext("Default Controls:\n" + std::string control_text = wide_to_utf8(wstrgettext("Default Controls:\n" "No menu visible:\n" "- single tap: button activate\n" "- double tap: place/use\n" @@ -1103,7 +1103,7 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, " --> place single item to slot\n" )); #else - std::string control_text = wide_to_narrow(wstrgettext("Default Controls:\n" + std::string control_text = wide_to_utf8(wstrgettext("Default Controls:\n" "- WASD: move\n" "- Space: jump/climb\n" "- Shift: sneak/go down\n" @@ -1122,23 +1122,23 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, os << FORMSPEC_VERSION_STRING << SIZE_TAG << "button_exit[4," << (ypos++) << ";3,0.5;btn_continue;" - << wide_to_narrow(wstrgettext("Continue")) << "]"; + << wide_to_utf8(wstrgettext("Continue")) << "]"; if (!singleplayermode) { os << "button_exit[4," << (ypos++) << ";3,0.5;btn_change_password;" - << wide_to_narrow(wstrgettext("Change Password")) << "]"; + << wide_to_utf8(wstrgettext("Change Password")) << "]"; } #ifndef __ANDROID__ os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;" - << wide_to_narrow(wstrgettext("Sound Volume")) << "]"; + << wide_to_utf8(wstrgettext("Sound Volume")) << "]"; os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;" - << wide_to_narrow(wstrgettext("Change Keys")) << "]"; + << wide_to_utf8(wstrgettext("Change Keys")) << "]"; #endif os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;" - << wide_to_narrow(wstrgettext("Exit to Menu")) << "]"; + << wide_to_utf8(wstrgettext("Exit to Menu")) << "]"; os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;" - << wide_to_narrow(wstrgettext("Exit to OS")) << "]" + << wide_to_utf8(wstrgettext("Exit to OS")) << "]" << "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]" << "textarea[0.4,0.25;3.5,6;;" << PROJECT_NAME_C "\n" << g_build_info << "\n" @@ -1167,7 +1167,7 @@ static void updateChat(Client &client, f32 dtime, bool show_debug, // Get new messages from error log buffer while (!chat_log_error_buf.empty()) { - chat_backend.addMessage(L"", narrow_to_wide(chat_log_error_buf.get())); + chat_backend.addMessage(L"", utf8_to_wide(chat_log_error_buf.get())); } // Get new messages from client @@ -2059,7 +2059,7 @@ bool Game::createClient(const std::string &playername, /* Set window caption */ - std::wstring str = narrow_to_wide(PROJECT_NAME_C); + std::wstring str = utf8_to_wide(PROJECT_NAME_C); str += L" ["; str += driver->getName(); str += L"]"; @@ -2087,7 +2087,7 @@ bool Game::initGui() { // First line of debug text guitext = guienv->addStaticText( - narrow_to_wide(PROJECT_NAME_C).c_str(), + utf8_to_wide(PROJECT_NAME_C).c_str(), core::rect(0, 0, 0, 0), false, false, guiroot); @@ -2342,7 +2342,7 @@ bool Game::getServerContent(bool *aborted) } progress = 30 + client->mediaReceiveProgress() * 35 + 0.5; - draw_load_screen(narrow_to_wide(message.str()), device, + draw_load_screen(utf8_to_wide(message.str()), device, guienv, dtime, progress); } } @@ -2660,7 +2660,7 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, if (quicktune->hasMessage()) { std::string msg = quicktune->getMessage(); - statustext = narrow_to_wide(msg); + statustext = utf8_to_wide(msg); *statustext_time = 0; } } @@ -2947,7 +2947,7 @@ void Game::increaseViewRange(float *statustext_time) s16 range = g_settings->getS16("viewing_range_nodes_min"); s16 range_new = range + 10; g_settings->set("viewing_range_nodes_min", itos(range_new)); - statustext = narrow_to_wide("Minimum viewing range changed to " + statustext = utf8_to_wide("Minimum viewing range changed to " + itos(range_new)); *statustext_time = 0; } @@ -2962,7 +2962,7 @@ void Game::decreaseViewRange(float *statustext_time) range_new = range; g_settings->set("viewing_range_nodes_min", itos(range_new)); - statustext = narrow_to_wide("Minimum viewing range changed to " + statustext = utf8_to_wide("Minimum viewing range changed to " + itos(range_new)); *statustext_time = 0; } @@ -3577,13 +3577,13 @@ void Game::handlePointingAtNode(GameRunData *runData, NodeMetadata *meta = map.getNodeMetadata(nodepos); if (meta) { - infotext = narrow_to_wide(meta->getString("infotext")); + infotext = utf8_to_wide(meta->getString("infotext")); } else { MapNode n = map.getNodeNoEx(nodepos); if (nodedef_manager->get(n).tiledef[0].name == "unknown_node.png") { infotext = L"Unknown node: "; - infotext += narrow_to_wide(nodedef_manager->get(n).name); + infotext += utf8_to_wide(nodedef_manager->get(n).name); } } @@ -3649,10 +3649,10 @@ void Game::handlePointingAtObject(GameRunData *runData, const v3f &player_position, bool show_debug) { - infotext = narrow_to_wide(runData->selected_object->infoText()); + infotext = utf8_to_wide(runData->selected_object->infoText()); if (infotext == L"" && show_debug) { - infotext = narrow_to_wide(runData->selected_object->debugInfoText()); + infotext = utf8_to_wide(runData->selected_object->debugInfoText()); } if (input->getLeftState()) { @@ -4117,12 +4117,12 @@ void Game::updateGui(float *statustext_time, const RunStats &stats, << ", v_range = " << draw_control->wanted_range << std::setprecision(3) << ", RTT = " << client->getRTT(); - guitext->setText(narrow_to_wide(os.str()).c_str()); + guitext->setText(utf8_to_wide(os.str()).c_str()); guitext->setVisible(true); } else if (flags.show_hud || flags.show_chat) { std::ostringstream os(std::ios_base::binary); os << PROJECT_NAME_C " " << g_version_hash; - guitext->setText(narrow_to_wide(os.str()).c_str()); + guitext->setText(utf8_to_wide(os.str()).c_str()); guitext->setVisible(true); } else { guitext->setVisible(false); @@ -4159,7 +4159,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats, } } - guitext2->setText(narrow_to_wide(os.str()).c_str()); + guitext2->setText(utf8_to_wide(os.str()).c_str()); guitext2->setVisible(true); core::rect rect( diff --git a/src/gettext.cpp b/src/gettext.cpp index 509d506d4..0fd6b574e 100644 --- a/src/gettext.cpp +++ b/src/gettext.cpp @@ -102,8 +102,9 @@ const char* MSVC_LocaleLookup(const char* raw_shortname) { last_raw_value = shortname; - if (glb_supported_locales.find(narrow_to_wide(shortname)) != glb_supported_locales.end()) { - last_full_name = wide_to_narrow(glb_supported_locales[narrow_to_wide(shortname)]); + if (glb_supported_locales.find(utf8_to_wide(shortname)) != glb_supported_locales.end()) { + last_full_name = wide_to_utf8( + glb_supported_locales[utf8_to_wide(shortname)]); return last_full_name.c_str(); } diff --git a/src/gettext.h b/src/gettext.h index 8235efa8a..9b4e801f7 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -39,13 +39,13 @@ void init_gettext(const char *path, const std::string &configured_language, void init_gettext(const char *path, const std::string &configured_language); #endif -extern wchar_t *narrow_to_wide_c(const char *str); +extern wchar_t *utf8_to_wide_c(const char *str); // You must free the returned string! // The returned string is allocated using new inline const wchar_t *wgettext(const char *str) { - return narrow_to_wide_c(gettext(str)); + return utf8_to_wide_c(gettext(str)); } inline std::wstring wstrgettext(const std::string &text) diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp index 3248ef112..eac9db0c6 100644 --- a/src/guiEngine.cpp +++ b/src/guiEngine.cpp @@ -61,7 +61,7 @@ void TextDestGuiEngine::gotText(const StringMap &fields) /******************************************************************************/ void TextDestGuiEngine::gotText(std::wstring text) { - m_engine->getScriptIface()->handleMainMenuEvent(wide_to_narrow(text)); + m_engine->getScriptIface()->handleMainMenuEvent(wide_to_utf8(text)); } /******************************************************************************/ @@ -172,7 +172,7 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, m_sound_manager = &dummySoundManager; //create topleft header - std::wstring t = narrow_to_wide(std::string(PROJECT_NAME_C " ") + + std::wstring t = utf8_to_wide(std::string(PROJECT_NAME_C " ") + g_version_hash); core::rect rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight()); @@ -572,13 +572,13 @@ bool GUIEngine::downloadFile(std::string url, std::string target) /******************************************************************************/ void GUIEngine::setTopleftText(std::string append) { - std::wstring toset = narrow_to_wide(std::string(PROJECT_NAME_C " ") + - g_version_hash); + std::wstring toset = utf8_to_wide(std::string(PROJECT_NAME_C " ") + + g_version_hash); if (append != "") { toset += L" / "; - toset += narrow_to_wide(append); + toset += utf8_to_wide(append); } m_irr_toplefttext->setText(toset.c_str()); diff --git a/src/guiFileSelectMenu.cpp b/src/guiFileSelectMenu.cpp index 9b43ab602..e02407427 100644 --- a/src/guiFileSelectMenu.cpp +++ b/src/guiFileSelectMenu.cpp @@ -26,7 +26,7 @@ GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment* env, std::string title, std::string formname) : GUIModalMenu(env, parent, id, menumgr) { - m_title = narrow_to_wide(title); + m_title = utf8_to_wide(title); m_parent = parent; m_formname = formname; m_text_dst = 0; @@ -87,7 +87,7 @@ void GUIFileSelectMenu::acceptInput() { StringMap fields; if (m_accepted) - fields[m_formname + "_accepted"] = wide_to_narrow(m_fileOpenDialog->getFileName()); + fields[m_formname + "_accepted"] = wide_to_utf8(m_fileOpenDialog->getFileName()); else fields[m_formname + "_canceled"] = m_formname; diff --git a/src/guiPasswordChange.cpp b/src/guiPasswordChange.cpp index 1c1a1f06e..e2f9994be 100644 --- a/src/guiPasswordChange.cpp +++ b/src/guiPasswordChange.cpp @@ -203,8 +203,8 @@ bool GUIPasswordChange::acceptInput() e->setVisible(true); return false; } - m_client->sendChangePassword(wide_to_narrow(oldpass), - wide_to_narrow(newpass)); + m_client->sendChangePassword(wide_to_utf8(oldpass), + wide_to_utf8(newpass)); return true; } diff --git a/src/guiTable.cpp b/src/guiTable.cpp index e915770a4..ed5b0d87b 100644 --- a/src/guiTable.cpp +++ b/src/guiTable.cpp @@ -929,7 +929,7 @@ s32 GUITable::allocString(const std::string &text) std::map::iterator it = m_alloc_strings.find(text); if (it == m_alloc_strings.end()) { s32 id = m_strings.size(); - std::wstring wtext = narrow_to_wide(text); + std::wstring wtext = utf8_to_wide(text); m_strings.push_back(core::stringw(wtext.c_str())); m_alloc_strings.insert(std::make_pair(text, id)); return id; diff --git a/src/hud.cpp b/src/hud.cpp index 02b69a12c..dbc4a01a3 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -275,7 +275,7 @@ void Hud::drawLuaElements(v3s16 camera_offset) { (e->number >> 8) & 0xFF, (e->number >> 0) & 0xFF); core::rect size(0, 0, e->scale.X, text_height * e->scale.Y); - std::wstring text = narrow_to_wide(e->text); + std::wstring text = utf8_to_wide(e->text); core::dimension2d textsize = font->getDimension(text.c_str()); v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2), (e->align.Y - 1.0) * (textsize.Height / 2)); @@ -310,11 +310,11 @@ void Hud::drawLuaElements(v3s16 camera_offset) { (e->number >> 8) & 0xFF, (e->number >> 0) & 0xFF); core::rect size(0, 0, 200, 2 * text_height); - std::wstring text = narrow_to_wide(e->name); + std::wstring text = utf8_to_wide(e->name); font->draw(text.c_str(), size + pos, color); std::ostringstream os; - os<text; - text = narrow_to_wide(os.str()); + os << distance << e->text; + text = utf8_to_wide(os.str()); pos.Y += text_height; font->draw(text.c_str(), size + pos, color); break; } @@ -552,7 +552,7 @@ void drawItemStack(video::IVideoDriver *driver, { // Get the item count as a string std::string text = itos(item.count); - v2u32 dim = font->getDimension(narrow_to_wide(text).c_str()); + v2u32 dim = font->getDimension(utf8_to_wide(text).c_str()); v2s32 sdim(dim.X,dim.Y); core::rect rect2( diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 1ec6a2a1a..4cebb2184 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -228,7 +228,7 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) if (pkt->getSize() >= 2) { std::wstring wide_reason; *pkt >> wide_reason; - m_access_denied_reason = wide_to_narrow(wide_reason); + m_access_denied_reason = wide_to_utf8(wide_reason); } } } diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 0a6ef4fa8..92dfe1020 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -356,7 +356,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) DenyAccess_Legacy(pkt->getPeerId(), std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(g_version_string) + L"." + + utf8_to_wide(g_version_string) + L"." ); return; } @@ -408,15 +408,15 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) DenyAccess_Legacy(pkt->getPeerId(), std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(g_version_string) + L",\n" + + utf8_to_wide(g_version_string) + L",\n" + L"server's PROTOCOL_VERSION is " - + narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN)) + + utf8_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN)) + L"..." - + narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MAX)) + + utf8_to_wide(itos(SERVER_PROTOCOL_VERSION_MAX)) + L", client's PROTOCOL_VERSION is " - + narrow_to_wide(itos(min_net_proto_version)) + + utf8_to_wide(itos(min_net_proto_version)) + L"..." - + narrow_to_wide(itos(max_net_proto_version)) + + utf8_to_wide(itos(max_net_proto_version)) ); return; } @@ -428,13 +428,13 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) DenyAccess_Legacy(pkt->getPeerId(), std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(g_version_string) + L",\n" + + utf8_to_wide(g_version_string) + L",\n" + L"server's PROTOCOL_VERSION (strict) is " - + narrow_to_wide(itos(LATEST_PROTOCOL_VERSION)) + + utf8_to_wide(itos(LATEST_PROTOCOL_VERSION)) + L", client's PROTOCOL_VERSION is " - + narrow_to_wide(itos(min_net_proto_version)) + + utf8_to_wide(itos(min_net_proto_version)) + L"..." - + narrow_to_wide(itos(max_net_proto_version)) + + utf8_to_wide(itos(max_net_proto_version)) ); return; } @@ -487,7 +487,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) << "tried to connect from " << addr_s << " " << "but it was disallowed for the following reason: " << reason << std::endl; - DenyAccess_Legacy(pkt->getPeerId(), narrow_to_wide(reason.c_str())); + DenyAccess_Legacy(pkt->getPeerId(), utf8_to_wide(reason.c_str())); return; } } diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 111eba518..d209582e9 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -1057,7 +1057,7 @@ int ModApiMainMenu::l_get_video_modes(lua_State *L) int ModApiMainMenu::l_gettext(lua_State *L) { std::wstring wtext = wstrgettext((std::string) luaL_checkstring(L, 1)); - lua_pushstring(L, wide_to_narrow(wtext).c_str()); + lua_pushstring(L, wide_to_utf8(wtext).c_str()); return 1; } diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 0d8926317..558cc0885 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -307,7 +307,7 @@ int ModApiServer::l_kick_player(lua_State *L) lua_pushboolean(L, false); // No such player return 1; } - getServer(L)->DenyAccess_Legacy(player->peer_id, narrow_to_wide(message)); + getServer(L)->DenyAccess_Legacy(player->peer_id, utf8_to_wide(message)); lua_pushboolean(L, true); return 1; } diff --git a/src/server.cpp b/src/server.cpp index e9aee47b2..19aaa3e7a 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1183,7 +1183,7 @@ void Server::ProcessData(NetworkPacket *pkt) << ban_name << std::endl; // This actually doesn't seem to transfer to the client DenyAccess_Legacy(peer_id, L"Your ip is banned. Banned name was " - + narrow_to_wide(ban_name)); + + utf8_to_wide(ban_name)); return; } } diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index 857b9f0a5..7df4106e8 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -102,7 +102,7 @@ void TestSerialization::testSerializeWideString() UASSERT(serializeWideString(L"") == mkstr("\0\0")); // Test basic string - UASSERT(serializeWideString(narrow_to_wide("Hello world!")) == + UASSERT(serializeWideString(utf8_to_wide("Hello world!")) == mkstr("\0\14\0H\0e\0l\0l\0o\0 \0w\0o\0r\0l\0d\0!")); // Test character range diff --git a/src/util/string.cpp b/src/util/string.cpp index 187d2a078..60ccc9300 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -168,6 +168,16 @@ std::string wide_to_utf8(const std::wstring &input) #endif // _WIN32 +wchar_t *utf8_to_wide_c(const char *str) +{ + std::wstring ret = utf8_to_wide(std::string(str)).c_str(); + size_t len = ret.length(); + wchar_t *ret_c = new wchar_t[len + 1]; + memset(ret_c, 0, (len + 1) * sizeof(wchar_t)); + memcpy(ret_c, ret.c_str(), len * sizeof(wchar_t)); + return ret_c; +} + // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str) diff --git a/src/util/string.h b/src/util/string.h index 6980060e4..793baad0e 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -47,6 +47,8 @@ struct FlagDesc { std::wstring utf8_to_wide(const std::string &input); std::string wide_to_utf8(const std::wstring &input); +wchar_t *utf8_to_wide_c(const char *str); + // NEVER use those two functions unless you have a VERY GOOD reason to // they just convert between wide and multibyte encoding // multibyte encoding depends on current locale, this is no good, especially on Windows From 39439cbd3dd4acce0ff897e3e277736251dde2a4 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Wed, 8 Jul 2015 11:20:07 +0200 Subject: [PATCH 183/670] Add new leaves style - simple (glasslike drawtype) --- builtin/mainmenu/tab_settings.lua | 46 ++++++++++++++++++++++++++----- minetest.conf.example | 7 +++-- src/defaultsettings.cpp | 2 +- src/nodedef.cpp | 12 ++++++-- 4 files changed, 55 insertions(+), 12 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index 881a63498..169f60a67 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -17,6 +17,17 @@ -------------------------------------------------------------------------------- +local leaves_style_labels = { + fgettext("Opaque Leaves"), + fgettext("Simple Leaves"), + fgettext("Fancy Leaves") +} + +local leaves_style = { + {leaves_style_labels[1]..","..leaves_style_labels[2]..","..leaves_style_labels[3]}, + {"opaque", "simple", "fancy"}, +} + local dd_filter_labels = { fgettext("No Filter"), fgettext("Bilinear Filter"), @@ -39,6 +50,16 @@ local mipmap = { {"", "mip_map", "anisotropic_filter"}, } +local function getLeavesStyleSettingIndex() + local style = core.setting_get("leaves_style") + if (style == leaves_style[2][3]) then + return 3 + elseif (style == leaves_style[2][2]) then + return 2 + end + return 1 +end + local function getFilterSettingIndex() if (core.setting_get(filters[2][3]) == "true") then return 3 @@ -177,21 +198,21 @@ local function formspec(tabview, name, tabdata) end local tab_string = - "box[0,0;3.5,3.9;#999999]" .. + "box[0,0;3.5,4.0;#999999]" .. "checkbox[0.25,0;cb_smooth_lighting;".. fgettext("Smooth Lighting") .. ";".. dump(core.setting_getbool("smooth_lighting")) .. "]".. "checkbox[0.25,0.5;cb_particles;".. fgettext("Enable Particles") .. ";" .. dump(core.setting_getbool("enable_particles")) .. "]".. "checkbox[0.25,1;cb_3d_clouds;".. fgettext("3D Clouds") .. ";" .. dump(core.setting_getbool("enable_3d_clouds")) .. "]".. - "checkbox[0.25,1.5;cb_fancy_trees;".. fgettext("Fancy Trees") .. ";" - .. dump(core.setting_getbool("new_style_leaves")) .. "]".. - "checkbox[0.25,2.0;cb_opaque_water;".. fgettext("Opaque Water") .. ";" + "checkbox[0.25,1.5;cb_opaque_water;".. fgettext("Opaque Water") .. ";" .. dump(core.setting_getbool("opaque_water")) .. "]".. - "checkbox[0.25,2.5;cb_connected_glass;".. fgettext("Connected Glass") .. ";" + "checkbox[0.25,2.0;cb_connected_glass;".. fgettext("Connected Glass") .. ";" .. dump(core.setting_getbool("connected_glass")) .. "]".. - "checkbox[0.25,3.0;cb_node_highlighting;".. fgettext("Node Highlighting") .. ";" + "checkbox[0.25,2.5;cb_node_highlighting;".. fgettext("Node Highlighting") .. ";" .. dump(core.setting_getbool("enable_node_highlighting")) .. "]".. + "dropdown[0.25,3.2;3.3;dd_leaves_style;" .. leaves_style[1][1] .. ";" + .. getLeavesStyleSettingIndex() .. "]" .. "box[3.75,0;3.75,3.45;#999999]" .. "label[3.85,0.1;".. fgettext("Texturing:") .. "]".. "dropdown[3.85,0.55;3.85;dd_filters;" .. filters[1][1] .. ";" @@ -353,7 +374,18 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"]) ddhandled = true end - + if fields["dd_leaves_style"] == leaves_style_labels[3] then + core.setting_set("leaves_style", leaves_style[2][3]) + ddhandled = true + end + if fields["dd_leaves_style"] == leaves_style_labels[2] then + core.setting_set("leaves_style", leaves_style[2][2]) + ddhandled = true + end + if fields["dd_leaves_style"] == leaves_style_labels[1] then + core.setting_set("leaves_style", leaves_style[2][1]) + ddhandled = true + end if fields["dd_video_driver"] then core.setting_set("video_driver", video_driver_fname_to_name(fields["dd_video_driver"])) diff --git a/minetest.conf.example b/minetest.conf.example index 6138b6d43..aef82c3ad 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -108,8 +108,11 @@ #liquid_queue_purge_time = 0 # Liquid update interval in seconds #liquid_update = 1.0 -# Enable transparent leaf textures, disable for speed -#new_style_leaves = true +# Leaves style: +# fancy - all faces visible +# simple - only outer faces, if defined special_tiles are used +# opaque - disable transparency +#leaves_style = fancy # Connects glass if supported by node #connected_glass = false # Enable smooth lighting with simple ambient occlusion. diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 9015c28a4..da5dcae94 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -107,7 +107,7 @@ void set_default_settings(Settings *settings) settings->setDefault("fov", "72"); settings->setDefault("view_bobbing", "true"); settings->setDefault("new_style_water", "false"); - settings->setDefault("new_style_leaves", "true"); + settings->setDefault("leaves_style", "fancy"); settings->setDefault("connected_glass", "false"); settings->setDefault("smooth_lighting", "true"); settings->setDefault("display_gamma", "1.8"); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index e392f477a..ccafd4598 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -780,7 +780,6 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, scene::IMeshManipulator* meshmanip = smgr->getMeshManipulator(); bool new_style_water = g_settings->getBool("new_style_water"); - bool new_style_leaves = g_settings->getBool("new_style_leaves"); bool connected_glass = g_settings->getBool("connected_glass"); bool opaque_water = g_settings->getBool("opaque_water"); bool enable_shaders = g_settings->getBool("enable_shaders"); @@ -788,6 +787,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, bool enable_parallax_occlusion = g_settings->getBool("enable_parallax_occlusion"); bool enable_mesh_cache = g_settings->getBool("enable_mesh_cache"); bool enable_minimap = g_settings->getBool("enable_minimap"); + std::string leaves_style = g_settings->get("leaves_style"); bool use_normal_texture = enable_shaders && (enable_bumpmapping || enable_parallax_occlusion); @@ -860,10 +860,18 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, f->visual_solidness = 1; break; case NDT_ALLFACES_OPTIONAL: - if (new_style_leaves) { + if (leaves_style == "fancy") { f->drawtype = NDT_ALLFACES; f->solidness = 0; f->visual_solidness = 1; + } else if (leaves_style == "simple") { + for (u32 j = 0; j < 6; j++) { + if (f->tiledef_special[j].name != "") + tiledef[j].name = f->tiledef_special[j].name; + } + f->drawtype = NDT_GLASSLIKE; + f->solidness = 0; + f->visual_solidness = 1; } else { f->drawtype = NDT_NORMAL; f->solidness = 2; From b51738177e2dae60153a825e200ea9cdeb1cec99 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 8 Jul 2015 20:01:29 +0100 Subject: [PATCH 184/670] Biome API decorations: 'spawnby' searches a 3D neighbourhood The neighbours checked are the 8 nodes horizontally surrounding the decoration base and the 8 nodes horizontally surrounding the ground node below the decoration --- doc/lua_api.txt | 4 +++- src/mg_decoration.cpp | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 95b514a92..49292d2b4 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3331,7 +3331,9 @@ Definition tables -- ^ Number of nodes the decoration can be at maximum. -- ^ If absent, the parameter 'height' is used as a constant. spawn_by = "default:water", - -- ^ Node that the decoration only spawns next to, in a 1-node square radius. + -- ^ Node that the decoration only spawns next to. + -- ^ The neighbours checked are the 8 nodes horizontally surrounding the lowest node of the + -- ^ decoration, and the 8 nodes horizontally surrounding the ground node below the decoration. num_spawn_by = 1, -- ^ Number of spawn_by nodes that must be surrounding the decoration position to occur. -- ^ If absent or -1, decorations occur next to any nodes. diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index f133788de..0d6693929 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -246,7 +246,7 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p) return true; int nneighs = 0; - v3s16 dirs[8] = { + v3s16 dirs[16] = { v3s16( 0, 0, 1), v3s16( 0, 0, -1), v3s16( 1, 0, 0), @@ -254,7 +254,16 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p) v3s16( 1, 0, 1), v3s16(-1, 0, 1), v3s16(-1, 0, -1), - v3s16( 1, 0, -1) + v3s16( 1, 0, -1), + + v3s16( 0, 1, 1), + v3s16( 0, 1, -1), + v3s16( 1, 1, 0), + v3s16(-1, 1, 0), + v3s16( 1, 1, 1), + v3s16(-1, 1, 1), + v3s16(-1, 1, -1), + v3s16( 1, 1, -1) }; // Check a Moore neighborhood if there are enough spawnby nodes From 13e100e1d8c5c47848645e2ef98f21e2c09297db Mon Sep 17 00:00:00 2001 From: Diego Martinez Date: Wed, 8 Jul 2015 16:18:11 -0300 Subject: [PATCH 185/670] Windows: Fix some warnings. --- src/filesys.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/filesys.cpp b/src/filesys.cpp index 9aeecf427..4cefdb807 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -142,7 +142,7 @@ bool RecursiveDelete(const std::string &path) infostream<<"RecursiveDelete: Deleting content of directory " < content = GetDirListing(path); - for(int i=0; i Date: Thu, 9 Jul 2015 08:07:59 +0200 Subject: [PATCH 186/670] Update clouds enable_3d_clouds when setting changed --- src/clouds.cpp | 25 +++++++++++++++++++------ src/clouds.h | 3 +++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/clouds.cpp b/src/clouds.cpp index a42e588aa..e213d118f 100644 --- a/src/clouds.cpp +++ b/src/clouds.cpp @@ -30,6 +30,11 @@ class Clouds; Clouds *g_menuclouds = NULL; irr::scene::ISceneManager *g_menucloudsmgr = NULL; +static void cloud_3d_setting_changed(const std::string settingname, void *data) +{ + ((Clouds *)data)->readSettings(); +} + Clouds::Clouds( scene::ISceneNode* parent, scene::ISceneManager* mgr, @@ -52,12 +57,10 @@ Clouds::Clouds( //m_material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - m_cloud_y = BS * (cloudheight ? cloudheight : - g_settings->getS16("cloud_height")); - - m_cloud_radius_i = g_settings->getU16("cloud_radius"); - - m_enable_3d = g_settings->getBool("enable_3d_clouds"); + m_passed_cloud_y = cloudheight; + readSettings(); + g_settings->registerChangedCallback("enable_3d_clouds", + &cloud_3d_setting_changed, this); m_box = core::aabbox3d(-BS*1000000,m_cloud_y-BS,-BS*1000000, BS*1000000,m_cloud_y+BS,BS*1000000); @@ -66,6 +69,8 @@ Clouds::Clouds( Clouds::~Clouds() { + g_settings->deregisterChangedCallback("enable_3d_clouds", + &cloud_3d_setting_changed, this); } void Clouds::OnRegisterSceneNode() @@ -351,3 +356,11 @@ void Clouds::update(v2f camera_p, video::SColorf color) //dstream<<"m_brightness="<getS16("cloud_height")); + m_cloud_radius_i = g_settings->getU16("cloud_radius"); + m_enable_3d = g_settings->getBool("enable_3d_clouds"); +} + diff --git a/src/clouds.h b/src/clouds.h index 348220fb1..195f48de0 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -83,9 +83,12 @@ public: BS * 1000000, m_cloud_y + BS - BS * camera_offset.Y, BS * 1000000); } + void readSettings(); + private: video::SMaterial m_material; core::aabbox3d m_box; + s16 m_passed_cloud_y; float m_cloud_y; u16 m_cloud_radius_i; bool m_enable_3d; From cb8978fb1d6576ec82526adcc8deea2b745c5dca Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 9 Jul 2015 08:23:08 +0200 Subject: [PATCH 187/670] Settings: pass name to callbacks by reference Spare some copies. --- src/clouds.cpp | 2 +- src/fontengine.cpp | 3 ++- src/game.cpp | 2 +- src/settings.h | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/clouds.cpp b/src/clouds.cpp index e213d118f..29210e2b4 100644 --- a/src/clouds.cpp +++ b/src/clouds.cpp @@ -30,7 +30,7 @@ class Clouds; Clouds *g_menuclouds = NULL; irr::scene::ISceneManager *g_menucloudsmgr = NULL; -static void cloud_3d_setting_changed(const std::string settingname, void *data) +static void cloud_3d_setting_changed(const std::string &settingname, void *data) { ((Clouds *)data)->readSettings(); } diff --git a/src/fontengine.cpp b/src/fontengine.cpp index 14b65f593..f881701e0 100644 --- a/src/fontengine.cpp +++ b/src/fontengine.cpp @@ -35,7 +35,8 @@ with this program; if not, write to the Free Software Foundation, Inc., FontEngine* g_fontengine = NULL; /** callback to be used on change of font size setting */ -static void font_setting_changed(const std::string, void *userdata) { +static void font_setting_changed(const std::string &name, void *userdata) +{ g_fontengine->readSettings(); } diff --git a/src/game.cpp b/src/game.cpp index ef3cb9044..41bfa5e60 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -806,7 +806,7 @@ public: m_fogEnabled = g_settings->getBool("enable_fog"); } - static void SettingsCallback(const std::string name, void *userdata) + static void SettingsCallback(const std::string &name, void *userdata) { reinterpret_cast(userdata)->onSettingsChange(name); } diff --git a/src/settings.h b/src/settings.h index d43ad6a20..d41f134cd 100644 --- a/src/settings.h +++ b/src/settings.h @@ -36,7 +36,7 @@ extern Settings *g_settings; extern std::string g_settings_path; /** function type to register a changed callback */ -typedef void (*setting_changed_callback)(const std::string, void*); +typedef void (*setting_changed_callback)(const std::string &name, void *data); enum ValueType { VALUETYPE_STRING, From e6f0178e83b81befded22d3a0de8200739e2d7c3 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Fri, 10 Jul 2015 19:04:05 +0200 Subject: [PATCH 188/670] Little coding style fix on porting.h --- src/porting.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/porting.h b/src/porting.h index add3926ea..2a91fdd06 100644 --- a/src/porting.h +++ b/src/porting.h @@ -60,7 +60,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include //for uintptr_t -#if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE) + #if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif From 8eb272cea38325f963c521ecfa7b927a563f8509 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 8 Jul 2015 11:53:02 -0400 Subject: [PATCH 189/670] Misc. minor fixes --- src/client/inputhandler.h | 13 ++-- src/mapblock.cpp | 2 +- src/minimap.h | 6 +- src/noise.cpp | 2 +- src/util/thread.h | 140 ++++++++++++++++---------------------- 5 files changed, 68 insertions(+), 95 deletions(-) diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index 3da856f7b..a894e35aa 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -88,15 +88,14 @@ public: } else if (event.EventType == irr::EET_LOG_TEXT_EVENT) { static const enum LogMessageLevel irr_loglev_conv[] = { LMT_VERBOSE, // ELL_DEBUG - LMT_INFO, // ELL_INFORMATION - LMT_ACTION, // ELL_WARNING - LMT_ERROR, // ELL_ERROR - LMT_ERROR, // ELL_NONE + LMT_INFO, // ELL_INFORMATION + LMT_ACTION, // ELL_WARNING + LMT_ERROR, // ELL_ERROR + LMT_ERROR, // ELL_NONE }; - assert(event.LogEvent.Level < sizeof(irr_loglev_conv)); + assert(event.LogEvent.Level < ARRLEN(irr_loglev_conv)); log_printline(irr_loglev_conv[event.LogEvent.Level], - std::string("Irrlicht: ") - + (const char*) event.LogEvent.Text); + std::string("Irrlicht: ") + (const char *)event.LogEvent.Text); return true; } /* always return false in order to continue processing events */ diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 39cac0b60..1d2e1e250 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -57,7 +57,7 @@ static const char *modified_reason_strings[] = { "deactivateFarObjects: Static data moved in", "deactivateFarObjects: Static data moved out", "deactivateFarObjects: Static data changed considerably", - "finishBlockMake: expireDayNightDiff" + "finishBlockMake: expireDayNightDiff", "unknown", }; diff --git a/src/minimap.h b/src/minimap.h index edb491717..628be7489 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -105,11 +105,7 @@ public: MinimapData *data; protected: - const char *getName() - { - return "MinimapUpdateThread"; - } - + const char *getName() { return "MinimapUpdateThread"; } virtual void doUpdate(); private: diff --git a/src/noise.cpp b/src/noise.cpp index 826593474..5b08eb942 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -138,7 +138,7 @@ void PcgRandom::bytes(void *out, size_t len) *outb = r & 0xFF; outb++; bytes_left--; - r >>= 8; + r >>= CHAR_BIT; } } diff --git a/src/util/thread.h b/src/util/thread.h index faa5869ca..b3a5e68a2 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -28,13 +28,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" template -class MutexedVariable -{ +class MutexedVariable { public: MutexedVariable(T value): m_value(value) - { - } + {} T get() { @@ -47,13 +45,13 @@ public: JMutexAutoLock lock(m_mutex); m_value = value; } - + // You'll want to grab this in a SharedPtr - JMutexAutoLock * getLock() + JMutexAutoLock *getLock() { return new JMutexAutoLock(m_mutex); } - + // You pretty surely want to grab the lock when accessing this T m_value; @@ -65,8 +63,7 @@ private: A single worker thread - multiple client threads queue framework. */ template -class GetResult -{ +class GetResult { public: Key key; T item; @@ -74,34 +71,27 @@ public: }; template -class ResultQueue: public MutexedQueue< GetResult > -{ +class ResultQueue : public MutexedQueue > { }; template -class CallerInfo -{ +class CallerInfo { public: Caller caller; Data data; - ResultQueue< Key, T, Caller, Data>* dest; + ResultQueue *dest; }; template -class GetRequest -{ +class GetRequest { public: - GetRequest() - { - } - GetRequest(Key a_key) - { + GetRequest() {} + ~GetRequest() {} + + GetRequest(Key a_key) { key = a_key; } - ~GetRequest() - { - } - + Key key; std::list > callers; }; @@ -114,8 +104,7 @@ public: * @param CallerData data passed back to caller */ template -class RequestQueue -{ +class RequestQueue { public: bool empty() { @@ -123,40 +112,36 @@ public: } void add(Key key, Caller caller, CallerData callerdata, - ResultQueue *dest) + ResultQueue *dest) { + typename std::deque >::iterator i; + typename std::list >::iterator j; + { JMutexAutoLock lock(m_queue.getMutex()); /* If the caller is already on the list, only update CallerData */ - for(typename std::deque< GetRequest >::iterator - i = m_queue.getQueue().begin(); - i != m_queue.getQueue().end(); ++i) - { + for (i = m_queue.getQueue().begin(); i != m_queue.getQueue().end(); ++i) { GetRequest &request = *i; + if (request.key != key) + continue; - if(request.key == key) - { - for(typename std::list< CallerInfo >::iterator - i = request.callers.begin(); - i != request.callers.end(); ++i) - { - CallerInfo &ca = *i; - if(ca.caller == caller) - { - ca.data = callerdata; - return; - } + for (j = request.callers.begin(); j != request.callers.end(); ++j) { + CallerInfo &ca = *j; + if (ca.caller == caller) { + ca.data = callerdata; + return; } - CallerInfo ca; - ca.caller = caller; - ca.data = callerdata; - ca.dest = dest; - request.callers.push_back(ca); - return; } + + CallerInfo ca; + ca.caller = caller; + ca.data = callerdata; + ca.dest = dest; + request.callers.push_back(ca); + return; } } @@ -171,7 +156,7 @@ public: ca.data = callerdata; ca.dest = dest; request.callers.push_back(ca); - + m_queue.push_back(request); } @@ -185,13 +170,11 @@ public: return m_queue.pop_frontNoEx(); } - void pushResult(GetRequest req, - T res) { - - for(typename std::list< CallerInfo >::iterator + void pushResult(GetRequest req, T res) + { + for (typename std::list >::iterator i = req.callers.begin(); - i != req.callers.end(); ++i) - { + i != req.callers.end(); ++i) { CallerInfo &ca = *i; GetResult result; @@ -206,24 +189,13 @@ public: } private: - MutexedQueue< GetRequest > m_queue; + MutexedQueue > m_queue; }; -class UpdateThread : public JThread -{ -private: - JSemaphore m_update_sem; - -protected: - virtual void doUpdate() = 0; - virtual const char *getName() = 0; - +class UpdateThread : public JThread { public: - UpdateThread() - { - } - ~UpdateThread() - {} + UpdateThread() {} + virtual ~UpdateThread() {} void deferUpdate() { @@ -243,30 +215,36 @@ public: ThreadStarted(); const char *thread_name = getName(); - log_register_thread(thread_name); - - DSTACK(__FUNCTION_NAME); - - BEGIN_DEBUG_EXCEPTION_HANDLER - porting::setThreadName(thread_name); - while (!StopRequested()) { + DSTACK(__FUNCTION_NAME); + BEGIN_DEBUG_EXCEPTION_HANDLER + while (!StopRequested()) { m_update_sem.Wait(); // Empty the queue, just in case doUpdate() is expensive - while (m_update_sem.GetValue()) m_update_sem.Wait(); + while (m_update_sem.GetValue()) + m_update_sem.Wait(); - if (StopRequested()) break; + if (StopRequested()) + break; doUpdate(); } + END_DEBUG_EXCEPTION_HANDLER(errorstream) return NULL; } + +protected: + virtual void doUpdate() = 0; + virtual const char *getName() = 0; + +private: + JSemaphore m_update_sem; }; #endif From 1a1774a1051790ef85b1bd8b047ac45a3676b5d6 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 10 Jul 2015 15:58:32 -0400 Subject: [PATCH 190/670] Fix damage flash when damage disabled --- src/network/serverpackethandler.cpp | 10 ++++------ src/script/lua_api/l_object.cpp | 12 +++++------- src/server.cpp | 16 +++++++++++++++- src/server.h | 2 +- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 92dfe1020..5493dfec1 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1151,7 +1151,7 @@ void Server::handleCommand_Damage(NetworkPacket* pkt) << std::endl; playersao->setHP(playersao->getHP() - damage); - SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); + SendPlayerHPOrDie(playersao); } } @@ -1510,14 +1510,12 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) // If the object is a player and its HP changed if (src_original_hp != pointed_object->getHP() && pointed_object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - SendPlayerHPOrDie(((PlayerSAO*)pointed_object)->getPeerID(), - pointed_object->getHP() == 0); + SendPlayerHPOrDie((PlayerSAO *)pointed_object); } // If the puncher is a player and its HP changed - if (dst_origin_hp != playersao->getHP()) { - SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); - } + if (dst_origin_hp != playersao->getHP()) + SendPlayerHPOrDie(playersao); } } // action == 0 diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 4b1cc39fb..e407ef162 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -222,15 +222,13 @@ int ObjectRef::l_punch(lua_State *L) // If the punched is a player, and its HP changed if (src_original_hp != co->getHP() && co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), - co->getHP() == 0); + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co); } // If the puncher is a player, and its HP changed if (dst_origin_hp != puncher->getHP() && puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)puncher)->getPeerID(), - puncher->getHP() == 0); + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)puncher); } return 0; } @@ -265,9 +263,9 @@ int ObjectRef::l_set_hp(lua_State *L) <<" hp="<setHP(hp); - if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), co->getHP() == 0); - } + if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co); + // Return return 0; } diff --git a/src/server.cpp b/src/server.cpp index 19aaa3e7a..9d70ad7b7 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1108,7 +1108,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) SendInventory(playersao); // Send HP - SendPlayerHPOrDie(peer_id, playersao->getHP() == 0); + SendPlayerHPOrDie(playersao); // Send Breath SendPlayerBreath(peer_id); @@ -1487,6 +1487,20 @@ void Server::SendMovement(u16 peer_id) Send(&pkt); } +void Server::SendPlayerHPOrDie(PlayerSAO *playersao) +{ + if (!g_settings->getBool("enable_damage")) + return; + + u16 peer_id = playersao->getPeerID(); + bool is_alive = playersao->getHP() > 0; + + if (is_alive) + SendPlayerHP(peer_id); + else + DiePlayer(peer_id); +} + void Server::SendHP(u16 peer_id, u8 hp) { DSTACK(__FUNCTION_NAME); diff --git a/src/server.h b/src/server.h index 877109a77..fbca05f26 100644 --- a/src/server.h +++ b/src/server.h @@ -374,7 +374,7 @@ public: u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch, std::string* vers_string); - void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); } + void SendPlayerHPOrDie(PlayerSAO *player); void SendPlayerBreath(u16 peer_id); void SendInventory(PlayerSAO* playerSAO); void SendMovePlayer(u16 peer_id); From c3dead719ae737a2e61f7e0e81cfc1b614790edd Mon Sep 17 00:00:00 2001 From: jp Date: Sat, 4 Jul 2015 17:53:00 +0200 Subject: [PATCH 191/670] Fix remnant bugs on mainmenu - Stop attempting to start a world when no world's created/selected in server tab - Better world's indexes handling between subgames lists --- builtin/mainmenu/tab_server.lua | 9 ++++++--- builtin/mainmenu/tab_singleplayer.lua | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua index 62747c572..d08eecc21 100644 --- a/builtin/mainmenu/tab_server.lua +++ b/builtin/mainmenu/tab_server.lua @@ -113,12 +113,12 @@ local function main_button_handler(this, fields, name, tabdata) world_doubleclick or fields["key_enter"] then local selected = core.get_textlist_index("srv_worlds") - if selected ~= nil then + gamedata.selected_world = menudata.worldlist:get_raw_index(selected) + 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 = "" - gamedata.selected_world = menudata.worldlist:get_raw_index(selected) core.setting_set("port",gamedata.port) if fields["te_serveraddr"] ~= nil then @@ -133,8 +133,11 @@ local function main_button_handler(this, fields, name, tabdata) end core.start() - return true + else + gamedata.errormessage = + fgettext("No world created or selected!") end + return true end if fields["world_create"] ~= nil then diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index 4ae4dde35..a40918af9 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -40,10 +40,13 @@ local function singleplayer_refresh_gamebar() menudata.worldlist:set_filtercriteria(gamemgr.games[j].id) local index = filterlist.get_current_index(menudata.worldlist, tonumber(core.setting_get("mainmenu_last_selected_world"))) - local selected = core.get_textlist_index("sp_worlds") if not index or index < 1 then - index = math.min(core.get_textlist_index("sp_worlds"), - #menudata.worldlist:get_list()) + local selected = core.get_textlist_index("sp_worlds") + if selected ~= nil and selected < #menudata.worldlist:get_list() then + index = selected + else + index = #menudata.worldlist:get_list() + end end menu_worldmt_legacy(index) return true From 66ea356e688879e898dc81a435d76294ac2a1098 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 13 Jul 2015 01:17:54 +0100 Subject: [PATCH 192/670] Mgv6/treegen: (Re)Add fallback nodes for compatibility with subgames --- src/mapgen_v6.cpp | 8 ++++++++ src/treegen.cpp | 27 ++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 732ec0955..86e2f89ae 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -108,6 +108,14 @@ MapgenV6::MapgenV6(int mapgenid, MapgenParams *params, EmergeManager *emerge) c_mossycobble = c_cobble; if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; + if (c_dirt_with_snow == CONTENT_IGNORE) + c_dirt_with_snow = c_dirt_with_grass; + if (c_snow == CONTENT_IGNORE) + c_snow = CONTENT_AIR; + if (c_snowblock == CONTENT_IGNORE) + c_snowblock = c_dirt_with_grass; + if (c_ice == CONTENT_IGNORE) + c_ice = c_water_source; } diff --git a/src/treegen.cpp b/src/treegen.cpp index a85d88815..39cb1ca06 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -656,8 +656,15 @@ void make_jungletree(MMVManip &vmanip, v3s16 p0, INodeDefManager *ndef, int seed and in games that have saplings; both are deprecated but not replaced yet */ - MapNode treenode(ndef->getId("mapgen_jungletree")); - MapNode leavesnode(ndef->getId("mapgen_jungleleaves")); + content_t c_tree = ndef->getId("mapgen_jungletree"); + content_t c_leaves = ndef->getId("mapgen_jungleleaves"); + if (c_tree == CONTENT_IGNORE) + c_tree = ndef->getId("mapgen_tree"); + if (c_leaves == CONTENT_IGNORE) + c_leaves = ndef->getId("mapgen_leaves"); + + MapNode treenode(c_tree); + MapNode leavesnode(c_leaves); PseudoRandom pr(seed); for (s16 x= -1; x <= 1; x++) @@ -748,9 +755,19 @@ void make_pine_tree(MMVManip &vmanip, v3s16 p0, INodeDefManager *ndef, int seed) and in games that have saplings; both are deprecated but not replaced yet */ - MapNode treenode(ndef->getId("mapgen_pinetree")); - MapNode leavesnode(ndef->getId("mapgen_pine_needles")); - MapNode snownode(ndef->getId("mapgen_snow")); + content_t c_tree = ndef->getId("mapgen_pinetree"); + content_t c_leaves = ndef->getId("mapgen_pine_needles"); + content_t c_snow = ndef->getId("mapgen_snow"); + if (c_tree == CONTENT_IGNORE) + c_tree = ndef->getId("mapgen_tree"); + if (c_leaves == CONTENT_IGNORE) + c_leaves = ndef->getId("mapgen_leaves"); + if (c_snow == CONTENT_IGNORE) + c_snow = CONTENT_AIR; + + MapNode treenode(c_tree); + MapNode leavesnode(c_leaves); + MapNode snownode(c_snow); PseudoRandom pr(seed); s16 trunk_h = pr.range(9, 13); From b411b6f36f98d5b317d0dbfe09df045e224b1624 Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 13 Jul 2015 20:25:22 +0100 Subject: [PATCH 193/670] Minimal: Remove recently added unnecessary nodes Fix 'is ground content' for some nodes --- games/minimal/mods/default/init.lua | 112 +++--------------- games/minimal/mods/default/mapgen.lua | 9 +- .../mods/default/textures/default_ice.png | Bin 254 -> 0 bytes .../default/textures/default_jungleleaves.png | Bin 184 -> 0 bytes .../default/textures/default_jungletree.png | Bin 210 -> 0 bytes .../textures/default_jungletree_top.png | Bin 205 -> 0 bytes .../default/textures/default_pine_needles.png | Bin 203 -> 0 bytes .../default/textures/default_pinetree.png | Bin 280 -> 0 bytes .../default/textures/default_pinetree_top.png | Bin 574 -> 0 bytes .../mods/default/textures/default_snow.png | Bin 164 -> 0 bytes .../default/textures/default_snow_side.png | Bin 360 -> 0 bytes .../default/textures/default_snowball.png | Bin 183 -> 0 bytes 12 files changed, 15 insertions(+), 106 deletions(-) delete mode 100644 games/minimal/mods/default/textures/default_ice.png delete mode 100644 games/minimal/mods/default/textures/default_jungleleaves.png delete mode 100644 games/minimal/mods/default/textures/default_jungletree.png delete mode 100644 games/minimal/mods/default/textures/default_jungletree_top.png delete mode 100644 games/minimal/mods/default/textures/default_pine_needles.png delete mode 100644 games/minimal/mods/default/textures/default_pinetree.png delete mode 100644 games/minimal/mods/default/textures/default_pinetree_top.png delete mode 100644 games/minimal/mods/default/textures/default_snow.png delete mode 100644 games/minimal/mods/default/textures/default_snow_side.png delete mode 100644 games/minimal/mods/default/textures/default_snowball.png diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index 1adc8f457..dd3d7bbf6 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -474,12 +474,6 @@ minetest.register_craft({ recipe = "default:tree", }) -minetest.register_craft({ - type = "cooking", - output = "default:coal_lump", - recipe = "default:jungletree", -}) - minetest.register_craft({ type = "cooking", output = "default:stone", @@ -508,12 +502,6 @@ minetest.register_craft({ burntime = 30, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:jungletree", - burntime = 30, -}) - minetest.register_craft({ type = "fuel", recipe = "default:junglegrass", @@ -796,6 +784,7 @@ minetest.register_node("default:clay", { 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(), @@ -804,13 +793,7 @@ minetest.register_node("default:brick", { minetest.register_node("default:tree", { description = "Tree", tiles ={"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:jungletree", { - description = "Jungle Tree", - tiles ={"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, + is_ground_content = false, groups = {snappy=2,choppy=2,oddly_breakable_by_hand=1}, sounds = default.node_sound_wood_defaults(), }) @@ -834,6 +817,7 @@ minetest.register_node("default:leaves", { visual_scale = 1.3, tiles ={"default_leaves.png"}, paramtype = "light", + is_ground_content = false, groups = {snappy=3}, drop = { max_items = 1, @@ -853,17 +837,6 @@ minetest.register_node("default:leaves", { sounds = default.node_sound_leaves_defaults(), }) -minetest.register_node("default:jungleleaves", { - description = "Jungle Leaves", - drawtype = "allfaces_optional", - waving = 1, - visual_scale = 1.3, - tiles = {"default_jungleleaves.png"}, - paramtype = "light", - groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, - 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"}, @@ -886,6 +859,7 @@ minetest.register_node("default:papyrus", { 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(), }) @@ -895,6 +869,7 @@ minetest.register_node("default: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(), @@ -907,6 +882,7 @@ minetest.register_node("default:fence_wood", { 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}, @@ -922,6 +898,7 @@ minetest.register_node("default:rail", { inventory_image = "default_rail.png", wield_image = "default_rail.png", paramtype = "light", + is_ground_content = false, walkable = false, selection_box = { type = "fixed", @@ -938,6 +915,7 @@ minetest.register_node("default:ladder", { wield_image = "default_ladder.png", paramtype = "light", paramtype2 = "wallmounted", + is_ground_content = false, walkable = false, climbable = true, selection_box = { @@ -954,6 +932,7 @@ minetest.register_node("default:ladder", { 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(), }) @@ -968,6 +947,7 @@ minetest.register_node("default:mese", { minetest.register_node("default:cloud", { description = "Cloud", tiles ={"default_cloud.png"}, + is_ground_content = false, sounds = default.node_sound_defaults(), }) @@ -1452,6 +1432,7 @@ minetest.register_abm({ minetest.register_node("default:cobble", { description = "Cobble", tiles ={"default_cobble.png"}, + is_ground_content = false, groups = {cracky=3}, sounds = default.node_sound_stone_defaults(), }) @@ -1459,6 +1440,7 @@ minetest.register_node("default:cobble", { 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(), }) @@ -1466,6 +1448,7 @@ minetest.register_node("default:mossycobble", { 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(), }) @@ -1511,6 +1494,7 @@ minetest.register_node("default:apple", { 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}, @@ -1518,74 +1502,6 @@ minetest.register_node("default:apple", { sounds = default.node_sound_defaults(), }) -minetest.register_node("default:dirt_with_snow", { - description = "Dirt with Snow", - tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"}, - groups = {crumbly=3,soil=1}, - drop = 'default:dirt', - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("default:snow", { - description = "Snow", - tiles = {"default_snow.png"}, - inventory_image = "default_snowball.png", - wield_image = "default_snowball.png", - paramtype = "light", - buildable_to = true, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5}, - }, - }, - groups = {crumbly=3,falling_node=1}, - sounds = default.node_sound_dirt_defaults(), - - on_construct = function(pos) - pos.y = pos.y - 1 - if minetest.get_node(pos).name == "default:dirt_with_grass" then - minetest.set_node(pos, {name="default:dirt_with_snow"}) - end - end, -}) - -minetest.register_node("default:snowblock", { - description = "Snow Block", - tiles = {"default_snow.png"}, - groups = {crumbly=3}, - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("default:ice", { - description = "Ice", - tiles = {"default_ice.png"}, - is_ground_content = false, - paramtype = "light", - groups = {cracky=3}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("default:pinetree", { - description = "Pine Tree", - tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"}, - paramtype2 = "facedir", - groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("default:pine_needles",{ - description = "Pine Needles", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"default_pine_needles.png"}, - waving = 1, - paramtype = "light", - groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, - sounds = default.node_sound_leaves_defaults(), -}) - -- -- Grow tree function -- diff --git a/games/minimal/mods/default/mapgen.lua b/games/minimal/mods/default/mapgen.lua index 7b0c7f467..2082d5983 100644 --- a/games/minimal/mods/default/mapgen.lua +++ b/games/minimal/mods/default/mapgen.lua @@ -10,19 +10,11 @@ minetest.register_alias("mapgen_sand", "default:sand") minetest.register_alias("mapgen_water_source", "default:water_source") minetest.register_alias("mapgen_lava_source", "default:lava_source") minetest.register_alias("mapgen_gravel", "default:gravel") -minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow") -minetest.register_alias("mapgen_snowblock", "default:snowblock") -minetest.register_alias("mapgen_snow", "default:snow") -minetest.register_alias("mapgen_ice", "default:ice") 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_jungletree", "default:jungletree") -minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") minetest.register_alias("mapgen_junglegrass", "default:junglegrass") -minetest.register_alias("mapgen_pinetree", "default:pinetree") -minetest.register_alias("mapgen_pine_needles", "default:pine_needles") minetest.register_alias("mapgen_cobble", "default:cobble") minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") @@ -106,6 +98,7 @@ minetest.register_ore({ minetest.clear_registered_biomes() +minetest.clear_registered_decorations() minetest.register_biome({ name = "default:grassland", diff --git a/games/minimal/mods/default/textures/default_ice.png b/games/minimal/mods/default/textures/default_ice.png deleted file mode 100644 index 2046eac6faf03dc0cf49e5af5919b3b6cc38c47e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmV4DMB6 znH*{m``t{)7A{wfeS{mR(d#pd3R6>}8$B6_T_j^=u>JBLZMuTylhj5VSoM4Rx*P+d z7nxv>|)d8WH9MfLGw!qWWy4Yf8$RT4~nv0U;qFB07*qoM6N<$ Eg5#fXJpcdz diff --git a/games/minimal/mods/default/textures/default_jungleleaves.png b/games/minimal/mods/default/textures/default_jungleleaves.png deleted file mode 100644 index 870b4bb27e9debc742a57ecda1fa9857cbc56499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0WbkkXuAfK+!q)500lxjSe4~&GV0EuRF^fi91s7HW+R&U7MJakP>s~fWr9+291g9c7EV( eoB6Cqo54Xs(tpMM)1p9I7(8A5T-G@yGywptnLhFW diff --git a/games/minimal/mods/default/textures/default_jungletree.png b/games/minimal/mods/default/textures/default_jungletree.png deleted file mode 100644 index a1fd36a51069c1a0a746d29a89fc36f8df6ab269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!M1W6-E0ES#5!BZZkMz(eNw#Y) zaN9aN>FmDBzcop-fpVpuE{-7;w@lAF@*OeYaSF6yEc!2fe*3MomdKI;Vst E0Dv${2LJ#7 diff --git a/games/minimal/mods/default/textures/default_jungletree_top.png b/games/minimal/mods/default/textures/default_jungletree_top.png deleted file mode 100644 index a13fdae4abe96a586ad8ad3e3d69ddf4395c28c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Xn;?ME0ES#5!BZZFG;p*E^ymA zJL&Ac$~|{;tbr26o-U3d6}L?L8Tl9#IS#j3{QLjpwTgSwu3fHE&c}E@UARu?Y?Huu znU{+gW6Qqx?2tfHzanLk0)I6*WJfxBNVp zEaiBqhi%=eGSd?IGdsP{1^m2f!1;56h5YFcLL2sU*E&DXpKemHD(t7ri)y=;<1!by w&OBk~Fun4w{?J@ycIoSCPplZsE8@N}l|1G?_26RB9-yrZp00i_>zopr04>W$9{>OV diff --git a/games/minimal/mods/default/textures/default_pinetree.png b/games/minimal/mods/default/textures/default_pinetree.png deleted file mode 100644 index 4a5328ff385ebe307f299a8aeb7866da0713aa8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VtB;eVuZxw3t*Mi_UWliI ztEEA7pnIr~W1yR@qp41WpG$J2UqYx?Ot7cDv6h#Ed4Pv)?nWj%p!NlxE{-7*mt{|T zim@niuv}!B=@Rh1{+3?#?|7DFN}F;Pu8(Xn-B6lC~-{7CUZ0?hkzhXCjFmNxm`?5dh?T-ZyKQ|h`pEi5foD7>AhSILZ zHw)_)oIRTTT1djq!bLA)joJ>o4e3Uf*Qa_g)^2c)+!5o)YA?ZlJRs!75oTM(X`-If b9DgylSg_5@k7{TKx|PAx)z4*}Q$iB}eJx~| diff --git a/games/minimal/mods/default/textures/default_pinetree_top.png b/games/minimal/mods/default/textures/default_pinetree_top.png deleted file mode 100644 index 8705710ed825fcf7cbbf6edf0de6b5b5ddb8b4f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmV-E0>S->P)DQSwTtT2tLMz6=gy+x#+={6nb@+5^5)F#+qv%B zvhUlk?Aov6%A(`Pn%=*d-Mf&~se!P7VDaS1@ZrSk*t6-=vgp#T>({I2(5vFepy9-u z;KG*Nyq4g>l-|9O)~C_+`^pY!IRjylGU}3+p~||xsKho zjL)r$)~$%erG?9BtagZNU$m zooDc#TuBKj7V@^OxwoLa`;s+^TDep$Xzm>-b2W*MN!}(k!n_oesUFj2IVx362UiB5 z%*<x5Jc_WaU3WZ z=IP=X!XcaN5t^8ia>6Ha#{|VAt`jCU9&~o-PLyJwurbGV6^C<&yOuO_^JHde=M}*> zOxXOEx3RJH3b=`}>9#QlvgrwSGO+PAibgr8_9*hmMJeepj>FVdQ I&MBb@0QoR5y#N3J diff --git a/games/minimal/mods/default/textures/default_snow_side.png b/games/minimal/mods/default/textures/default_snow_side.png deleted file mode 100644 index 3e98915131310783a3632d7622c61bdc0ca107b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmV-u0hj)XP)M|AjkO|Lev+((u1ckg~msv8W%AZ_5A#t}!bA85tRS zLF_b;sX)vG#Eejy4GF6Ou>b@k0F*DnKn#EzfCG$zQ2+p#UIIeZnL}6r0000peCA)iIU?`2{mLJiCzwoU z!m4Ppc~TqWjKn2Zj3ix*wK6O8L>UZCV$xb0C3QDDT|UTjere`a1-9nUh@WX4-@arq d?`W)GWDx$!UF&1y7zH$p!PC{xWt~$(699CwN&^4@ From 6f07f79c2f36b007b4c0385b7df2fc4612af7aba Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 11 Jul 2015 17:48:05 -0400 Subject: [PATCH 194/670] Add more robust error checking to deSerialize*String routines Add serializeHexString() Clean up util/serialize.cpp --- src/unittest/test_serialization.cpp | 129 +++++++++++-- src/util/serialize.cpp | 289 ++++++++++++++++++---------- src/util/serialize.h | 6 + 3 files changed, 301 insertions(+), 123 deletions(-) diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index 7df4106e8..b180df54e 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -34,6 +34,10 @@ public: void testSerializeWideString(); void testSerializeLongString(); void testSerializeJsonString(); + void testSerializeHex(); + void testDeSerializeString(); + void testDeSerializeWideString(); + void testDeSerializeLongString(); std::string teststring2; std::wstring teststring2_w; @@ -47,9 +51,13 @@ void TestSerialization::runTests(IGameDef *gamedef) buildTestStrings(); TEST(testSerializeString); + TEST(testDeSerializeString); TEST(testSerializeWideString); + TEST(testDeSerializeWideString); TEST(testSerializeLongString); + TEST(testDeSerializeLongString); TEST(testSerializeJsonString); + TEST(testSerializeHex); } //////////////////////////////////////////////////////////////////////////////// @@ -80,20 +88,37 @@ void TestSerialization::buildTestStrings() void TestSerialization::testSerializeString() { // Test blank string - UASSERT(serializeString("Hello world!") == mkstr("\0\14Hello world!")); + UASSERT(serializeString("") == mkstr("\0\0")); // Test basic string - UASSERT(serializeString("") == mkstr("\0\0")); + UASSERT(serializeString("Hello world!") == mkstr("\0\14Hello world!")); // Test character range UASSERT(serializeString(teststring2) == mkstr("\1\0") + teststring2); +} +void TestSerialization::testDeSerializeString() +{ // Test deserialize - std::istringstream is(serializeString(teststring2), std::ios::binary); - UASSERT(deSerializeString(is) == teststring2); - UASSERT(!is.eof()); - is.get(); - UASSERT(is.eof()); + { + std::istringstream is(serializeString(teststring2), std::ios::binary); + UASSERT(deSerializeString(is) == teststring2); + UASSERT(!is.eof()); + is.get(); + UASSERT(is.eof()); + } + + // Test deserialize an incomplete length specifier + { + std::istringstream is(mkstr("\x53"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeString(is)); + } + + // Test deserialize a string with incomplete data + { + std::istringstream is(mkstr("\x00\x55 abcdefg"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeString(is)); + } } void TestSerialization::testSerializeWideString() @@ -108,13 +133,36 @@ void TestSerialization::testSerializeWideString() // Test character range UASSERT(serializeWideString(teststring2_w) == mkstr("\1\0") + teststring2_w_encoded); +} +void TestSerialization::testDeSerializeWideString() +{ // Test deserialize - std::istringstream is(serializeWideString(teststring2_w), std::ios::binary); - UASSERT(deSerializeWideString(is) == teststring2_w); - UASSERT(!is.eof()); - is.get(); - UASSERT(is.eof()); + { + std::istringstream is(serializeWideString(teststring2_w), std::ios::binary); + UASSERT(deSerializeWideString(is) == teststring2_w); + UASSERT(!is.eof()); + is.get(); + UASSERT(is.eof()); + } + + // Test deserialize an incomplete length specifier + { + std::istringstream is(mkstr("\x53"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeWideString(is)); + } + + // Test deserialize a string with an incomplete character + { + std::istringstream is(mkstr("\x00\x07\0a\0b\0c\0d\0e\0f\0"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeWideString(is)); + } + + // Test deserialize a string with incomplete data + { + std::istringstream is(mkstr("\x00\x08\0a\0b\0c\0d\0e\0f"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeWideString(is)); + } } void TestSerialization::testSerializeLongString() @@ -127,15 +175,39 @@ void TestSerialization::testSerializeLongString() // Test character range UASSERT(serializeLongString(teststring2) == mkstr("\0\0\1\0") + teststring2); - - // Test deserialize - std::istringstream is(serializeLongString(teststring2), std::ios::binary); - UASSERT(deSerializeLongString(is) == teststring2); - UASSERT(!is.eof()); - is.get(); - UASSERT(is.eof()); } +void TestSerialization::testDeSerializeLongString() +{ + // Test deserialize + { + std::istringstream is(serializeLongString(teststring2), std::ios::binary); + UASSERT(deSerializeLongString(is) == teststring2); + UASSERT(!is.eof()); + is.get(); + UASSERT(is.eof()); + } + + // Test deserialize an incomplete length specifier + { + std::istringstream is(mkstr("\x53"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeLongString(is)); + } + + // Test deserialize a string with incomplete data + { + std::istringstream is(mkstr("\x00\x00\x00\x05 abc"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeLongString(is)); + } + + // Test deserialize a string with a length too large + { + std::istringstream is(mkstr("\xFF\xFF\xFF\xFF blah"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeLongString(is)); + } +} + + void TestSerialization::testSerializeJsonString() { // Test blank string @@ -180,3 +252,22 @@ void TestSerialization::testSerializeJsonString() is.get(); UASSERT(is.eof()); } + +void TestSerialization::testSerializeHex() +{ + // Test blank string + UASSERT(serializeHexString("") == ""); + UASSERT(serializeHexString("", true) == ""); + + // Test basic string + UASSERT(serializeHexString("Hello world!") == + "48656c6c6f20776f726c6421"); + UASSERT(serializeHexString("Hello world!", true) == + "48 65 6c 6c 6f 20 77 6f 72 6c 64 21"); + + // Test binary string + UASSERT(serializeHexString(mkstr("\x00\x0a\xb0\x63\x1f\x00\xff")) == + "000ab0631f00ff"); + UASSERT(serializeHexString(mkstr("\x00\x0a\xb0\x63\x1f\x00\xff"), true) == + "00 0a b0 63 1f 00 ff"); +} diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp index 659e816b0..120884d13 100644 --- a/src/util/serialize.cpp +++ b/src/util/serialize.cpp @@ -28,76 +28,101 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -// Creates a string with the length as the first two bytes +//// +//// String +//// + std::string serializeString(const std::string &plain) { - if(plain.size() > 65535) - throw SerializationError("String too long for serializeString"); - char buf[2]; - writeU16((u8*)&buf[0], plain.size()); std::string s; + char buf[2]; + + if (plain.size() > 65535) + throw SerializationError("String too long for serializeString"); + + writeU16((u8 *)&buf[0], plain.size()); s.append(buf, 2); + s.append(plain); return s; } -// Creates a string with the length as the first two bytes from wide string -std::string serializeWideString(const std::wstring &plain) -{ - if(plain.size() > 65535) - throw SerializationError("String too long for serializeString"); - char buf[2]; - writeU16((u8*)buf, plain.size()); - std::string s; - s.append(buf, 2); - for(u32 i=0; i buf2(s_size); is.read(&buf2[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; } -// Reads a wide string with the length as the first two bytes +//// +//// Wide String +//// + +std::string serializeWideString(const std::wstring &plain) +{ + std::string s; + char buf[2]; + + if (plain.size() > 65535) + throw SerializationError("String too long for serializeString"); + + writeU16((u8 *)buf, plain.size()); + s.append(buf, 2); + + for (u32 i = 0; i < plain.size(); i++) { + writeU16((u8 *)buf, plain[i]); + s.append(buf, 2); + } + return s; +} + std::wstring deSerializeWideString(std::istream &is) { - char buf[2]; - is.read(buf, 2); - if(is.gcount() != 2) - throw SerializationError("deSerializeString: size not read"); - u16 s_size = readU16((u8*)buf); std::wstring s; - if(s_size == 0) + char buf[2]; + + is.read(buf, 2); + if (is.gcount() != 2) + throw SerializationError("deSerializeString: size not read"); + + u16 s_size = readU16((u8 *)buf); + if (s_size == 0) return s; + s.reserve(s_size); - for(u32 i=0; i LONG_STRING_MAX) + throw SerializationError("deSerializeLongString: string too long"); + Buffer buf2(s_size); is.read(&buf2[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; } -// Creates a string encoded in JSON format (almost equivalent to a C string literal) +//// +//// JSON +//// + std::string serializeJsonString(const std::string &plain) { std::ostringstream os(std::ios::binary); - os<<"\""; - for(size_t i = 0; i < plain.size(); i++) - { + os << "\""; + + for (size_t i = 0; i < plain.size(); i++) { char c = plain[i]; - switch(c) - { - case '"': os<<"\\\""; break; - case '\\': os<<"\\\\"; break; - case '/': os<<"\\/"; break; - case '\b': os<<"\\b"; break; - case '\f': os<<"\\f"; break; - case '\n': os<<"\\n"; break; - case '\r': os<<"\\r"; break; - case '\t': os<<"\\t"; break; - default: - { - if(c >= 32 && c <= 126) - { - os<= 32 && c <= 126) { + os << c; + } else { + u32 cnum = (u8)c; + os << "\\u" << std::hex << std::setw(4) + << std::setfill('0') << cnum; } break; } } } - os<<"\""; + + os << "\""; return os.str(); } -// Reads a string encoded in JSON format std::string deSerializeJsonString(std::istream &is) { std::ostringstream os(std::ios::binary); @@ -171,55 +220,66 @@ std::string deSerializeJsonString(std::istream &is) // Parse initial doublequote is >> c; - if(c != '"') + if (c != '"') throw SerializationError("JSON string must start with doublequote"); // Parse characters - for(;;) - { + for (;;) { c = is.get(); - if(is.eof()) + if (is.eof()) throw SerializationError("JSON string ended prematurely"); - if(c == '"') - { + + if (c == '"') { return os.str(); - } - else if(c == '\\') - { + } else if (c == '\\') { c2 = is.get(); - if(is.eof()) + if (is.eof()) throw SerializationError("JSON string ended prematurely"); - switch(c2) - { - default: os<> std::hex >> hexnumber; - os<<((char)hexnumber); + os << (char)hexnumber; break; } + default: + os << c2; + break; } - } - else - { - os<size() >= 2) { + if (out->size() >= 2) out->resize(out->size() - 2); - } return true; } #undef SIGN_CAST + +//// +//// Other +//// + +std::string serializeHexString(const std::string &data, bool insert_spaces) +{ + std::string result; + result.reserve(data.size() * (2 + insert_spaces)); + + static const char hex_chars[] = "0123456789abcdef"; + + const size_t len = data.size(); + for (size_t i = 0; i != len; i++) { + u8 byte = data[i]; + result.push_back(hex_chars[(byte >> 4) & 0x0F]); + result.push_back(hex_chars[(byte >> 0) & 0x0F]); + if (insert_spaces && i != len - 1) + result.push_back(' '); + } + + return result; +} diff --git a/src/util/serialize.h b/src/util/serialize.h index 79907799f..fcba90903 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -426,6 +426,9 @@ inline video::SColor readARGB8(std::istream &is) More serialization stuff */ +// 8 MB is a conservative limit. Increase later if problematic. +#define LONG_STRING_MAX (8 * 1024 * 1024) + // Creates a string with the length as the first two bytes std::string serializeString(const std::string &plain); @@ -450,6 +453,9 @@ std::string serializeJsonString(const std::string &plain); // Reads a string encoded in JSON format std::string deSerializeJsonString(std::istream &is); +// Creates a string consisting of the hexadecimal representation of `data` +std::string serializeHexString(const std::string &data, bool insert_spaces=false); + // Creates a string containing comma delimited values of a struct whose layout is // described by the parameter format bool serializeStructToString(std::string *out, From 5006ce82609b2260f191b132f2dabcfdb06d6e20 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Mon, 13 Jul 2015 23:29:29 -0400 Subject: [PATCH 195/670] Remove raw message output on AOM deserialization failure Improve TOCLIENT_ACTIVE_OBJECT_MESSAGES robustness for handling invalid data --- src/environment.cpp | 29 ++++++++++++----------------- src/network/clientpackethandler.cpp | 28 +++++++++------------------- 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 09db886a8..5affda6fa 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -2535,28 +2535,23 @@ void ClientEnvironment::removeActiveObject(u16 id) m_active_objects.erase(id); } -void ClientEnvironment::processActiveObjectMessage(u16 id, - const std::string &data) +void ClientEnvironment::processActiveObjectMessage(u16 id, const std::string &data) { - ClientActiveObject* obj = getActiveObject(id); - if(obj == NULL) - { - infostream<<"ClientEnvironment::processActiveObjectMessage():" - <<" got message for id="<processMessage(data); - } - catch(SerializationError &e) - { + } catch (SerializationError &e) { errorstream<<"ClientEnvironment::processActiveObjectMessage():" - <<" id="<getString(0), pkt->getSize()); - // Throw them in an istringstream std::istringstream is(datastring, std::ios_base::binary); try { - while(is.eof() == false) { - is.read(buf, 2); - u16 id = readU16((u8*)buf); - if (is.eof()) + while (is.good()) { + u16 id = readU16(is); + if (!is.good()) break; - is.read(buf, 2); - size_t message_size = readU16((u8*)buf); - std::string message; - message.reserve(message_size); - for (u32 i = 0; i < message_size; i++) { - is.read(buf, 1); - message.append(buf, 1); - } + + std::string message = deSerializeString(is); + // Pass on to the environment m_env.processActiveObjectMessage(id, message); } - // Packet could be unreliable then ignore it - } catch (PacketError &e) { - infostream << "handleCommand_ActiveObjectMessages: " << e.what() - << ". The packet is unreliable, ignoring" << std::endl; + } catch (SerializationError &e) { + errorstream << "Client::handleCommand_ActiveObjectMessages: " + << "caught SerializationError: " << e.what() << std::endl; } } From 515e7028ac5121bc6a5205b12aae731eed630b05 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 14 Jul 2015 03:22:16 -0400 Subject: [PATCH 196/670] Increase limit of serialized long strings --- src/util/serialize.cpp | 10 ++++++++-- src/util/serialize.h | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp index 120884d13..0d38b9608 100644 --- a/src/util/serialize.cpp +++ b/src/util/serialize.cpp @@ -126,6 +126,10 @@ std::wstring deSerializeWideString(std::istream &is) std::string serializeLongString(const std::string &plain) { char buf[4]; + + if (plain.size() > LONG_STRING_MAX) + throw SerializationError("String too long for serializeLongString"); + writeU32((u8*)&buf[0], plain.size()); std::string s; s.append(buf, 4); @@ -147,8 +151,10 @@ std::string deSerializeLongString(std::istream &is) return s; // We don't really want a remote attacker to force us to allocate 4GB... - if (s_size > LONG_STRING_MAX) - throw SerializationError("deSerializeLongString: string too long"); + if (s_size > LONG_STRING_MAX) { + throw SerializationError("deSerializeLongString: " + "string too long: " + itos(s_size) + " bytes"); + } Buffer buf2(s_size); is.read(&buf2[0], s_size); diff --git a/src/util/serialize.h b/src/util/serialize.h index fcba90903..60f25d740 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -426,8 +426,8 @@ inline video::SColor readARGB8(std::istream &is) More serialization stuff */ -// 8 MB is a conservative limit. Increase later if problematic. -#define LONG_STRING_MAX (8 * 1024 * 1024) +// 64 MB ought to be enough for anybody - Billy G. +#define LONG_STRING_MAX (64 * 1024 * 1024) // Creates a string with the length as the first two bytes std::string serializeString(const std::string &plain); From 8ac0cf500ff336c43f6c42b306431fa6564b7cc8 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Tue, 14 Jul 2015 17:56:55 +0200 Subject: [PATCH 197/670] connection.cpp: remove unused constructor --- src/network/connection.cpp | 24 ------------------------ src/network/connection.h | 1 - 2 files changed, 25 deletions(-) diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 6e8bbd6c3..d0670e66e 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -2639,30 +2639,6 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, Connection */ -Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, - bool ipv6) : - m_udpSocket(ipv6), - m_command_queue(), - m_event_queue(), - m_peer_id(0), - m_protocol_id(protocol_id), - m_sendThread(max_packet_size, timeout), - m_receiveThread(max_packet_size), - m_info_mutex(), - m_bc_peerhandler(0), - m_bc_receive_timeout(0), - m_shutting_down(false), - m_next_remote_peer_id(2) -{ - m_udpSocket.setTimeoutMs(5); - - m_sendThread.setParent(this); - m_receiveThread.setParent(this); - - m_sendThread.Start(); - m_receiveThread.Start(); -} - Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6, PeerHandler *peerhandler) : m_udpSocket(ipv6), diff --git a/src/network/connection.h b/src/network/connection.h index 556a40a12..b1f9e70a8 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -1013,7 +1013,6 @@ public: friend class ConnectionSendThread; friend class ConnectionReceiveThread; - Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6); Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6, PeerHandler *peerhandler); ~Connection(); From b30e8d8ec689fbb65b1cee6fb6ff79322b204d0d Mon Sep 17 00:00:00 2001 From: Kahrl Date: Tue, 14 Jul 2015 18:20:50 +0200 Subject: [PATCH 198/670] Make serialization error message translatable Also don't show "probably running a different version" message in simple singleplayer mode --- src/game.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 41bfa5e60..d5819f78a 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4352,9 +4352,13 @@ void the_game(bool *kill, } } catch (SerializationError &e) { - error_message = std::string("A serialization error occurred:\n") - + e.what() + "\n\nThe server is probably " - " running a different version of " PROJECT_NAME_C "."; + error_message = strgettext("A serialization error occurred:") + + "\n" + e.what(); + if (!simple_singleplayer_mode) { + error_message += "\n\n" + + strgettext("The server is probably running a different version of") + + " " PROJECT_NAME_C "."; + } errorstream << error_message << std::endl; } catch (ServerError &e) { error_message = e.what(); From 655fc6010ffd4be7de315be261df2a61d5d4538a Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Thu, 16 Jul 2015 15:36:48 +0200 Subject: [PATCH 199/670] Fix relief mapping issues --- .../shaders/nodes_shader/opengl_fragment.glsl | 94 ++++++++++++++---- .../shaders/nodes_shader/opengl_vertex.glsl | 2 +- .../water_surface_shader/opengl_fragment.glsl | 42 +++++--- doc/lua_api.txt | 9 +- games/minimal/mods/default/init.lua | 8 +- src/client/tile.cpp | 41 ++++++-- src/client/tile.h | 11 +- src/game.cpp | 14 +-- src/mapblock_mesh.cpp | 8 +- src/network/networkprotocol.h | 2 + src/nodedef.cpp | 25 ++++- src/nodedef.h | 4 + src/script/common/c_content.cpp | 16 +-- textures/base/pack/disable_img.png | Bin 150 -> 0 bytes textures/base/pack/enable_img.png | Bin 160 -> 0 bytes 15 files changed, 206 insertions(+), 70 deletions(-) delete mode 100644 textures/base/pack/disable_img.png delete mode 100644 textures/base/pack/enable_img.png diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 8dc3a5683..02bf2c124 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -1,6 +1,6 @@ uniform sampler2D baseTexture; uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; +uniform sampler2D textureFlags; uniform vec4 skyBgColor; uniform float fogDistance; @@ -15,19 +15,73 @@ varying vec3 tsEyeVec; varying vec3 lightVec; varying vec3 tsLightVec; -bool normalTexturePresent = false; +bool normalTexturePresent = false; +bool texTileableHorizontal = false; +bool texTileableVertical = false; +bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; - -float intensity (vec3 color) + +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; + } +} + +vec2 validate_displacement(vec2 uv, vec2 ds, float dist) +{ + if (texSeamless) { + uv += dist * ds; + } else if (texTileableVertical == false) { + vec2 uv2 = uv + dist * ds; + // limit vertical texure displacement + if ((uv.y + uv2.y) < 0.0) { + uv.y = 0.0; + } else if ((uv.y + uv2.y) > 1.999) { + uv.y = 0.999; + } else { + uv.y = uv2.y; + } + uv.x = uv2.x; + } else { + vec2 uv2 = uv + dist * ds; + // limit horizontal texure displacement + if ((uv.x + uv2.x) < 0.0) { + uv.x = 0.0; + } else if ((uv.x + uv2.x) > 1.999) { + uv.x = 0.999; + } else { + uv.x = uv2.x; + } + uv.y = uv2.y; + } + return uv; +} + +float intensity(vec3 color) { return (color.r + color.g + color.b) / 3.0; } -float get_rgb_height (vec2 uv) +float get_rgb_height(vec2 uv) { - return intensity(texture2D(baseTexture,uv).rgb); + 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) @@ -50,7 +104,8 @@ float find_intersection(vec2 dp, vec2 ds) return depth; } -float find_intersectionRGB(vec2 dp, vec2 ds) { +float find_intersectionRGB(vec2 dp, vec2 ds) +{ const float depth_step = 1.0 / 24.0; float depth = 1.0; for (int i = 0 ; i < 24 ; i++) { @@ -62,24 +117,19 @@ float find_intersectionRGB(vec2 dp, vec2 ds) { return depth; } -void main (void) +void main(void) { vec3 color; vec4 bump; vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; - -#if USE_NORMALMAPS == 1 - if (texture2D(useNormalmap,vec2(1.0, 1.0)).r > 0.0) { - normalTexturePresent = true; - } -#endif + get_texture_flags(); #ifdef ENABLE_PARALLAX_OCCLUSION vec2 eyeRay = vec2 (tsEyeVec.x, -tsEyeVec.y); const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; - + #if PARALLAX_OCCLUSION_MODE == 0 // Parallax occlusion with slope information if (normalTexturePresent && area_enable_parallax > 0.0) { @@ -89,17 +139,23 @@ void main (void) uv += h * normal.z * eyeRay; } #endif + #if PARALLAX_OCCLUSION_MODE == 1 // Relief mapping if (normalTexturePresent && area_enable_parallax > 0.0) { vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; + // offset the texture by maximum possible displacement, + // this will help align seamless and non seamless textures + uv -= ds; float dist = find_intersection(uv, ds); - uv += dist * ds; + uv = validate_displacement(uv, ds, dist); + #endif } else if (GENERATE_NORMALMAPS == 1 && area_enable_parallax > 0.0) { vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; + uv -= ds; float dist = find_intersectionRGB(uv, ds); - uv += dist * ds; + uv = validate_displacement(uv, ds, dist); } #endif @@ -107,10 +163,10 @@ void main (void) if (normalTexturePresent) { bump = get_normal_map(uv); use_normalmap = true; - } + } #endif - if (GENERATE_NORMALMAPS == 1 && use_normalmap == false) { + if (GENERATE_NORMALMAPS == 1 && 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)); diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 9f8210d12..acdaa47d1 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -94,7 +94,7 @@ void main(void) // Don't generate heightmaps when too far from the eye float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); - if (dist > 120.0) { + if (dist > 300.0) { area_enable_parallax = 0.0; } diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 386f77486..75751e243 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -1,6 +1,6 @@ uniform sampler2D baseTexture; uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; +uniform sampler2D textureFlags; uniform vec4 skyBgColor; uniform float fogDistance; @@ -15,37 +15,55 @@ varying vec3 lightVec; varying vec3 tsLightVec; bool normalTexturePresent = false; +bool texTileableHorizontal = false; +bool texTileableVertical = false; +bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; - -float intensity (vec3 color){ + +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){ +float get_rgb_height(vec2 uv) +{ return intensity(texture2D(baseTexture,uv).rgb); } -vec4 get_normal_map(vec2 uv){ +vec4 get_normal_map(vec2 uv) +{ vec4 bump = texture2D(normalTexture, uv).rgba; bump.xyz = normalize(bump.xyz * 2.0 -1.0); bump.y = -bump.y; return bump; } -void main (void) +void main(void) { vec3 color; vec4 bump; vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; - -#ifdef USE_NORMALMAPS - if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0) { - normalTexturePresent = true; - } -#endif + get_texture_flags(); #ifdef ENABLE_PARALLAX_OCCLUSION if (normalTexturePresent) { diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 49292d2b4..34d22cdb8 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3058,8 +3058,13 @@ Definition tables ### Tile definition * `"image.png"` * `{name="image.png", animation={Tile Animation definition}}` -* `{name="image.png", backface_culling=bool}` - * backface culling only supported in special tiles +* `{name="image.png", backface_culling=bool, tileable_vertical=bool, + tileable_horizontal=bool}` + * backface culling only supported in special tiles. + * tileable flags are info for shaders, how they should treat texture + when displacement mapping is used + Directions are from the point of view of the tile texture, + not the node it's on * deprecated, yet still supported field names: * `image` (name) diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua index dd3d7bbf6..bff7860e3 100644 --- a/games/minimal/mods/default/init.lua +++ b/games/minimal/mods/default/init.lua @@ -722,7 +722,9 @@ minetest.register_node("default:stone_with_iron", { minetest.register_node("default:dirt_with_grass", { description = "Dirt with grass", - tiles ={"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, + 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({ @@ -732,7 +734,9 @@ minetest.register_node("default:dirt_with_grass", { minetest.register_node("default:dirt_with_grass_footsteps", { description = "Dirt with grass and footsteps", - tiles ={"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, + 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({ diff --git a/src/client/tile.cpp b/src/client/tile.cpp index cf8061982..5ad564b65 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -35,6 +35,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" // for parseColorString() #include "imagefilters.h" #include "guiscalingfilter.h" +#include "nodedef.h" + #ifdef __ANDROID__ #include @@ -330,7 +332,7 @@ public: */ video::ITexture* getTexture(u32 id); - video::ITexture* getTexture(const std::string &name, u32 *id); + video::ITexture* getTexture(const std::string &name, u32 *id = NULL); /* Get a texture specifically intended for mesh @@ -383,6 +385,7 @@ public: video::ITexture* getNormalTexture(const std::string &name); video::SColor getTextureAverageColor(const std::string &name); + video::ITexture *getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile); private: @@ -1992,9 +1995,8 @@ void imageTransform(u32 transform, video::IImage *src, video::IImage *dst) video::ITexture* TextureSource::getNormalTexture(const std::string &name) { - u32 id; if (isKnownSourceImage("override_normal.png")) - return getTexture("override_normal.png", &id); + return getTexture("override_normal.png"); std::string fname_base = name; std::string normal_ext = "_normal.png"; size_t pos = fname_base.find("."); @@ -2006,7 +2008,7 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name) fname_base.replace(i, 4, normal_ext); i += normal_ext.length(); } - return getTexture(fname_base, &id); + return getTexture(fname_base); } return NULL; } @@ -2015,8 +2017,7 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) { video::IVideoDriver *driver = m_device->getVideoDriver(); video::SColor c(0, 0, 0, 0); - u32 id; - video::ITexture *texture = getTexture(name, &id); + video::ITexture *texture = getTexture(name); video::IImage *image = driver->createImage(texture, core::position2d(0, 0), texture->getOriginalSize()); @@ -2048,3 +2049,31 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) c.setAlpha(255); return c; } + +video::ITexture *TextureSource::getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile) +{ + std::string tname = "__shaderFlagsTexture"; + + bool normalmap_present = tile->normal_texture ? true : false; + tname += normalmap_present ? "1" : "0"; + tname += tiledef->tileable_horizontal ? "1" : "0"; + tname += tiledef->tileable_vertical ? "1" : "0"; + + if (isKnownSourceImage(tname)) { + return getTexture(tname); + } else { + video::IVideoDriver *driver = m_device->getVideoDriver(); + video::IImage *flags_image = driver->createImage( + video::ECF_A8R8G8B8, core::dimension2d(1, 1)); + sanity_check(flags_image != NULL); + video::SColor c( + 255, + normalmap_present ? 255 : 0, + tiledef->tileable_horizontal ? 255 : 0, + tiledef->tileable_vertical ? 255 : 0); + flags_image->setPixel(0, 0, c); + insertSourceImage(tname, flags_image); + flags_image->drop(); + return getTexture(tname); + } +} diff --git a/src/client/tile.h b/src/client/tile.h index 674da66f2..13f1a8b34 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -31,6 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" class IGameDef; +struct TileSpec; +struct TileDef; /* tile.{h,cpp}: Texture handling stuff. @@ -111,6 +113,7 @@ public: const TextureFromMeshParams ¶ms)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; + virtual video::ITexture *getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile)=0; }; class IWritableTextureSource : public ITextureSource @@ -133,6 +136,7 @@ public: virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; + virtual video::ITexture *getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); @@ -172,12 +176,14 @@ struct FrameSpec FrameSpec(): texture_id(0), texture(NULL), - normal_texture(NULL) + normal_texture(NULL), + flags_texture(NULL) { } u32 texture_id; video::ITexture *texture; video::ITexture *normal_texture; + video::ITexture *flags_texture; }; struct TileSpec @@ -186,6 +192,7 @@ struct TileSpec texture_id(0), texture(NULL), normal_texture(NULL), + flags_texture(NULL), alpha(255), material_type(TILE_MATERIAL_BASIC), material_flags( @@ -252,6 +259,7 @@ struct TileSpec u32 texture_id; video::ITexture *texture; video::ITexture *normal_texture; + video::ITexture *flags_texture; // Vertex alpha (when MATERIAL_ALPHA_VERTEX is used) u8 alpha; @@ -266,5 +274,4 @@ struct TileSpec u8 rotation; }; - #endif diff --git a/src/game.cpp b/src/game.cpp index d5819f78a..e3d6b0bc6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -878,11 +878,11 @@ public: #if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8) services->setPixelShaderConstant("baseTexture" , (irr::f32 *)&layer0, 1); services->setPixelShaderConstant("normalTexture" , (irr::f32 *)&layer1, 1); - services->setPixelShaderConstant("useNormalmap" , (irr::f32 *)&layer2, 1); + services->setPixelShaderConstant("textureFlags" , (irr::f32 *)&layer2, 1); #else services->setPixelShaderConstant("baseTexture" , (irr::s32 *)&layer0, 1); services->setPixelShaderConstant("normalTexture" , (irr::s32 *)&layer1, 1); - services->setPixelShaderConstant("useNormalmap" , (irr::s32 *)&layer2, 1); + services->setPixelShaderConstant("textureFlags" , (irr::s32 *)&layer2, 1); #endif } }; @@ -4352,13 +4352,9 @@ void the_game(bool *kill, } } catch (SerializationError &e) { - error_message = strgettext("A serialization error occurred:") - + "\n" + e.what(); - if (!simple_singleplayer_mode) { - error_message += "\n\n" - + strgettext("The server is probably running a different version of") - + " " PROJECT_NAME_C "."; - } + error_message = std::string("A serialization error occurred:\n") + + e.what() + "\n\nThe server is probably " + " running a different version of " PROJECT_NAME_C "."; errorstream << error_message << std::endl; } catch (ServerError &e) { error_message = e.what(); diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 145ab40c2..32f6e659a 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1213,10 +1213,8 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): p.tile.applyMaterialOptionsWithShaders(material); if (p.tile.normal_texture) { material.setTexture(1, p.tile.normal_texture); - material.setTexture(2, m_tsrc->getTextureForMesh("enable_img.png")); - } else { - material.setTexture(2, m_tsrc->getTextureForMesh("disable_img.png")); } + material.setTexture(2, p.tile.flags_texture); } else { p.tile.applyMaterialOptions(material); } @@ -1349,10 +1347,8 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat if (m_enable_shaders) { if (animation_frame.normal_texture) { buf->getMaterial().setTexture(1, animation_frame.normal_texture); - buf->getMaterial().setTexture(2, m_tsrc->getTextureForMesh("enable_img.png")); - } else { - buf->getMaterial().setTexture(2, m_tsrc->getTextureForMesh("disable_img.png")); } + buf->getMaterial().setTexture(2, animation_frame.flags_texture); } } diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 852f2ee03..e4b566740 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -130,6 +130,8 @@ with this program; if not, write to the Free Software Foundation, Inc., presentation Add TOCLIENT_AUTH_ACCEPT to accept connection from client Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO + PROTOCOL_VERSION 26: + Add TileDef tileable_horizontal, tileable_vertical flags */ #define LATEST_PROTOCOL_VERSION 25 diff --git a/src/nodedef.cpp b/src/nodedef.cpp index ccafd4598..bb4f102da 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -120,7 +120,9 @@ void NodeBox::deSerialize(std::istream &is) void TileDef::serialize(std::ostream &os, u16 protocol_version) const { - if(protocol_version >= 17) + if (protocol_version >= 26) + writeU8(os, 2); + else if (protocol_version >= 17) writeU8(os, 1); else writeU8(os, 0); @@ -129,8 +131,12 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const writeU16(os, animation.aspect_w); writeU16(os, animation.aspect_h); writeF1000(os, animation.length); - if(protocol_version >= 17) + if (protocol_version >= 17) writeU8(os, backface_culling); + if (protocol_version >= 26) { + writeU8(os, tileable_horizontal); + writeU8(os, tileable_vertical); + } } void TileDef::deSerialize(std::istream &is) @@ -141,10 +147,15 @@ void TileDef::deSerialize(std::istream &is) animation.aspect_w = readU16(is); animation.aspect_h = readU16(is); animation.length = readF1000(is); - if(version >= 1) + if (version >= 1) backface_culling = readU8(is); + if (version >= 2) { + tileable_horizontal = readU8(is); + tileable_vertical = readU8(is); + } } + /* SimpleSoundSpec serialization */ @@ -183,6 +194,7 @@ void ContentFeatures::reset() solidness = 2; visual_solidness = 0; backface_culling = true; + #endif has_on_construct = false; has_on_destruct = false; @@ -996,9 +1008,11 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, tile->alpha = alpha; tile->material_type = material_type; - // Normal texture - if (use_normal_texture) + // Normal texture and shader flags texture + if (use_normal_texture) { tile->normal_texture = tsrc->getNormalTexture(tiledef->name); + } + tile->flags_texture = tsrc->getShaderFlagsTexture(tiledef, tile); // Material flags tile->material_flags = 0; @@ -1038,6 +1052,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, frame.texture = tsrc->getTextureForMesh(os.str(), &frame.texture_id); if (tile->normal_texture) frame.normal_texture = tsrc->getNormalTexture(os.str()); + frame.flags_texture = tile->flags_texture; tile->frames[i] = frame; } } diff --git a/src/nodedef.h b/src/nodedef.h index bbce6ba3e..a4a7b6e41 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -113,6 +113,8 @@ struct TileDef { std::string name; bool backface_culling; // Takes effect only in special cases + bool tileable_horizontal; + bool tileable_vertical; struct{ enum TileAnimationType type; int aspect_w; // width for aspect ratio @@ -124,6 +126,8 @@ struct TileDef { name = ""; backface_culling = true; + tileable_horizontal = true; + tileable_vertical = true; animation.type = TAT_NONE; animation.aspect_w = 1; animation.aspect_h = 1; diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 4db92190b..42c6889d8 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -277,20 +277,24 @@ TileDef read_tiledef(lua_State *L, int index) getstringfield(L, index, "name", tiledef.name); getstringfield(L, index, "image", tiledef.name); // MaterialSpec compat. tiledef.backface_culling = getboolfield_default( - L, index, "backface_culling", true); + L, index, "backface_culling", true); + tiledef.tileable_horizontal = getboolfield_default( + L, index, "tileable_horizontal", true); + tiledef.tileable_vertical = getboolfield_default( + L, index, "tileable_vertical", true); // animation = {} lua_getfield(L, index, "animation"); if(lua_istable(L, -1)){ // {type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0} tiledef.animation.type = (TileAnimationType) - getenumfield(L, -1, "type", es_TileAnimationType, - TAT_NONE); + getenumfield(L, -1, "type", es_TileAnimationType, + TAT_NONE); tiledef.animation.aspect_w = - getintfield_default(L, -1, "aspect_w", 16); + getintfield_default(L, -1, "aspect_w", 16); tiledef.animation.aspect_h = - getintfield_default(L, -1, "aspect_h", 16); + getintfield_default(L, -1, "aspect_h", 16); tiledef.animation.length = - getfloatfield_default(L, -1, "length", 1.0); + getfloatfield_default(L, -1, "length", 1.0); } lua_pop(L, 1); } diff --git a/textures/base/pack/disable_img.png b/textures/base/pack/disable_img.png deleted file mode 100644 index 4d3a1b45ddb50404cf74ae6d05a934ab2727d033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E*B%O0uRe1MSq}>WQl7;iF1B#Zfaf$gL6@8Vo7R>LV0FMhJw4NZ$Nk>pEyvF pfTxRNh{pNk1PRu~2_gp=7?=eZ7&9j39tO%Wc)I$ztaD0e0sunoAi)3t diff --git a/textures/base/pack/enable_img.png b/textures/base/pack/enable_img.png deleted file mode 100644 index e07f4e9dda6e3b88c6b95368cea5aca3e826d798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E*B%Of_#Hc!bG5uWQl7;iF1B#Zfaf$gL6@8Vo7R>LV0FMhJw4NZ$Nk>pEyvF zl&6bhh{pNkKmY&RGix? Date: Thu, 16 Jul 2015 17:37:46 +0200 Subject: [PATCH 200/670] Kick players when shutting down server and there is a crash due to a Lua stack exception --- src/environment.cpp | 10 ++++++++++ src/environment.h | 1 + src/server.cpp | 8 ++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 5affda6fa..cad1f298b 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -39,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblock_mesh.h" #include "event.h" #endif +#include "server.h" #include "daynightratio.h" #include "map.h" #include "emerge.h" @@ -425,6 +426,15 @@ bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, float stepsize, v3s16 return true; } +void ServerEnvironment::kickAllPlayers(const std::string &reason) +{ + for (std::vector::iterator it = m_players.begin(); + it != m_players.end(); + ++it) { + ((Server*)m_gamedef)->DenyAccess_Legacy((*it)->peer_id, utf8_to_wide(reason)); + } +} + void ServerEnvironment::saveLoadedPlayers() { std::string players_path = m_path_world + DIR_DELIM "players"; diff --git a/src/environment.h b/src/environment.h index b35ca4249..794f1971c 100644 --- a/src/environment.h +++ b/src/environment.h @@ -221,6 +221,7 @@ public: float getSendRecommendedInterval() { return m_recommended_send_interval; } + void kickAllPlayers(const std::string &reason); // Save players void saveLoadedPlayers(); void savePlayer(const std::string &playername); diff --git a/src/server.cpp b/src/server.cpp index 9d70ad7b7..0cad82613 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -394,10 +394,13 @@ Server::~Server() // Execute script shutdown hooks m_script->on_shutdown(); - infostream<<"Server: Saving players"<saveLoadedPlayers(); - infostream<<"Server: Saving environment metadata"<kickAllPlayers("Server shutting down..."); + + infostream << "Server: Saving environment metadata" << std::endl; m_env->saveMeta(); } @@ -499,6 +502,7 @@ void Server::step(float dtime) throw ServerError(async_err); } else { + m_env->kickAllPlayers("The server has crashed. Disconnecting all players. Please reconnect soon..."); errorstream << "UNRECOVERABLE error occurred. Stopping server. " << "Please fix the following error:" << std::endl << async_err << std::endl; From bf7174f3f98f0ac665e093aaa3e332f8bd29b64b Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 17 Jul 2015 06:30:21 +0200 Subject: [PATCH 201/670] Server kicks: make messages configurable, cache wstring --- minetest.conf.example | 6 ++++++ src/defaultsettings.cpp | 3 +++ src/environment.cpp | 3 ++- src/server.cpp | 6 +++--- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index aef82c3ad..7029f591e 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -388,6 +388,12 @@ # "log" = mimic and log backtrace of deprecated call (default for debug). # "error" = abort on usage of deprecated call (suggested for mod developers). #deprecated_lua_api_handling = legacy + +#kick_msg_shutdown = Server shutting down. +# A message to be displayed to all clients when the server shuts down +#kick_msg_crash = This server has experienced an internal error. You will now be disconnected. +# A message to be displayed to all clients when the server crashes + # Mod profiler #mod_profiling = false # Detailed mod profile data diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index da5dcae94..8df0fbbd8 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -252,6 +252,9 @@ void set_default_settings(Settings *settings) settings->setDefault("deprecated_lua_api_handling", "log"); #endif + settings->setDefault("kick_msg_shutdown", "Server shutting down."); + settings->setDefault("kick_msg_crash", "This server has experienced an internal error. You will now be disconnected."); + settings->setDefault("profiler_print_interval", "0"); settings->setDefault("enable_mapgen_debug_info", "false"); settings->setDefault("active_object_send_range_blocks", "3"); diff --git a/src/environment.cpp b/src/environment.cpp index cad1f298b..d22982b68 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -428,10 +428,11 @@ bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, float stepsize, v3s16 void ServerEnvironment::kickAllPlayers(const std::string &reason) { + std::wstring wreason = utf8_to_wide(reason); for (std::vector::iterator it = m_players.begin(); it != m_players.end(); ++it) { - ((Server*)m_gamedef)->DenyAccess_Legacy((*it)->peer_id, utf8_to_wide(reason)); + ((Server*)m_gamedef)->DenyAccess_Legacy((*it)->peer_id, wreason); } } diff --git a/src/server.cpp b/src/server.cpp index 0cad82613..2d6de1c9d 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -397,8 +397,8 @@ Server::~Server() infostream << "Server: Saving players" << std::endl; m_env->saveLoadedPlayers(); - infostream << "Server: kick players" << std::endl; - m_env->kickAllPlayers("Server shutting down..."); + infostream << "Server: Kicking players" << std::endl; + m_env->kickAllPlayers(g_settings->get("kick_msg_shutdown")); infostream << "Server: Saving environment metadata" << std::endl; m_env->saveMeta(); @@ -502,7 +502,7 @@ void Server::step(float dtime) throw ServerError(async_err); } else { - m_env->kickAllPlayers("The server has crashed. Disconnecting all players. Please reconnect soon..."); + m_env->kickAllPlayers(g_settings->get("kick_msg_crash")); errorstream << "UNRECOVERABLE error occurred. Stopping server. " << "Please fix the following error:" << std::endl << async_err << std::endl; From 3ff5e458b60e167c546ddcac5c73d918e9c2af6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 7 Jul 2015 14:43:59 +0200 Subject: [PATCH 202/670] Translated using Weblate (Italian) Currently translated at 82.5% (194 of 235 strings) --- po/it/minetest.po | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/po/it/minetest.po b/po/it/minetest.po index ef8ebc58e..e67333d2f 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -8,14 +8,16 @@ msgstr "" "Project-Id-Version: Minetest 0.4.9\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2014-06-01 19:05+0100\n" -"Last-Translator: Enki \n" -"Language-Team: \n" +"PO-Revision-Date: 2015-07-07 14:43+0200\n" +"Last-Translator: Michal Čihař \n" +"Language-Team: Italian " +"\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:67 msgid "Ok" @@ -674,7 +676,7 @@ msgstr "Le password non coincidono!" #: src/guiVolumeChange.cpp:106 msgid "Sound Volume: " -msgstr "Volume suono:" +msgstr "Volume suono: " #: src/guiVolumeChange.cpp:120 msgid "Exit" From 4872f1cfd13c0a730aa1c09ec109f33ac39e963e Mon Sep 17 00:00:00 2001 From: Jean-Patrick G Date: Wed, 8 Jul 2015 11:41:31 +0200 Subject: [PATCH 203/670] Translated using Weblate (French) Currently translated at 99.1% (233 of 235 strings) --- po/fr/minetest.po | 65 ++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/po/fr/minetest.po b/po/fr/minetest.po index 8b65af0ff..bed11899f 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2014-12-14 17:34+0100\n" -"Last-Translator: Calinou \n" -"Language-Team: Français <>\n" +"PO-Revision-Date: 2015-07-08 11:41+0200\n" +"Last-Translator: Jean-Patrick G. \n" +"Language-Team: French " +"\n" "Language: fr\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 1.7-dev\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:67 msgid "Ok" @@ -34,7 +35,7 @@ msgstr "Cacher le jeu" #: builtin/mainmenu/dlg_config_world.lua:36 #: builtin/mainmenu/dlg_config_world.lua:38 msgid "Hide mp content" -msgstr "Cacher le contenu de packs de mods" +msgstr "Cacher le pack de mods" #: builtin/mainmenu/dlg_config_world.lua:46 msgid "Mod:" @@ -98,7 +99,7 @@ msgstr "Vous n'avez pas de sous-jeux installés." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "" +msgstr "Téléchargez-en un depuis minetest.net" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." @@ -106,7 +107,7 @@ msgstr "Avertissement : le jeu minimal est fait pour les développeurs." #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Téléchargez un sosu-jeu, comme minetest_game, depuis minetest.net" +msgstr "Téléchargez un sous-jeu, comme minetest_game, depuis minetest.net" #: builtin/mainmenu/dlg_create_world.lua:97 msgid "A world named \"$1\" already exists" @@ -118,7 +119,7 @@ msgstr "Nom du monde manquant ou aucun jeu sélectionné" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" -msgstr "Êtes-vous sûr de supprimer \"$1\" ?" +msgstr "Êtes-vous sûr de vouloir supprimer \"$1\" ?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 @@ -190,7 +191,7 @@ msgstr "Rechercher" #: builtin/mainmenu/store.lua:125 msgid "Downloading" -msgstr "Télécharement" +msgstr "Téléchargement" #: builtin/mainmenu/store.lua:127 msgid "please wait..." @@ -202,7 +203,7 @@ msgstr "Installé avec succès :" #: builtin/mainmenu/store.lua:163 msgid "Shortname:" -msgstr "Nom court :" +msgstr "Nom :" #: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 msgid "ok" @@ -266,11 +267,11 @@ msgstr "Renommer" #: builtin/mainmenu/tab_mods.lua:95 msgid "Uninstall selected modpack" -msgstr "Désinstaller le pack de mods sélectionné" +msgstr "Désinstaller le pack de mods" #: builtin/mainmenu/tab_mods.lua:106 msgid "Uninstall selected mod" -msgstr "Désinstaller le mod sélectionné" +msgstr "Désinstaller le mod" #: builtin/mainmenu/tab_mods.lua:121 msgid "Select Mod File:" @@ -356,7 +357,7 @@ msgstr "Serveur" #: builtin/mainmenu/tab_settings.lua:23 msgid "Are you sure to reset your singleplayer world?" -msgstr "Êtes-vous sûr de remettre à zéro votre monde solo ?" +msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?" #: builtin/mainmenu/tab_settings.lua:27 msgid "No!!!" @@ -375,7 +376,6 @@ msgid "3D Clouds" msgstr "Nuages 3D" #: builtin/mainmenu/tab_settings.lua:140 - msgid "Fancy Trees" msgstr "Arbres détaillés" @@ -384,13 +384,12 @@ msgid "Opaque Water" msgstr "Eau opaque" #: builtin/mainmenu/tab_settings.lua:144 - msgid "Connected Glass" msgstr "Verre connecté" #: builtin/mainmenu/tab_settings.lua:149 msgid "Restart minetest for driver change to take effect" -msgstr "Redémarrez Minetest pour que le changement de pilote prenne effet" +msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet" #: builtin/mainmenu/tab_settings.lua:151 msgid "Mip-Mapping" @@ -417,17 +416,16 @@ msgid "Change keys" msgstr "Changer les touches" #: builtin/mainmenu/tab_settings.lua:167 -#, fuzzy msgid "Reset singleplayer world" -msgstr "Remettre le monde solo à zéro" +msgstr "Réinitialiser le monde" #: builtin/mainmenu/tab_settings.lua:171 msgid "GUI scale factor" -msgstr "Échelle des menus" +msgstr "Taille des menus" #: builtin/mainmenu/tab_settings.lua:175 msgid "Scaling factor applied to menu elements: " -msgstr "Échelle appliquée aux menus :" +msgstr "Taille appliquée aux menus : " #: builtin/mainmenu/tab_settings.lua:181 msgid "Touch free target" @@ -443,7 +441,7 @@ msgstr "Bump mapping" #: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 msgid "Generate Normalmaps" -msgstr "Générer des normal maps" +msgstr "Normal mapping" #: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 msgid "Parallax Occlusion" @@ -451,15 +449,15 @@ msgstr "Occlusion parallaxe" #: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 msgid "Waving Water" -msgstr "Liquides animés" +msgstr "Liquides mouvants" #: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 msgid "Waving Leaves" -msgstr "Feuilles animées" +msgstr "Feuilles mouvantes" #: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 msgid "Waving Plants" -msgstr "Plantes animées" +msgstr "Plantes mouvantes" #: builtin/mainmenu/tab_settings.lua:255 msgid "To enable shaders the OpenGL driver needs to be used." @@ -478,7 +476,6 @@ msgid "Start Singleplayer" msgstr "Démarrer la partie solo" #: builtin/mainmenu/tab_simple_main.lua:72 - msgid "Config mods" msgstr "Configurer les mods" @@ -516,7 +513,7 @@ msgstr "needs_fallback_font" #: src/game.cpp:1063 msgid "Respawn" -msgstr "Réapparaître" +msgstr "Ressusciter" #: src/game.cpp:2250 msgid "Item definitions..." @@ -564,7 +561,7 @@ msgstr "\"Use\" = descendre (escalade)" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" -msgstr "Double appui sur \"saut\" pour voler" +msgstr "Double-appui sur \"saut\" pour voler" #: src/guiKeyChangeMenu.cpp:296 msgid "Key already in use" @@ -604,7 +601,7 @@ msgstr "Marcher" #: src/guiKeyChangeMenu.cpp:404 msgid "Drop" -msgstr "Lâcher" +msgstr "Jeter" #: src/guiKeyChangeMenu.cpp:405 msgid "Inventory" @@ -612,7 +609,7 @@ msgstr "Inventaire" #: src/guiKeyChangeMenu.cpp:406 msgid "Chat" -msgstr "Messagerie" +msgstr "Chatter" #: src/guiKeyChangeMenu.cpp:407 msgid "Command" @@ -632,11 +629,11 @@ msgstr "Mode rapide" #: src/guiKeyChangeMenu.cpp:411 msgid "Toggle noclip" -msgstr "Mode noclip" +msgstr "Mode sans collision" #: src/guiKeyChangeMenu.cpp:412 msgid "Range select" -msgstr "Distance de rendu" +msgstr "Distance d'affichage" #: src/guiKeyChangeMenu.cpp:413 msgid "Print stacks" @@ -728,7 +725,7 @@ msgstr "Pause" #: src/keycode.cpp:226 msgid "Shift" -msgstr "Majuscule" +msgstr "Shift" #: src/keycode.cpp:227 msgid "Convert" @@ -892,11 +889,11 @@ msgstr "Verr. défilement" #: src/keycode.cpp:241 msgid "Left Shift" -msgstr "Majuscule gauche" +msgstr "Shift gauche" #: src/keycode.cpp:241 msgid "Right Shift" -msgstr "Majuscule droite" +msgstr "Shift droite" #: src/keycode.cpp:242 msgid "Left Control" From fa53bb77d94246ec262a66aeb8b851ee0812f1e4 Mon Sep 17 00:00:00 2001 From: Tae Lim Kook Date: Wed, 8 Jul 2015 23:33:04 +0200 Subject: [PATCH 204/670] Translated using Weblate (Japanese) Currently translated at 100.0% (264 of 264 strings) --- po/ja/minetest.po | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index b93c672f1..15e731fd3 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,14 +3,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-03-23 02:38+0900\n" -"PO-Revision-Date: 2015-02-22 10:57+0900\n" -"Last-Translator: Rui\n" -"Language-Team: Minetest JP\n" +"PO-Revision-Date: 2015-07-08 23:33+0200\n" +"Last-Translator: Tae Lim Kook \n" +"Language-Team: Japanese " +"\n" "Language: ja\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 2.4-dev\n" #: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -92,7 +94,7 @@ msgstr "ゲームがインストールされていません。" #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "minetest.netから再ダウンロードしてください。" +msgstr "minetest.netから再ダウンロードしてください" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." @@ -100,15 +102,15 @@ msgstr "警告:Minimal development testは開発者のためのゲームです #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください。" +msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" -msgstr "ワールド名\"$1\"はすでに使用されています。" +msgstr "ワールド名\"$1\"はすでに使用されています" #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" -msgstr "ワールド名が入力されていないか、ゲームが選択されていません。" +msgstr "ワールド名が入力されていないか、ゲームが選択されていません" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" From a2f35da6b62f3d82afcabdaf9f9ba561919ca109 Mon Sep 17 00:00:00 2001 From: Tae Lim Kook Date: Wed, 8 Jul 2015 23:31:00 +0200 Subject: [PATCH 205/670] Translated using Weblate (Korean) Currently translated at 1.7% (4 of 235 strings) --- po/ko/minetest.po | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/po/ko/minetest.po b/po/ko/minetest.po index 26117589b..5eef8cd9a 100644 --- a/po/ko/minetest.po +++ b/po/ko/minetest.po @@ -3,23 +3,25 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"PO-Revision-Date: 2015-07-08 23:30+0200\n" +"Last-Translator: Tae Lim Kook \n" +"Language-Team: Korean " +"\n" +"Language: ko\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 2.4-dev\n" #: builtin/fstk/ui.lua:67 msgid "Ok" -msgstr "" +msgstr "확인" #: builtin/mainmenu/dlg_config_world.lua:26 msgid "World:" @@ -45,14 +47,14 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 msgid "Save" -msgstr "" +msgstr "저장" #: builtin/mainmenu/dlg_config_world.lua:52 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 #: src/keycode.cpp:224 msgid "Cancel" -msgstr "" +msgstr "취소" #: builtin/mainmenu/dlg_config_world.lua:68 msgid "Enable MP" From f4667dfd265a19566e4174049f19040565d45cc1 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 9 Jul 2015 15:56:35 +0200 Subject: [PATCH 206/670] Translated using Weblate (Japanese) Currently translated at 100.0% (264 of 264 strings) --- po/ja/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index 15e731fd3..035cfe9b1 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-03-23 02:38+0900\n" -"PO-Revision-Date: 2015-07-08 23:33+0200\n" -"Last-Translator: Tae Lim Kook \n" +"PO-Revision-Date: 2015-07-09 15:56+0200\n" +"Last-Translator: sfan5 \n" "Language-Team: Japanese " "\n" "Language: ja\n" @@ -430,7 +430,7 @@ msgstr "レンダリング:" #: builtin/mainmenu/tab_settings.lua:205 msgid "Restart minetest for driver change to take effect" -msgstr "ドライバーを変更するためMinetesを再起動します" +msgstr "ドライバーを変更するためMinetestを再起動します" #: builtin/mainmenu/tab_settings.lua:207 msgid "Shaders" From 5c7b7caec9656ea3bd3239dae70af15453b2a09e Mon Sep 17 00:00:00 2001 From: Rui Date: Sat, 11 Jul 2015 13:46:56 +0200 Subject: [PATCH 207/670] Translated using Weblate (Japanese) Currently translated at 100.0% (264 of 264 strings) --- po/ja/minetest.po | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index 035cfe9b1..af208b8b2 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -94,7 +94,7 @@ msgstr "ゲームがインストールされていません。" #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "minetest.netから再ダウンロードしてください" +msgstr "minetest.netから再ダウンロードしてください。" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." @@ -102,15 +102,15 @@ msgstr "警告:Minimal development testは開発者のためのゲームです #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください" +msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください。" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" -msgstr "ワールド名\"$1\"はすでに使用されています" +msgstr "ワールド名\"$1\"はすでに使用されています。" #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" -msgstr "ワールド名が入力されていないか、ゲームが選択されていません" +msgstr "ワールド名が入力されていないか、ゲームが選択されていません。" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" @@ -168,9 +168,7 @@ msgstr "$2へ$1をインストールできませんでした。" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "" -"Modインストール:Modパック$1に適したフォルダ名を見つけることができませんでし" -"た。" +msgstr "Modインストール:Modパック$1に適したフォルダ名を見つけることができませんでした。" #: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" @@ -430,7 +428,7 @@ msgstr "レンダリング:" #: builtin/mainmenu/tab_settings.lua:205 msgid "Restart minetest for driver change to take effect" -msgstr "ドライバーを変更するためMinetestを再起動します" +msgstr "ドライバーを変更するためMinetesを再起動します" #: builtin/mainmenu/tab_settings.lua:207 msgid "Shaders" From b4f166fb45c13a47c80db99d858c640e921b5675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 14 Jul 2015 16:48:28 +0200 Subject: [PATCH 208/670] Translated using Weblate (Turkish) Currently translated at 100.0% (269 of 269 strings) --- po/tr/minetest.po | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 8252bc6b4..6a683f4d3 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: 0.1.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-03-04 14:450200\n" -"PO-Revision-Date: 2015-03-22 23:56+0200\n" -"Last-Translator: Mahmut Elmas mahmutelmas06@gmail.com\n" -"Language-Team: Türkçe <>\n" +"PO-Revision-Date: 2015-07-14 16:48+0200\n" +"Last-Translator: Michal Čihař \n" +"Language-Team: Turkish " +"\n" "Language: tr\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: Eazy Po 0.9.5.3\n" +"X-Generator: Weblate 2.4-dev\n" "X-Poedit-Language: Turkish\n" "X-Poedit-Basepath: \n" @@ -48,7 +49,7 @@ msgstr "Detayları gizle" #, approved #| msgid "Mod:" msgid "Mod:" -msgstr "Eklnt: " +msgstr "Eklnt:" #: builtin/mainmenu/dlg_config_world.lua:48 #, approved From 2c359da8365fd7816f8dbf341af2d311c4af52ab Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 17 Jul 2015 07:24:10 +0200 Subject: [PATCH 209/670] Run updatepo.sh --- po/be/minetest.po | 669 ++++++++++++++++----------- po/cs/minetest.po | 690 +++++++++++++++------------- po/da/minetest.po | 839 ++++++++++++++++++++-------------- po/de/minetest.po | 679 +++++++++++++++------------- po/es/minetest.po | 488 +++++++++++--------- po/et/minetest.po | 910 ++++++++++++++++++++++--------------- po/fr/minetest.po | 1020 ++++++++++++++++++++++++------------------ po/hu/minetest.po | 900 +++++++++++++++++++++---------------- po/id/minetest.po | 707 ++++++++++++++++++----------- po/it/minetest.po | 905 +++++++++++++++++++++---------------- po/ja/minetest.po | 454 ++++++++++--------- po/ko/minetest.po | 673 +++++++++++++++++----------- po/ky/minetest.po | 864 ++++++++++++++++++++--------------- po/lt/minetest.po | 794 +++++++++++++++++++------------- po/minetest.pot | 440 +++++++++--------- po/nb/minetest.po | 707 ++++++++++++++++++----------- po/nl/minetest.po | 1014 +++++++++++++++++++++++------------------ po/pl/minetest.po | 1016 +++++++++++++++++++++++------------------ po/pt/minetest.po | 968 ++++++++++++++++++++++----------------- po/pt_BR/minetest.po | 957 ++++++++++++++++++++++----------------- po/ro/minetest.po | 890 ++++++++++++++++++++---------------- po/ru/minetest.po | 954 ++++++++++++++++++++++----------------- po/tr/minetest.po | 897 ++++++++++++++----------------------- po/uk/minetest.po | 886 +++++++++++++++++++++--------------- po/zh_CN/minetest.po | 959 ++++++++++++++++++++++----------------- 25 files changed, 11603 insertions(+), 8677 deletions(-) diff --git a/po/be/minetest.po b/po/be/minetest.po index 0e60035a0..daddc00ac 100644 --- a/po/be/minetest.po +++ b/po/be/minetest.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-11-23 17:37+0100\n" "Last-Translator: Selat \n" "Language-Team: Belarusian\n" @@ -15,57 +15,73 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "" @@ -105,7 +121,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "" @@ -119,7 +135,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "" @@ -147,29 +163,29 @@ msgstr "" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -177,47 +193,39 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 msgid "Shortname:" msgstr "" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -225,15 +233,19 @@ msgstr "" msgid "Credits" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -274,12 +286,11 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +msgid "Name / Password :" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -288,7 +299,7 @@ msgid "Public Serverlist" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "" @@ -297,15 +308,30 @@ msgstr "" msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "" @@ -313,17 +339,18 @@ msgstr "" msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "" @@ -331,6 +358,10 @@ msgstr "" msgid "Public" msgstr "" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -343,143 +374,172 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "" @@ -495,50 +555,181 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "" + +#: src/game.cpp:1073 msgid "Respawn" msgstr "" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +msgid "Change Keys" +msgstr "" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" +#: src/guiFormSpecMenu.cpp:2855 +msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2846 -msgid "Enter " +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" msgstr "" #: src/guiKeyChangeMenu.cpp:125 @@ -553,422 +744,398 @@ msgstr "" msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "" - -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "" - -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" - -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "" diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 563275b01..4fcaab18a 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-12 13:13+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-02-12 16:16+0100\n" "Last-Translator: Jakub Vanek \n" "Language-Team: Czech <>\n" @@ -17,57 +17,73 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Nahrávám..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Svět:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Skrýt vnitřní" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Skrýt obsahy balíčků" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Závislosti:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Uložit" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Zrušit" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Povolit balíček" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Zakázat balíček" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "povoleno" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Povolit vše" @@ -107,7 +123,7 @@ msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývoj msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "Stáhněte si z minetest.net podhru, například minetest_game." -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Svět s názvem \"$1\" už existuje" @@ -121,7 +137,7 @@ msgstr "Skutečně chcete odstranit \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ano" @@ -149,15 +165,15 @@ msgstr "Ne" msgid "Rename Modpack:" msgstr "Přejmenovat balíček modů:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Přijmout" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Instalace modu: ze souboru: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -165,15 +181,16 @@ msgstr "" "\n" "Instalace modu: špatný archiv nebo nepodporovaný typ souboru \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Selhala instalace $1 do $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" +msgstr "" +"Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Instalace modu: nenašel jsem skutečné jméno modu: $1" @@ -221,15 +238,20 @@ msgstr "Strana $1 z $2" msgid "Credits" msgstr "Autoři" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Vývojáři jádra" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Aktivní přispěvatelé" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Vývojáři jádra" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Bývalí přispěvatelé" @@ -283,7 +305,7 @@ msgid "Public Serverlist" msgstr "Seznam veřejných serverů" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Smazat" @@ -307,15 +329,15 @@ msgstr "Poškození povoleno" msgid "PvP enabled" msgstr "PvP povoleno" -#: builtin/mainmenu/tab_multiplayer.lua:247 +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Klient" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nový" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Nastavit" @@ -323,17 +345,18 @@ msgstr "Nastavit" msgid "Start Game" msgstr "Spustit hru" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Vyber svět:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:75 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Kreativní mód" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:77 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Povolit poškození" @@ -357,163 +380,176 @@ msgstr "Port" msgid "Server Port" msgstr "Port serveru" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Nebyla vybrána podhra nebo název" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Neprůhledná voda" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "Vlnění listů" + +#: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Ozdobné stromy" + +#: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" msgstr "Žádný filtr" -#: builtin/mainmenu/tab_settings.lua:22 +#: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" msgstr "Bilineární filtr" -#: builtin/mainmenu/tab_settings.lua:23 +#: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" msgstr "Trilineární filtr" -#: builtin/mainmenu/tab_settings.lua:32 +#: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" msgstr "Žádné Mipmapy" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" msgstr "Mipmapa" -#: builtin/mainmenu/tab_settings.lua:34 +#: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" msgstr "Mipmapa + Anizo. filtr" -#: builtin/mainmenu/tab_settings.lua:77 +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "Jste si jisti, že chcete resetovat místní svět?" -#: builtin/mainmenu/tab_settings.lua:81 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "Ne!!!" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Plynulé osvětlení" -#: builtin/mainmenu/tab_settings.lua:183 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Povolit částice" -#: builtin/mainmenu/tab_settings.lua:185 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D mraky" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "Ozdobné stromy" - -#: builtin/mainmenu/tab_settings.lua:189 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Neprůhledná voda" -#: builtin/mainmenu/tab_settings.lua:191 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "Propojené sklo" -#: builtin/mainmenu/tab_settings.lua:193 +#: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "Zvýraznění bloků" -#: builtin/mainmenu/tab_settings.lua:196 +#: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "Texturování:" -#: builtin/mainmenu/tab_settings.lua:201 +#: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "Renderování:" -#: builtin/mainmenu/tab_settings.lua:205 +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "Aby se změna ovladače projevila, restartujte Minetest." -#: builtin/mainmenu/tab_settings.lua:207 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shadery" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Změnit nastavení kláves" -#: builtin/mainmenu/tab_settings.lua:215 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "Reset místního světa" -#: builtin/mainmenu/tab_settings.lua:219 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "Měřítko GUI" -#: builtin/mainmenu/tab_settings.lua:223 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "Měřítko aplikované na prvky menu: " -#: builtin/mainmenu/tab_settings.lua:229 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "Středový kurzor" -#: builtin/mainmenu/tab_settings.lua:235 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "Dosah dotyku (px)" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "Bump mapování" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "Generovat normálové mapy" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "Vlnění vody" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "Vlnění listů" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "Vlnění rostlin" -#: builtin/mainmenu/tab_settings.lua:287 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Pro povolení shaderů musíte používat OpenGL ovladač." -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Nastavení" -#: builtin/mainmenu/tab_simple_main.lua:79 -msgid "Fly mode" -msgstr "Létací režim" - -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "Start místní hry" -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "Nastavení modů" -#: builtin/mainmenu/tab_simple_main.lua:203 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "Hlavní nabídka" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Hrát" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Místní hra" @@ -529,43 +565,77 @@ msgstr "Informace nejsou dostupné" msgid "Texturepacks" msgstr "Balíčky textur" -#: src/client.cpp:2788 +#: src/client.cpp:1721 msgid "Loading textures..." msgstr "Načítám textury..." -#: src/client.cpp:2798 +#: src/client.cpp:1736 msgid "Rebuilding shaders..." msgstr "Sestavuji shadery..." -#: src/client.cpp:2805 +#: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "Inicializuji bloky..." -#: src/client.cpp:2820 +#: src/client.cpp:1760 +#, fuzzy +msgid "Initializing nodes" +msgstr "Inicializuji bloky..." + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Textury věcí..." -#: src/client.cpp:2845 +#: src/client.cpp:1793 msgid "Done!" msgstr "Hotovo!" +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Hlavní nabídka" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "Jméno hráče je příliš dlouhé." + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Chyba spojení (vypršel čas?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "Uvedená cesta ke světu neexistuje: " + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Hru nebylo možné nahrát nebo najít \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Neplatná specifikace hry." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1057 src/guiFormSpecMenu.cpp:2006 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "Pokračovat" -#: src/game.cpp:1077 +#: src/game.cpp:1072 msgid "You died." msgstr "Zemřel jsi." -#: src/game.cpp:1078 +#: src/game.cpp:1073 msgid "Respawn" msgstr "Znovu stvořit" -#: src/game.cpp:1097 +#: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" @@ -593,7 +663,7 @@ msgstr "" "- stisk a přesun, klik druhým prstem\n" " --> umístit samostatnou věc do přihrádky\n" -#: src/game.cpp:1111 +#: src/game.cpp:1106 msgid "" "Default Controls:\n" "- WASD: move\n" @@ -619,75 +689,71 @@ msgstr "" "- Myš(kolečko): vybrat přihrádku\n" "- T: chat\n" -#: src/game.cpp:1130 +#: src/game.cpp:1125 msgid "Continue" msgstr "Pokračovat" -#: src/game.cpp:1134 +#: src/game.cpp:1129 msgid "Change Password" msgstr "Změnit heslo" -#: src/game.cpp:1139 +#: src/game.cpp:1134 msgid "Sound Volume" msgstr "Hlasitost" -#: src/game.cpp:1141 +#: src/game.cpp:1136 msgid "Change Keys" msgstr "Změnit klávesy" -#: src/game.cpp:1144 +#: src/game.cpp:1139 msgid "Exit to Menu" msgstr "Odejít do nabídky" -#: src/game.cpp:1146 +#: src/game.cpp:1141 msgid "Exit to OS" msgstr "Ukončit hru" -#: src/game.cpp:1809 +#: src/game.cpp:1841 msgid "Shutting down..." msgstr "Vypínání..." -#: src/game.cpp:1858 -msgid "Loading..." -msgstr "Nahrávám..." - -#: src/game.cpp:1915 +#: src/game.cpp:1948 msgid "Creating server..." msgstr "Vytvářím server..." -#: src/game.cpp:1952 +#: src/game.cpp:1984 msgid "Creating client..." msgstr "Vytvářím klienta..." -#: src/game.cpp:2125 +#: src/game.cpp:2159 msgid "Resolving address..." msgstr "Překládám adresu..." -#: src/game.cpp:2216 +#: src/game.cpp:2261 msgid "Connecting to server..." msgstr "Připojuji se k serveru..." -#: src/game.cpp:2274 +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definice věcí..." -#: src/game.cpp:2279 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definice bloků..." -#: src/game.cpp:2286 +#: src/game.cpp:2329 msgid "Media..." msgstr "Média..." -#: src/game.cpp:2291 -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2295 -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4210 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -695,17 +761,18 @@ msgstr "" "\n" "Pro detaily se podívejte do debug.txt." -#: src/guiFormSpecMenu.cpp:2797 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Zadejte " -#: src/guiFormSpecMenu.cpp:2817 +#: src/guiFormSpecMenu.cpp:2875 msgid "ok" msgstr "OK" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z " +msgstr "" +"Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z " "minetest.conf)" #: src/guiKeyChangeMenu.cpp:165 @@ -716,79 +783,84 @@ msgstr "\"Použít\" = slézt dolů" msgid "Double tap \"jump\" to toggle fly" msgstr "Dvojstisk klávesy \"skok\" zapne létání" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Klávesa je již používána" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "stiskni klávesu" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Vpřed" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Vzad" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Doleva" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Doprava" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Použít" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Skok" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Plížit se" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Zahodit" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventář" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chat" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Příkaz" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konzole" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Létání" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Turbo" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Turbo" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Duch" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Změna dohledu" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Vypsat hromádky" @@ -812,407 +884,389 @@ msgstr "Změnit" msgid "Passwords do not match!" msgstr "Hesla se neshodují!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Hlasitost: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Odejít" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Levé tlačítko myši" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Prostřední tlačítko myši" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Pravé tlačítko myši" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X Tlačítko 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Zpět" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Vyčistit" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Vrátit" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulátor" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Tlačítko 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Klávesa velkého písmene" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Nabídka" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pauza" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Změna režimu" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Další" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Předchozí" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Mezerník" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Dolů" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Spustit" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print Screen" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Vybrat" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Nahoru" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Pomoc" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Snapshot" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Levá klávesa Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Aplikace" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numerická klávesnice: 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numerická klávesnice: 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Pravá klávesa Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Spánek" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numerická klávesnice: 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numerická klávesnice: 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numerická klávesnice: 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numerická klávesnice: 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numerická klávesnice: 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numerická klávesnice: 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numerická klávesnice: *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numerická klávesnice: +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numerická klávesnice: -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numerická klávesnice: /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numerická klávesnice: 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numerická klávesnice: 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Levý Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Pravý Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Levý Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Levá klávesa Menu" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Pravý Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Pravá klávesa Menu" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Čárka" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Mínus" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Tečka" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Smazat EOF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Přiblížení" -#: src/main.cpp:1688 -msgid "Main Menu" -msgstr "Hlavní nabídka" - -#: src/main.cpp:1726 -msgid "Player name too long." -msgstr "Jméno hráče je příliš dlouhé." - -#: src/main.cpp:1764 -msgid "Connection error (timed out?)" -msgstr "Chyba spojení (vypršel čas?)" - -#: src/main.cpp:1929 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat." - -#: src/main.cpp:1936 -msgid "Provided world path doesn't exist: " -msgstr "Uvedená cesta ke světu neexistuje: " - -#: src/main.cpp:1945 -msgid "Could not find or load game \"" -msgstr "Hru nebylo možné nahrát nebo najít \"" - -#: src/main.cpp:1963 -msgid "Invalid gamespec." -msgstr "Neplatná specifikace hry." - -msgid "Downloading" -msgstr "Stahuji" - -#~ msgid "Game Name" -#~ msgstr "Název hry" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\"" - -#~ msgid "GAMES" -#~ msgstr "HRY" - -#~ msgid "Games" -#~ msgstr "Hry" - -#~ msgid "Mods:" -#~ msgstr "Mody:" - -#~ msgid "edit game" -#~ msgstr "upravit hru" - -#~ msgid "new game" -#~ msgstr "nová hra" - -#~ msgid "EDIT GAME" -#~ msgstr "UPRAVIT HRU" - -#~ msgid "Remove selected mod" -#~ msgstr "Odstranit vybraný mod" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Přidat mod" - -#~ msgid "CLIENT" -#~ msgstr "KLIENT" - -#~ msgid "Favorites:" -#~ msgstr "Oblíbené:" - -#~ msgid "START SERVER" -#~ msgstr "MÍSTNÍ SERVER" - -#~ msgid "Name" -#~ msgstr "Jméno" - -#~ msgid "Password" -#~ msgstr "Heslo" - -#~ msgid "SETTINGS" -#~ msgstr "NASTAVENÍ" - -#~ msgid "Preload item visuals" -#~ msgstr "Přednačíst textury předmětů" - -#~ msgid "Finite Liquid" -#~ msgstr "Konečná voda" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "HRA JEDNOHO HRÁČE" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "BALÍČKY TEXTUR" - -#~ msgid "MODS" -#~ msgstr "MODY" - -#~ msgid "Add mod:" -#~ msgstr "Přidat mod:" - -#~ msgid "Local install" -#~ msgstr "Místní instalace" - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapování" #~ msgid "Anisotropic Filtering" #~ msgstr "Anizotropní filtrování" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapování" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "" +#~ "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět" + +#~ msgid "Local install" +#~ msgstr "Místní instalace" + +#~ msgid "Add mod:" +#~ msgstr "Přidat mod:" + +#~ msgid "MODS" +#~ msgstr "MODY" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "BALÍČKY TEXTUR" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "HRA JEDNOHO HRÁČE" + +#~ msgid "Finite Liquid" +#~ msgstr "Konečná voda" + +#~ msgid "Preload item visuals" +#~ msgstr "Přednačíst textury předmětů" + +#~ msgid "SETTINGS" +#~ msgstr "NASTAVENÍ" + +#~ msgid "Password" +#~ msgstr "Heslo" + +#~ msgid "Name" +#~ msgstr "Jméno" + +#~ msgid "START SERVER" +#~ msgstr "MÍSTNÍ SERVER" + +#~ msgid "Favorites:" +#~ msgstr "Oblíbené:" + +#~ msgid "CLIENT" +#~ msgstr "KLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Přidat mod" + +#~ msgid "Remove selected mod" +#~ msgstr "Odstranit vybraný mod" + +#~ msgid "EDIT GAME" +#~ msgstr "UPRAVIT HRU" + +#~ msgid "new game" +#~ msgstr "nová hra" + +#~ msgid "edit game" +#~ msgstr "upravit hru" + +#~ msgid "Mods:" +#~ msgstr "Mody:" + +#~ msgid "Games" +#~ msgstr "Hry" + +#~ msgid "GAMES" +#~ msgstr "HRY" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Název hry" + +#~ msgid "Downloading" +#~ msgstr "Stahuji" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Fly mode" +#~ msgstr "Létací režim" diff --git a/po/da/minetest.po b/po/da/minetest.po index 35bce6c90..8405261b2 100644 --- a/po/da/minetest.po +++ b/po/da/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-02-17 00:41+0200\n" "Last-Translator: Rune Biskopstö Christensen \n" "Language-Team: \n" @@ -18,62 +18,78 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 #, fuzzy msgid "World:" msgstr "Vælg verden:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 #, fuzzy msgid "Hide Game" msgstr "Spil" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 #, fuzzy msgid "Depends:" msgstr "afhænger af:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Gem" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Anuller" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Aktivér alle" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Deaktivér alle" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "aktiveret" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Aktivér alle" @@ -114,7 +130,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Kan ikke skabe verden: en verden med dette navn eksisterer allerede" @@ -129,7 +145,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ja" @@ -158,30 +174,30 @@ msgstr "Nej" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Accepter" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 #, fuzzy msgid "Failed to install $1 to $2" msgstr "Mislykkedes i at initialisere verden" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -189,49 +205,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Ned" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Verdens navn" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -239,15 +246,19 @@ msgstr "" msgid "Credits" msgstr "Skabt af" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -289,12 +300,13 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Adresse/port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Navn/kodeord" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -303,7 +315,7 @@ msgid "Public Serverlist" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Slet" @@ -312,15 +324,33 @@ msgstr "Slet" msgid "Connect" msgstr "Forbind" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Kreativ tilstand" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "aktiveret" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "aktiveret" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Ny" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Konfigurér" @@ -329,17 +359,18 @@ msgstr "Konfigurér" msgid "Start Game" msgstr "Start spil / Forbind" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Vælg verden:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Kreativ tilstand" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Aktivér skade" @@ -348,6 +379,10 @@ msgstr "Aktivér skade" msgid "Public" msgstr "Vis offentlig" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Navn/kodeord" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -360,151 +395,183 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Opakt (uigennemsigtigt) vand" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "\"Smarte\" træer" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Bi-lineær filtréring" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-lineær filtréring" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Glat belysning" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Aktivér partikler" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D skyer" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "\"Smarte\" træer" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 #, fuzzy msgid "Opaque Water" msgstr "Opakt (uigennemsigtigt) vand" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Forbind" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotropisk filtréring" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-lineær filtréring" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-lineær filtréring" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shadere" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Skift bindinger" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Enligspiller" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Indstillinger" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Enligspiller" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Konfigurér" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Hovedmenu" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Afspil" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Enligspiller" @@ -520,39 +587,171 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Hovedmenu" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Kunne ikke finde eller indlæse spil \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Ugyldig spilspecifikationer." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Fortsæt" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Du døde." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Genopstå" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Fortsæt" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Skift kodeord" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Skift bindinger" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Afslut til menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Afslut til operativsystemet" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -560,14 +759,14 @@ msgstr "" "\n" "Tjek debug.txt for detaljer." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Fortsæt" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -584,479 +783,441 @@ msgstr "" "Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-" "tilstand" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Tast allerede i brug" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "Tryk på en tast" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Fremad" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Baglæns" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Venstre" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Højre" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Brug" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Hop" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Snige" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Slip" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Beholdning" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Snak" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Kommando" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konsol" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Omstil flyvning" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Omstil hurtig" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Omstil hurtig" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Omstil fylde" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Afstands vælg" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Udskriv stakke" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Gammelt kodeord" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Nyt kodeord" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Bekræft kodeord" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Skift" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Kodeordene er ikke ens!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Venstre knap" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Midterste knap" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Højre knap" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X knap 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Tilbage" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Ryd" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulator" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X knap 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 #, fuzzy msgid "Capital" msgstr "Store bogstaver" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pause" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Konvertér" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Endelig" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Tilstandsskift" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Næste" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Foregående" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Mellemrum" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Ned" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Eksekvér" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Udskriv" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Vælg" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Op" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Hjælp" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 #, fuzzy msgid "Snapshot" msgstr "Tilstandsbillede" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Venstre meta" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 #, fuzzy msgid "Apps" msgstr "Applikationer" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Højre meta" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sov" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Venstre Skift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Højre Skift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Venstre Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Venstre Menu" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Højre Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Højre Menu" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Komma" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Minus" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punktum" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Giv agt" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Udvisk Slut-På-Fil" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Ryd" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Hovedmenu" +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Spil" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#, fuzzy +#~ msgid "Games" +#~ msgstr "Spil" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Kunne ikke finde eller indlæse spil \"" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Ugyldig spilspecifikationer." - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed" - -#~ msgid "is required by:" -#~ msgstr "er påkrævet af:" - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguration gemt. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver" - -#~ msgid "Multiplayer" -#~ msgstr "Flerspiller" - -#~ msgid "Advanced" -#~ msgstr "Avanceret" - -#~ msgid "Show Public" -#~ msgstr "Vis offentlig" - -#~ msgid "Show Favorites" +#, fuzzy +#~ msgid "Favorites:" #~ msgstr "Vis favoritter" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server." +#, fuzzy +#~ msgid "Password" +#~ msgstr "Gammelt kodeord" -#~ msgid "Create world" -#~ msgstr "Skab verden" +#~ msgid "Preload item visuals" +#~ msgstr "For-indlæs elementernes grafik" -#~ msgid "Address required." -#~ msgstr "Adresse påkrævet." +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n" +#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. " -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kan ikke slette verden: ingenting valgt" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n" +#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. " -#~ msgid "Files to be deleted" -#~ msgstr "Filer som slettes" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kan ikke skabe verden: ingen spil fundet" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kan ikke konfigurere verden: ingenting valgt" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Mislykkedes i at slette alle verdenens filer" +#~ msgid "Delete map" +#~ msgstr "Slet mappen" #~ msgid "" #~ "Default Controls:\n" @@ -1083,53 +1244,63 @@ msgstr "Ugyldig spilspecifikationer." #~ "- ESC: denne menu\n" #~ "- T: snak\n" -#~ msgid "Delete map" -#~ msgstr "Slet mappen" +#~ msgid "Failed to delete all world files" +#~ msgstr "Mislykkedes i at slette alle verdenens filer" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n" -#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kan ikke konfigurere verden: ingenting valgt" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n" -#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. " +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kan ikke skabe verden: ingen spil fundet" -#~ msgid "Exit to OS" -#~ msgstr "Afslut til operativsystemet" +#~ msgid "Files to be deleted" +#~ msgstr "Filer som slettes" -#~ msgid "Exit to Menu" -#~ msgstr "Afslut til menu" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kan ikke slette verden: ingenting valgt" -#~ msgid "Change Password" -#~ msgstr "Skift kodeord" +#~ msgid "Address required." +#~ msgstr "Adresse påkrævet." -#~ msgid "Continue" -#~ msgstr "Fortsæt" +#~ msgid "Create world" +#~ msgstr "Skab verden" -#~ msgid "You died." -#~ msgstr "Du døde." +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server." -#~ msgid "Preload item visuals" -#~ msgstr "For-indlæs elementernes grafik" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Gammelt kodeord" - -#, fuzzy -#~ msgid "Favorites:" +#~ msgid "Show Favorites" #~ msgstr "Vis favoritter" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Spil" +#~ msgid "Show Public" +#~ msgstr "Vis offentlig" + +#~ msgid "Advanced" +#~ msgstr "Avanceret" + +#~ msgid "Multiplayer" +#~ msgstr "Flerspiller" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. " + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguration gemt. " + +#~ msgid "is required by:" +#~ msgstr "er påkrævet af:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotropisk filtréring" + +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-mapping" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Spil" +#~ msgid "Downloading" +#~ msgstr "Ned" diff --git a/po/de/minetest.po b/po/de/minetest.po index 4df3be6d7..ccf9132e6 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-14 16:32+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-03-16 15:50+0100\n" "Last-Translator: Wuzzy \n" "Language-Team: Deutsch <>\n" @@ -18,10 +18,26 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.7.1\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "OK" +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Laden ..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Welt:" @@ -44,14 +60,14 @@ msgstr "Mod:" msgid "Depends:" msgstr "Abhängig von:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Speichern" #: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200 -#: src/keycode.cpp:224 +#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Abbrechen" @@ -124,7 +140,7 @@ msgstr "„$1“ wirklich löschen?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ja" @@ -152,15 +168,15 @@ msgstr "Nein" msgid "Rename Modpack:" msgstr "Modpack umbenennen:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Annehmen" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Mod installieren: Datei: „$1“" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -168,17 +184,17 @@ msgstr "" "\n" "Mod installieren: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Fehler bei der Installation von $1 nach $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Mod installieren: Geeigneter Ordnername für Modpack $1 konnte nicht gefunden " "werden" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden" @@ -226,15 +242,20 @@ msgstr "Seite $1 von $2" msgid "Credits" msgstr "Mitwirkende" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Hauptentwickler" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Aktive Mitwirkende" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Hauptentwickler" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Frühere Mitwirkende" @@ -288,7 +309,7 @@ msgid "Public Serverlist" msgstr "Öffentliche Serverliste" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Entfernen" @@ -316,11 +337,11 @@ msgstr "Spielerkampf aktiviert" msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Neu" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Konfigurieren" @@ -328,17 +349,18 @@ msgstr "Konfigurieren" msgid "Start Game" msgstr "Spiel starten" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Welt wählen:" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Kreativmodus" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Schaden einschalten" @@ -362,163 +384,176 @@ msgstr "Port" msgid "Server Port" msgstr "Serverport" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Kein Weltname gegeben oder kein Spiel ausgewählt" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Undurchs. Wasser" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "Wehende Blätter" + +#: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Schöne Bäume" + +#: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" msgstr "Kein Filter" -#: builtin/mainmenu/tab_settings.lua:22 +#: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" msgstr "Bilinearer Filter" -#: builtin/mainmenu/tab_settings.lua:23 +#: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" msgstr "Trilinearer Filter" -#: builtin/mainmenu/tab_settings.lua:32 +#: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" msgstr "Keine Mipmap" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" msgstr "Mipmap" -#: builtin/mainmenu/tab_settings.lua:34 +#: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" msgstr "Mipmap u. Aniso. Filter" -#: builtin/mainmenu/tab_settings.lua:77 +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?" -#: builtin/mainmenu/tab_settings.lua:81 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "Nein!!!" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Besseres Licht" -#: builtin/mainmenu/tab_settings.lua:183 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Partikel aktivieren" -#: builtin/mainmenu/tab_settings.lua:185 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D-Wolken" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "Schöne Bäume" - -#: builtin/mainmenu/tab_settings.lua:189 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Undurchs. Wasser" -#: builtin/mainmenu/tab_settings.lua:191 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "Verbundenes Glas" -#: builtin/mainmenu/tab_settings.lua:193 +#: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "Blöcke hervorheben" -#: builtin/mainmenu/tab_settings.lua:196 +#: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "Texturierung:" -#: builtin/mainmenu/tab_settings.lua:201 +#: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "Rendering:" -#: builtin/mainmenu/tab_settings.lua:205 +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "Neustart nach Ändern des Treibers erforderlich" -#: builtin/mainmenu/tab_settings.lua:207 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shader" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Tasten ändern" -#: builtin/mainmenu/tab_settings.lua:215 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "Einzelspielerwelt zurücksetzen" -#: builtin/mainmenu/tab_settings.lua:219 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "GUI-Skalierfaktor" -#: builtin/mainmenu/tab_settings.lua:223 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "Auf Menüelemente angewandter Skalierfaktor: " -#: builtin/mainmenu/tab_settings.lua:229 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "Berührungsfreies Ziel" -#: builtin/mainmenu/tab_settings.lua:235 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "Berührungsempfindlichkeit (px)" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "Bumpmapping" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "Normalmaps generieren" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "Wasserwellen" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "Wehende Blätter" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "Wogende Pflanzen" -#: builtin/mainmenu/tab_settings.lua:287 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden." -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Einstellungen" -#: builtin/mainmenu/tab_simple_main.lua:80 -msgid "Fly mode" -msgstr "Flugmodus" - -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "Einzelspieler starten" -#: builtin/mainmenu/tab_simple_main.lua:85 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "Mods konfigurieren" -#: builtin/mainmenu/tab_simple_main.lua:208 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "Hauptmenü" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Spielen" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Einzelspieler" @@ -534,51 +569,56 @@ msgstr "Keine Informationen vorhanden" msgid "Texturepacks" msgstr "Texturpakete" -#: src/client.cpp:1563 +#: src/client.cpp:1721 msgid "Loading textures..." msgstr "Texturen laden ..." -#: src/client.cpp:1573 +#: src/client.cpp:1736 msgid "Rebuilding shaders..." msgstr "Shader wiederherstellen ..." -#: src/client.cpp:1580 +#: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "Blöcke initialisieren ..." -#: src/client.cpp:1595 +#: src/client.cpp:1760 +#, fuzzy +msgid "Initializing nodes" +msgstr "Blöcke initialisieren ..." + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Inventarbilder ..." -#: src/client.cpp:1620 +#: src/client.cpp:1793 msgid "Done!" msgstr "Fertig!" -#: src/client/clientlauncher.cpp:172 +#: src/client/clientlauncher.cpp:185 msgid "Main Menu" msgstr "Hauptmenü" -#: src/client/clientlauncher.cpp:210 +#: src/client/clientlauncher.cpp:223 msgid "Player name too long." msgstr "Spielername zu lang." -#: src/client/clientlauncher.cpp:248 +#: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" msgstr "Verbindungsfehler (Zeitüberschreitung?)" -#: src/client/clientlauncher.cpp:413 +#: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun." -#: src/client/clientlauncher.cpp:420 +#: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " msgstr "Angegebener Weltpfad existiert nicht: " -#: src/client/clientlauncher.cpp:429 +#: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" msgstr "Kann Spiel nicht finden/laden \"" -#: src/client/clientlauncher.cpp:447 +#: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "Ungültige Spielspezif." @@ -586,19 +626,19 @@ msgstr "Ungültige Spielspezif." msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1061 src/guiFormSpecMenu.cpp:2008 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "Fortsetzen" -#: src/game.cpp:1081 +#: src/game.cpp:1072 msgid "You died." msgstr "Sie sind gestorben." -#: src/game.cpp:1082 +#: src/game.cpp:1073 msgid "Respawn" msgstr "Wiederbeleben" -#: src/game.cpp:1101 +#: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" @@ -626,7 +666,7 @@ msgstr "" "- berühren u. ziehen, mit 2. Finger antippen\n" " --> 1 Gegenstand ins Feld platzieren\n" -#: src/game.cpp:1115 +#: src/game.cpp:1106 msgid "" "Default Controls:\n" "- WASD: move\n" @@ -652,75 +692,71 @@ msgstr "" "- Mausrad: Gegenstand auswählen\n" "- T: Chat\n" -#: src/game.cpp:1134 +#: src/game.cpp:1125 msgid "Continue" msgstr "Weiter" -#: src/game.cpp:1138 +#: src/game.cpp:1129 msgid "Change Password" msgstr "Passwort ändern" -#: src/game.cpp:1143 +#: src/game.cpp:1134 msgid "Sound Volume" msgstr "Tonlautstärke" -#: src/game.cpp:1145 +#: src/game.cpp:1136 msgid "Change Keys" msgstr "Tasten ändern" -#: src/game.cpp:1148 +#: src/game.cpp:1139 msgid "Exit to Menu" msgstr "Hauptmenü" -#: src/game.cpp:1150 +#: src/game.cpp:1141 msgid "Exit to OS" msgstr "Programm beenden" -#: src/game.cpp:1827 +#: src/game.cpp:1841 msgid "Shutting down..." msgstr "Herunterfahren ..." -#: src/game.cpp:1876 -msgid "Loading..." -msgstr "Laden ..." - -#: src/game.cpp:1933 +#: src/game.cpp:1948 msgid "Creating server..." msgstr "Server erstellen ..." -#: src/game.cpp:1970 +#: src/game.cpp:1984 msgid "Creating client..." msgstr "Client erstellen ..." -#: src/game.cpp:2143 +#: src/game.cpp:2159 msgid "Resolving address..." msgstr "Adresse auflösen ..." -#: src/game.cpp:2234 +#: src/game.cpp:2261 msgid "Connecting to server..." msgstr "Zum Server verbinden ..." -#: src/game.cpp:2292 +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Item-Definitionen ..." -#: src/game.cpp:2297 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Node-Definitionen ..." -#: src/game.cpp:2304 +#: src/game.cpp:2329 msgid "Media..." msgstr "Medien ..." -#: src/game.cpp:2309 -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2313 -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4265 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -728,104 +764,104 @@ msgstr "" "\n" "Siehe debug.txt für Details." -#: src/guiFormSpecMenu.cpp:2799 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Enter " -#: src/guiFormSpecMenu.cpp:2819 +#: src/guiFormSpecMenu.cpp:2875 msgid "ok" msgstr "OK" -#: src/guiKeyChangeMenu.cpp:126 +#: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Steuerung (Falls dieses Menü versagt, entfernen Sie Sachen aus minetest.conf)" -#: src/guiKeyChangeMenu.cpp:166 +#: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" msgstr "Benutzen = runterklettern" -#: src/guiKeyChangeMenu.cpp:181 +#: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" msgstr "2×Sprungtaste zum Fliegen" -#: src/guiKeyChangeMenu.cpp:297 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Taste bereits in Benutzung" -#: src/guiKeyChangeMenu.cpp:372 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "Taste drücken" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Vorwärts" -#: src/guiKeyChangeMenu.cpp:399 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Rückwärts" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Links" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Rechts" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Benutzen" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Springen" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Schleichen" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Wegwerfen" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventar" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chat" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Befehl" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konsole" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Flugmodus" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Schnellmodus" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" msgstr "Kinomodus" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Geistmodus" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Weite Sicht" -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Stack ausgeben" @@ -849,391 +885,361 @@ msgstr "Ändern" msgid "Passwords do not match!" msgstr "Passwörter passen nicht zusammen!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Tonlautstärke: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Zurück" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Linke Taste" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Mittlere Taste" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Rechte Taste" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X-Knopf 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Rücktaste" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Clear" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Eingabe" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X-Knopf 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Feststellen" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Strg" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menü" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pause" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Umsch." -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "Ende" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Pos1" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mode Change" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Bild runter" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Bild hoch" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Leertaste" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Runter" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Ausführen" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Druck" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Select" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Hoch" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Hilfe" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Einfg" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Druck" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Win links" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Ziffernblock 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Ziffernblock 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Win rechts" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Schlaf" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Ziffernblock 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Ziffernblock 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Ziffernblock 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Ziffernblock 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Ziffernblock 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Ziffernblock 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Ziffernblock *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Ziffernblock +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Ziffernblock -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Ziffernblock /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Ziffernblock 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Ziffernblock 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Rollen" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Umsch. links" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Umsch. rechts" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Strg links" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Alt" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Strg rechts" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Alt Gr" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Komma" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Minus" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punkt" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Spielname" +#~ msgid "Downloading" +#~ msgstr "Lade herunter" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" -#~ msgid "GAMES" -#~ msgstr "SPIELE" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotroper Filter" -#~ msgid "Games" -#~ msgstr "Spiele" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen" -#~ msgid "Mods:" -#~ msgstr "Mods:" +#~ msgid "is required by:" +#~ msgstr "wird benötigt von:" -#~ msgid "edit game" -#~ msgstr "Spiel ändern" +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguration gespeichert. " -#~ msgid "new game" -#~ msgstr "neues Spiel" +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Warnung: Konfiguration nicht konsistent. " -#~ msgid "EDIT GAME" -#~ msgstr "SPIEL ÄNDERN" +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen" -#~ msgid "Remove selected mod" -#~ msgstr "Ausgewählte Mod löschen" +#~ msgid "Multiplayer" +#~ msgstr "Mehrspieler" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Mod hinzufügen" +#~ msgid "Advanced" +#~ msgstr "Erweitert" -#~ msgid "CLIENT" -#~ msgstr "CLIENT" +#~ msgid "Show Public" +#~ msgstr "Zeige öffentliche" -#~ msgid "Favorites:" -#~ msgstr "Favoriten:" +#~ msgid "Show Favorites" +#~ msgstr "Zeige Favoriten" -#~ msgid "START SERVER" -#~ msgstr "SERVER STARTEN" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten." -#~ msgid "Name" -#~ msgstr "Name" +#~ msgid "Create world" +#~ msgstr "Welt erstellen" -#~ msgid "Password" -#~ msgstr "Passwort" +#~ msgid "Address required." +#~ msgstr "Adresse benötigt." -#~ msgid "SETTINGS" -#~ msgstr "EINSTELLUNGEN" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt" -#~ msgid "Preload item visuals" -#~ msgstr "Lade Inventarbilder vor" +#~ msgid "Files to be deleted" +#~ msgstr "Zu löschende Dateien" -#~ msgid "Finite Liquid" -#~ msgstr "Endliches Wasser" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden" -#~ msgid "SINGLE PLAYER" -#~ msgstr "EINZELSPIELER" +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt" -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTUREN PAKETE" - -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "Add mod:" -#~ msgstr "Modifikation hinzufügen:" - -#~ msgid "Local install" -#~ msgstr "Lokale Install." - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n" -#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. " - -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Warnung: Einige konfigurierte Mods fehlen.\n" -#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert " -#~ "wird. " - -#~ msgid "KEYBINDINGS" -#~ msgstr "TASTEN EINST." - -#~ msgid "Delete map" -#~ msgstr "Karte löschen" +#~ msgid "Failed to delete all world files" +#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden" #~ msgid "" #~ "Default Controls:\n" @@ -1259,62 +1265,101 @@ msgstr "Zoom" #~ "- I: Inventar\n" #~ "- T: Chat\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden" +#~ msgid "Delete map" +#~ msgstr "Karte löschen" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt" +#~ msgid "KEYBINDINGS" +#~ msgstr "TASTEN EINST." -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Warnung: Einige konfigurierte Mods fehlen.\n" +#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert " +#~ "wird. " -#~ msgid "Files to be deleted" -#~ msgstr "Zu löschende Dateien" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n" +#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. " -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt" +#~ msgid "Local install" +#~ msgstr "Lokale Install." -#~ msgid "Address required." -#~ msgstr "Adresse benötigt." +#~ msgid "Add mod:" +#~ msgstr "Modifikation hinzufügen:" -#~ msgid "Create world" -#~ msgstr "Welt erstellen" +#~ msgid "MODS" +#~ msgstr "MODS" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten." +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTUREN PAKETE" -#~ msgid "Show Favorites" -#~ msgstr "Zeige Favoriten" +#~ msgid "SINGLE PLAYER" +#~ msgstr "EINZELSPIELER" -#~ msgid "Show Public" -#~ msgstr "Zeige öffentliche" +#~ msgid "Finite Liquid" +#~ msgstr "Endliches Wasser" -#~ msgid "Advanced" -#~ msgstr "Erweitert" +#~ msgid "Preload item visuals" +#~ msgstr "Lade Inventarbilder vor" -#~ msgid "Multiplayer" -#~ msgstr "Mehrspieler" +#~ msgid "SETTINGS" +#~ msgstr "EINSTELLUNGEN" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen" +#~ msgid "Password" +#~ msgstr "Passwort" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Warnung: Konfiguration nicht konsistent. " +#~ msgid "Name" +#~ msgstr "Name" -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguration gespeichert. " +#~ msgid "START SERVER" +#~ msgstr "SERVER STARTEN" -#~ msgid "is required by:" -#~ msgstr "wird benötigt von:" +#~ msgid "Favorites:" +#~ msgstr "Favoriten:" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen" +#~ msgid "CLIENT" +#~ msgstr "CLIENT" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotroper Filter" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Mod hinzufügen" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid "Remove selected mod" +#~ msgstr "Ausgewählte Mod löschen" -#~ msgid "Downloading" -#~ msgstr "Lade herunter" +#~ msgid "EDIT GAME" +#~ msgstr "SPIEL ÄNDERN" + +#~ msgid "new game" +#~ msgstr "neues Spiel" + +#~ msgid "edit game" +#~ msgstr "Spiel ändern" + +#~ msgid "Mods:" +#~ msgstr "Mods:" + +#~ msgid "Games" +#~ msgstr "Spiele" + +#~ msgid "GAMES" +#~ msgstr "SPIELE" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren" + +#~ msgid "Game Name" +#~ msgstr "Spielname" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Fly mode" +#~ msgstr "Flugmodus" diff --git a/po/es/minetest.po b/po/es/minetest.po index 5f60213f2..6a8bc411e 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-14 13:50+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-02-14 13:35+0100\n" "Last-Translator: Diego de las Heras \n" "Language-Team: \n" @@ -18,57 +18,73 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.7.4\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Aceptar" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Cargando..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Mundo:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Ocultar juego" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Ocultar contenido mp" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Dependencias:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Guardar" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Activar paquete" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Desactivar paquete" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "Activado" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Activar todos" @@ -110,7 +126,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Ya existe un mundo llamado \"$1\"" @@ -124,7 +140,7 @@ msgstr "¿Realmente desea borrar \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Sí" @@ -152,15 +168,15 @@ msgstr "No" msgid "Rename Modpack:" msgstr "Renombrar paquete de mod:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Aceptar" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Instalar mod: Archivo: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -168,17 +184,17 @@ msgstr "" "\n" "Instalar mod: Formato de archivo \"$1\" no soportado o archivo corrupto" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Fallo al instalar $1 en $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalar mod: Imposible encontrar un nombre de archivo adecuado para el " "paquete de mod $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1" @@ -227,15 +243,20 @@ msgstr "Página $1 de $2" msgid "Credits" msgstr "Créditos" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Desarrolladores principales" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Colaboradores activos" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Desarrolladores principales" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Antiguos colaboradores" @@ -290,7 +311,7 @@ msgid "Public Serverlist" msgstr "Lista de servidores públicos" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Borrar" @@ -314,15 +335,15 @@ msgstr "Daño activado" msgid "PvP enabled" msgstr "PvP activado" -#: builtin/mainmenu/tab_multiplayer.lua:247 +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nuevo" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Configurar" @@ -330,17 +351,18 @@ msgstr "Configurar" msgid "Start Game" msgstr "Iniciar juego" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Selecciona un mundo:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:75 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Modo creativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:77 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Permitir daños" @@ -365,163 +387,176 @@ msgstr "Puerto" msgid "Server Port" msgstr "Puerto del servidor:" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Servidor" #: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Agua opaca" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "Movimiento de hojas" + +#: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Árboles detallados" + +#: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" msgstr "Sin filtro" -#: builtin/mainmenu/tab_settings.lua:22 +#: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" msgstr "Filtro bi-lineal" -#: builtin/mainmenu/tab_settings.lua:23 +#: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" msgstr "Filtro tri-lineal" -#: builtin/mainmenu/tab_settings.lua:32 +#: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" msgstr "Sin Mipmap" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" msgstr "Mipmap" -#: builtin/mainmenu/tab_settings.lua:34 +#: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" msgstr "Mipmap + Filtro aniso." -#: builtin/mainmenu/tab_settings.lua:77 +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?" -#: builtin/mainmenu/tab_settings.lua:81 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "¡¡¡No!!!" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Iluminación suave" -#: builtin/mainmenu/tab_settings.lua:183 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Habilitar partículas" -#: builtin/mainmenu/tab_settings.lua:185 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Nubes 3D" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "Árboles detallados" - -#: builtin/mainmenu/tab_settings.lua:189 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Agua opaca" -#: builtin/mainmenu/tab_settings.lua:191 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "Vidrios conectados" -#: builtin/mainmenu/tab_settings.lua:193 +#: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "Resaltar nodos" -#: builtin/mainmenu/tab_settings.lua:196 +#: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "Texturizado:" -#: builtin/mainmenu/tab_settings.lua:201 +#: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "Renderizado:" -#: builtin/mainmenu/tab_settings.lua:205 +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "Reinicia minetest para que los cambios en el controlador tengan efecto" -#: builtin/mainmenu/tab_settings.lua:207 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Sombreadores" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Configurar teclas" -#: builtin/mainmenu/tab_settings.lua:215 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "Reiniciar mundo de un jugador" -#: builtin/mainmenu/tab_settings.lua:219 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "Factor de escala (GUI)" -#: builtin/mainmenu/tab_settings.lua:223 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "Factor de escala aplicado a los elementos del menú: " -#: builtin/mainmenu/tab_settings.lua:229 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "Tocar para interactuar" -#: builtin/mainmenu/tab_settings.lua:235 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "Umbral táctil (px)" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "Mapeado de relieve" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "Generar mapas normales" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "Oclusión de paralaje" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "Oleaje en el agua" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "Movimiento de hojas" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "Movimiento de plantas" -#: builtin/mainmenu/tab_settings.lua:287 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL." -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Configuración" -#: builtin/mainmenu/tab_simple_main.lua:79 -msgid "Fly mode" -msgstr "Modo vuelo" - -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "Comenzar un jugador" -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "Configurar mods" -#: builtin/mainmenu/tab_simple_main.lua:203 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "Principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Jugar" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Un jugador" @@ -538,53 +573,58 @@ msgstr "Sin información disponible" msgid "Texturepacks" msgstr "Texturas" -#: src/client.cpp:2788 +#: src/client.cpp:1721 msgid "Loading textures..." msgstr "Cargando texturas..." -#: src/client.cpp:2798 +#: src/client.cpp:1736 msgid "Rebuilding shaders..." msgstr "Reconstruyendo sombreadores..." -#: src/client.cpp:2805 +#: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "Inicializando nodos..." -#: src/client.cpp:2820 +#: src/client.cpp:1760 +#, fuzzy +msgid "Initializing nodes" +msgstr "Inicializando nodos..." + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Texturas de objetos..." -#: src/client.cpp:2845 +#: src/client.cpp:1793 msgid "Done!" msgstr "¡Completado!" -#: src/client/clientlauncher.cpp:171 +#: src/client/clientlauncher.cpp:185 msgid "Main Menu" msgstr "Menú principal" -#: src/client/clientlauncher.cpp:209 +#: src/client/clientlauncher.cpp:223 msgid "Player name too long." msgstr "Nombre de jugador demasiado largo." -#: src/client/clientlauncher.cpp:247 +#: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" msgstr "Error de conexión (¿tiempo agotado?)" -#: src/client/clientlauncher.cpp:412 +#: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." msgstr "" "No se seleccionó el mundo y no se ha especificado una dirección. Nada que " "hacer." -#: src/client/clientlauncher.cpp:419 +#: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " msgstr "La ruta del mundo especificada no existe: " -#: src/client/clientlauncher.cpp:428 +#: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" msgstr "No se puede encontrar o cargar el juego \"" -#: src/client/clientlauncher.cpp:446 +#: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "Juego especificado no válido." @@ -592,19 +632,19 @@ msgstr "Juego especificado no válido." msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1057 src/guiFormSpecMenu.cpp:2006 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "Continuar" -#: src/game.cpp:1077 +#: src/game.cpp:1072 msgid "You died." msgstr "Has muerto." -#: src/game.cpp:1078 +#: src/game.cpp:1073 msgid "Respawn" msgstr "Revivir" -#: src/game.cpp:1097 +#: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" @@ -632,7 +672,7 @@ msgstr "" "- toque y arrastrar, toque con 2 dedos:\n" " -->colocar solamente un objeto\n" -#: src/game.cpp:1111 +#: src/game.cpp:1106 msgid "" "Default Controls:\n" "- WASD: move\n" @@ -658,75 +698,71 @@ msgstr "" "- Ratón rueda: elegir objeto\n" "- T: chat\n" -#: src/game.cpp:1130 +#: src/game.cpp:1125 msgid "Continue" msgstr "Continuar" -#: src/game.cpp:1134 +#: src/game.cpp:1129 msgid "Change Password" msgstr "Cambiar contraseña" -#: src/game.cpp:1139 +#: src/game.cpp:1134 msgid "Sound Volume" msgstr "Volumen del sonido" -#: src/game.cpp:1141 +#: src/game.cpp:1136 msgid "Change Keys" msgstr "Configurar teclas" -#: src/game.cpp:1144 +#: src/game.cpp:1139 msgid "Exit to Menu" msgstr "Salir al menú" -#: src/game.cpp:1146 +#: src/game.cpp:1141 msgid "Exit to OS" msgstr "Salir al S.O." -#: src/game.cpp:1809 +#: src/game.cpp:1841 msgid "Shutting down..." msgstr "Cerrando..." -#: src/game.cpp:1858 -msgid "Loading..." -msgstr "Cargando..." - -#: src/game.cpp:1915 +#: src/game.cpp:1948 msgid "Creating server..." msgstr "Creando servidor..." -#: src/game.cpp:1952 +#: src/game.cpp:1984 msgid "Creating client..." msgstr "Creando cliente..." -#: src/game.cpp:2125 +#: src/game.cpp:2159 msgid "Resolving address..." msgstr "Resolviendo dirección..." -#: src/game.cpp:2216 +#: src/game.cpp:2261 msgid "Connecting to server..." msgstr "Conectando al servidor..." -#: src/game.cpp:2274 +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definiciones de objetos..." -#: src/game.cpp:2279 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definiciones de nodos..." -#: src/game.cpp:2286 +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2291 -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2295 -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4210 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -734,11 +770,11 @@ msgstr "" "\n" "Consulta debug.txt para obtener más detalles." -#: src/guiFormSpecMenu.cpp:2797 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Ingresar " -#: src/guiFormSpecMenu.cpp:2817 +#: src/guiFormSpecMenu.cpp:2875 msgid "ok" msgstr "aceptar" @@ -756,79 +792,84 @@ msgstr "\"Usar\" = Descender" msgid "Double tap \"jump\" to toggle fly" msgstr "Pulsar dos veces \"saltar\" para volar" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "La tecla ya se está utilizando" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "pulsa una tecla" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Adelante" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Atrás" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Izquierda" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Derecha" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Usar" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Saltar" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Caminar" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Tirar" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventario" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chat" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Comando" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Consola" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Activar volar" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Activar rápido" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Activar rápido" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Activar noclip" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Seleccionar distancia" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Imprimir pilas" @@ -852,299 +893,308 @@ msgstr "Cambiar" msgid "Passwords do not match!" msgstr "¡Las contraseñas no coinciden!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volúmen del sonido: " # Es en el menú de sonido. Salir suena muy fuerte. -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Cerrar" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Botón izquierdo" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Botón central" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Botón derecho" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X Button 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Atrás" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Limpiar" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Retorno" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulador" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Button 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Bloq Mayús" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menú" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pausa" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convertir" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "No convertir" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "Fin" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Inicio" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Cambio de modo" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Siguiente" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Anterior" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Espacio" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Abajo" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Ejecutar" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Captura" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Seleccionar" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Arriba" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Ayuda" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Introducir" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Captura de pantalla" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Win izq." -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Aplicaciones" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Win der." -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Suspender" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Bloq Núm" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Bloq Despl" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Shift izq." -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift der." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Control izq." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Menú izq." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Control der." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Menú der." -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Coma" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Menos" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punto" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Más" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Borrar OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "Limpiar OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Fly mode" +#~ msgstr "Modo vuelo" diff --git a/po/et/minetest.po b/po/et/minetest.po index 00a919550..561b69a43 100644 --- a/po/et/minetest.po +++ b/po/et/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-12-18 21:28+0200\n" "Last-Translator: Jabo Babo \n" "Language-Team: LANGUAGE \n" @@ -18,62 +18,78 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "kinnitama" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 #, fuzzy msgid "World:" msgstr "Vali maailm:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 #, fuzzy msgid "Hide Game" msgstr "Mäng" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 #, fuzzy msgid "Depends:" msgstr "Vajab:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Salvesta" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Tühista" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Lülita kõik sisse" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Lülita kõik välja" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "Sisse lülitatud" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Lülita kõik sisse" @@ -115,7 +131,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Maailma loomine ebaõnnestus: Samanimeline maailm on juba olemas" @@ -130,7 +146,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Jah" @@ -159,30 +175,30 @@ msgstr "Ei" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Nõustu" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 #, fuzzy msgid "Failed to install $1 to $2" msgstr "Maailma initsialiseerimine ebaõnnestus" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -190,49 +206,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Alla" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Maailma nimi" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -240,15 +247,20 @@ msgstr "" msgid "Credits" msgstr "Tänuavaldused" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Põhiline arendaja" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Co-arendaja" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Põhiline arendaja" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Early arendajad" @@ -290,12 +302,13 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "IP/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nimi/Parool" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -305,7 +318,7 @@ msgid "Public Serverlist" msgstr "Avatud serverite nimekiri:" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Kustuta" @@ -314,15 +327,33 @@ msgstr "Kustuta" msgid "Connect" msgstr "Liitu" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Kujunduslik mängumood" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "Sisse lülitatud" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "Sisse lülitatud" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Uus" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Konfigureeri" @@ -330,17 +361,18 @@ msgstr "Konfigureeri" msgid "Start Game" msgstr "Alusta mängu" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Vali maailm:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Kujunduslik mängumood" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Lülita valu sisse" @@ -348,6 +380,10 @@ msgstr "Lülita valu sisse" msgid "Public" msgstr "Avalik" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nimi/Parool" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -360,151 +396,184 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "No nimi või no mäng valitud" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Läbipaistmatu vesi" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Uhked puud" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Bi-lineaarsed Filtreerimine" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-Linear Filtreerimine" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Ilus valgustus" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Lülita osakesed sisse" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D pilved" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Uhked puud" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 #, fuzzy msgid "Opaque Water" msgstr "Läbipaistmatu vesi" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Liitu" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Väga hea kvaliteet" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotroopne Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-lineaarsed Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Linear Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Varjutajad" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Vaheta nuppe" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Üksikmäng" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Väga hea kvaliteet" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Sätted" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Üksikmäng" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Konfigureeri" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Menüü" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Mängi" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Üksikmäng" @@ -521,39 +590,171 @@ msgstr "Informatsioon ei ole kättesaadav" msgid "Texturepacks" msgstr "Vali graafika:" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menüü" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Ühenduse viga (Aeg otsas?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Ei leia ega suuda jätkata mängu \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Vale mängu ID." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Jätka" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Sa surid." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Ärka ellu" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Jätka" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Vaheta parooli" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Hääle volüüm" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Vaheta nuppe" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Välju menüüsse" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Välju mängust" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -561,14 +762,14 @@ msgstr "" "\n" "Vaata debug.txt info jaoks." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Jätka" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -583,478 +784,463 @@ msgstr "\"Tegevus\" = Roni alla" msgid "Double tap \"jump\" to toggle fly" msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Nupp juba kasutuses" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "Vajuta nuppu" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Edasi" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Tagasi" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Vasakule" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Paremale" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Tegevus" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Hüppamine" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Hiilimine" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Viska maha" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Seljakott" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Jututuba" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Käsklus" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konsool" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Lülita lendamine sisse" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Lülita kiirus sisse" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Lülita kiirus sisse" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Lülita läbi seinte minek sisse" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Kauguse valik" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Prindi kogused" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Vana parool" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Uus parool" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Kinnita parooli" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Muuda" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Paroolid ei ole samad!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Hääle Volüüm: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Välju" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Vasak nupp" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Keskmine nupp" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Parem nupp" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X Nuppp 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Tagasi" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Tühjenda" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Reavahetus" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Nupp 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "CTRL" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menüü" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Paus" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift," -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Konverteeri" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Põgene" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Viimane" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Konverteerimatta" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "Lõpeta" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Kodu" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Moodi vahetamine" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Järgmine" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Eelnev" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Tühik" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Alla" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Soorita" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Prindi" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Vali" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Üles" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Abi" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Sisesta" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Mängupilt" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Vasak Windowsi nupp" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Aplikatsioonid" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numbrilaual 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numbrilaual 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Parem Windowsi nupp" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Maga" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numbrilaual 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numbrilaual 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numbrilaual 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numbrilaual 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numbrilaual 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numbrilaual 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numbrilaual *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numbrilaual +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numbrilaual -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numbrilaual /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numbrilaual 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numbrilaual 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Numbrilaual Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll lukk" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Vasak Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Parem Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Vasak CTRL" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Vasak Menüü" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Parem CTRL" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Parem Menüü" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Koma" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Miinus" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punkt" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Pluss" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Kustuta OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Tühi" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Suumi" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menüü" +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Mäng" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "GAMES" +#~ msgstr "MÄNGUD" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Ühenduse viga (Aeg otsas?)" +#~ msgid "Games" +#~ msgstr "Mängud" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha." +#, fuzzy +#~ msgid "edit game" +#~ msgstr "Muuda mängu" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "new game" +#~ msgstr "uus mängu" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Ei leia ega suuda jätkata mängu \"" +#~ msgid "EDIT GAME" +#~ msgstr "MUUDA MÄNGU" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Vale mängu ID." +#, fuzzy +#~ msgid "Remove selected mod" +#~ msgstr "Eemalda valitud muutus" -#~ msgid "Left click: Move all items, Right click: Move single item" +#, fuzzy +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Lisama muutus" + +#~ msgid "Favorites:" +#~ msgstr "Lemmikud:" + +#~ msgid "Name" +#~ msgstr "Nimi" + +#~ msgid "Password" +#~ msgstr "Parool" + +#~ msgid "SETTINGS" +#~ msgstr "Seaded" + +#~ msgid "Preload item visuals" +#~ msgstr "Lae asjade visuaale" + +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Löppev vedelik" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut " -#~ "asja" +#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n" +#~ "Need lülitatakse sisse kohe pärast sätete salvestamist." -#~ msgid "is required by:" -#~ msgstr "Seda vajavad:" - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguratsioon salvestatud. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Hoiatus: Konfiguratsioon pole kindel." - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti" - -#~ msgid "Multiplayer" -#~ msgstr "Mitmikmäng" - -#~ msgid "Advanced" -#~ msgstr "Arenenud sätted" - -#~ msgid "Show Public" -#~ msgstr "Näita avalikke" - -#~ msgid "Show Favorites" -#~ msgstr "Näita lemmikuid" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit." - -#~ msgid "Create world" -#~ msgstr "Loo maailm" - -#~ msgid "Address required." -#~ msgstr "IP on vajalkik." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud" - -#~ msgid "Files to be deleted" -#~ msgstr "Failid mida kustutada" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n" +#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon." #~ msgid "" #~ "Default Controls:\n" @@ -1081,81 +1267,65 @@ msgstr "Vale mängu ID." #~ "- ESC: Menüü\n" #~ "- T: Jututupa\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud" + +#~ msgid "Files to be deleted" +#~ msgstr "Failid mida kustutada" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud" + +#~ msgid "Address required." +#~ msgstr "IP on vajalkik." + +#~ msgid "Create world" +#~ msgstr "Loo maailm" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit." + +#~ msgid "Show Favorites" +#~ msgstr "Näita lemmikuid" + +#~ msgid "Show Public" +#~ msgstr "Näita avalikke" + +#~ msgid "Advanced" +#~ msgstr "Arenenud sätted" + +#~ msgid "Multiplayer" +#~ msgstr "Mitmikmäng" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Hoiatus: Konfiguratsioon pole kindel." + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguratsioon salvestatud. " + +#~ msgid "is required by:" +#~ msgstr "Seda vajavad:" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n" -#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon." +#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut " +#~ "asja" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n" -#~ "Need lülitatakse sisse kohe pärast sätete salvestamist." +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotroopne Filtreerimine" -#~ msgid "Exit to OS" -#~ msgstr "Välju mängust" - -#~ msgid "Exit to Menu" -#~ msgstr "Välju menüüsse" - -#~ msgid "Sound Volume" -#~ msgstr "Hääle volüüm" - -#~ msgid "Change Password" -#~ msgstr "Vaheta parooli" - -#~ msgid "Continue" -#~ msgstr "Jätka" - -#~ msgid "You died." -#~ msgstr "Sa surid." +#~ msgid "Mip-Mapping" +#~ msgstr "Väga hea kvaliteet" #, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Löppev vedelik" - -#~ msgid "Preload item visuals" -#~ msgstr "Lae asjade visuaale" - -#~ msgid "SETTINGS" -#~ msgstr "Seaded" - -#~ msgid "Password" -#~ msgstr "Parool" - -#~ msgid "Name" -#~ msgstr "Nimi" - -#~ msgid "Favorites:" -#~ msgstr "Lemmikud:" - -#, fuzzy -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Lisama muutus" - -#, fuzzy -#~ msgid "Remove selected mod" -#~ msgstr "Eemalda valitud muutus" - -#~ msgid "EDIT GAME" -#~ msgstr "MUUDA MÄNGU" - -#~ msgid "new game" -#~ msgstr "uus mängu" - -#, fuzzy -#~ msgid "edit game" -#~ msgstr "Muuda mängu" - -#~ msgid "Games" -#~ msgstr "Mängud" - -#~ msgid "GAMES" -#~ msgstr "MÄNGUD" - -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Mäng" +#~ msgid "Downloading" +#~ msgstr "Alla" diff --git a/po/fr/minetest.po b/po/fr/minetest.po index bed11899f..3ede5f212 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-07-08 11:41+0200\n" "Last-Translator: Jean-Patrick G. \n" -"Language-Team: French " -"\n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,57 +19,73 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Chargement..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Sélectionner un monde :" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Cacher le jeu" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Cacher le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod :" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Dépend de :" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Enregistrer" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Annuler" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Activer le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Désactiver le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "activé" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Tout activer" @@ -109,7 +125,7 @@ msgstr "Avertissement : le jeu minimal est fait pour les développeurs." msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "Téléchargez un sous-jeu, comme minetest_game, depuis minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Le monde \"$1\" existe déjà" @@ -123,7 +139,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer \"$1\" ?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Oui" @@ -151,15 +167,15 @@ msgstr "Non" msgid "Rename Modpack:" msgstr "Renommer le pack de mods :" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Accepter" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Installer un mod : fichier : \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -167,17 +183,17 @@ msgstr "" "\n" "Installer un mod : type de fichier non supporté \"$1\" ou archive cassée" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "N'a pas pu installer $1 à $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Installer un mod : impossible de trouver un nom de dossier valide pour le " "pack de mods $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1" @@ -185,47 +201,40 @@ msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1" msgid "Unsorted" msgstr "Non trié" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "Rechercher" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "Téléchargement" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +#, fuzzy +msgid "Downloading $1, please wait..." msgstr "veuillez patienter..." -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "Installé avec succès :" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 msgid "Shortname:" msgstr "Nom :" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "ok" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Note" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Réinstaller" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Installer" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "Fermer le store" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Page $1 sur $2" @@ -233,15 +242,20 @@ msgstr "Page $1 sur $2" msgid "Credits" msgstr "Crédits" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Développeurs principaux" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Contributeurs actifs" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Développeurs principaux" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Anciens contributeurs" @@ -282,12 +296,13 @@ msgid "Mods" msgstr "Mods" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Adresse / Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nom / Mot de passe" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -296,7 +311,7 @@ msgid "Public Serverlist" msgstr "Liste de serveurs publics" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Supprimer" @@ -305,15 +320,33 @@ msgstr "Supprimer" msgid "Connect" msgstr "Rejoindre" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Mode créatif" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "activé" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "activé" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nouveau" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Configurer" @@ -321,17 +354,18 @@ msgstr "Configurer" msgid "Start Game" msgstr "Démarrer" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Sélectionner un monde :" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Mode créatif" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Activer les dégâts" @@ -339,6 +373,10 @@ msgstr "Activer les dégâts" msgid "Public" msgstr "Public" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nom / Mot de passe" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "Adresse à assigner" @@ -351,143 +389,178 @@ msgstr "Port" msgid "Server Port" msgstr "Port du serveur" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Nom du monde manquant ou aucun jeu sélectionné" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Serveur" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Eau opaque" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "Feuilles mouvantes" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Arbres détaillés" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Filtrage bilinéaire" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtrage trilinéaire" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "Non !" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Lumière douce" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Activer les particules" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Nuages 3D" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "Arbres détaillés" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Eau opaque" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "Verre connecté" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtrage anisotrope" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtrage bilinéaire" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtrage trilinéaire" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shaders" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Changer les touches" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "Réinitialiser le monde" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "Taille des menus" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "Taille appliquée aux menus : " -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "Bump mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "Normal mapping" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "Occlusion parallaxe" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "Liquides mouvants" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "Feuilles mouvantes" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "Plantes mouvantes" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Réglages" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "Voler" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "Démarrer la partie solo" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "Configurer les mods" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "Menu principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Jouer" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Solo" @@ -503,39 +576,186 @@ msgstr "Pas d'information disponible" msgid "Texturepacks" msgstr "Packs de textures" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Chargement..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Résolution de l'adresse..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Textures d'objets..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menu principal" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "Nom du joueur trop long." + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Erreur de connexion (perte de connexion ?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "Le chemin du monde spécifié n'existe pas :" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Le jeu \" n'a pas pu être trouvé" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "gamespec invalide." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Procéder" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Vous êtes mort." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Ressusciter" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Contrôles:\n" +"- ZQSD : se déplacer\n" +"- Espace : sauter/grimper\n" +"- Maj. : marcher prudemment/descendre\n" +"- A : lâcher l'objet en main\n" +"- I : inventaire\n" +"- Souris : tourner/regarder\n" +"- Souris gauche : creuser/attaquer\n" +"- Souris droite : placer/utiliser\n" +"- Molette souris : sélectionner objet\n" +"- T : discuter\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Continuer" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Changer mot de passe" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Volume du son" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Changer les touches" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Quitter vers le menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Quitter le jeu" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Quitter le jeu..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Création du serveur..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Création du client..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Résolution de l'adresse..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Connexion au serveur..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Définitions d'objets..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Définitions des blocs..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Média..." -#: src/game.cpp:2267 -msgid " KB/s" -msgstr " Ko/s" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" -msgstr " Mo/s" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -543,14 +763,14 @@ msgstr "" "\n" "Voir debug.txt pour plus d'information." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Procéder" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Entrer " +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "ok" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "Raccourcis" @@ -563,478 +783,488 @@ msgstr "\"Use\" = descendre (escalade)" msgid "Double tap \"jump\" to toggle fly" msgstr "Double-appui sur \"saut\" pour voler" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Touche déjà utilisée" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "appuyez sur une touche" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Avancer" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Reculer" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Gauche" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Droite" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Utiliser" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Sauter" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Marcher" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Jeter" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventaire" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chatter" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Commande" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Console" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Voler" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Mode rapide" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Mode rapide" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Mode sans collision" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Distance d'affichage" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Imprimer stacks" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Ancien mot de passe" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Nouveau mot de passe" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Confirmer mot de passe" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Changer" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Les mots de passe ne correspondent pas !" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volume du son :" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Quitter" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Bouton gauche" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Bouton du milieu" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Bouton droit" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Bouton X 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Retour en arrière" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Vider" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Retour" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulation" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Bouton X 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Verr. maj." -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Contrôle" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pause" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convertir" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Échap" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "Fin" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Origine" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Changer de mode" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Suivant" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Précédent" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Espace" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Bas" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Exécuter" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Imprimer" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Sélectionner" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Haut" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Aide" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insérer" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Capture d'écran" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Windows gauche" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Applications" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Pavé num. 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Pavé num. 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Windows droite" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Mise en veille" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Pavé num. 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Pavé num. 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Pavé num. 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Pavé num. 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Pavé num. 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Pavé num. 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Pavé num. *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Pavé num. +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Pavé num. -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Pavé num. /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Pavé num. 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Pavé num. 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Verr. pavé num." -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Verr. défilement" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Shift gauche" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift droite" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Contrôle gauche" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Menu gauche" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Contrôle droite" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Menu droite" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Virgule" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Moins" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Point" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attente" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "Vider sélection" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Écraser l'OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoomer" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menu principal" +#~ msgid "Game Name" +#~ msgstr "Nom du jeu" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "Nom du joueur trop long." +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\"" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Erreur de connexion (perte de connexion ?)" +#~ msgid "GAMES" +#~ msgstr "JEUX" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." +#~ msgid "Games" +#~ msgstr "Jeux" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "Le chemin du monde spécifié n'existe pas :" +#~ msgid "Mods:" +#~ msgstr "Mods :" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Le jeu \" n'a pas pu être trouvé" +#~ msgid "edit game" +#~ msgstr "éditer le jeu" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "gamespec invalide." +#~ msgid "new game" +#~ msgstr "nouveau jeu" -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "EDIT GAME" +#~ msgstr "MODIFIER LE JEU" + +#~ msgid "Remove selected mod" +#~ msgstr "Supprimer le mod sélectionné" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Ajouter un mod" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Favoris :" + +#~ msgid "START SERVER" +#~ msgstr "DÉMARRER LE SERVEUR" + +#~ msgid "Name" +#~ msgstr "Nom" + +#~ msgid "Password" +#~ msgstr "Mot de passe" + +#~ msgid "SETTINGS" +#~ msgstr "PARAMÈTRES" + +#~ msgid "Preload item visuals" +#~ msgstr "Précharger les objets" + +#~ msgid "Finite Liquid" +#~ msgstr "Liquides limités" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "PARTIE SOLO" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACKS DE TEXTURES" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "Add mod:" +#~ msgstr "Ajouter un mod :" + +#~ msgid "Local install" +#~ msgstr "Installation locale" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet" +#~ "Attention : certains mods ne sont pas encore configurés.\n" +#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. " -#~ msgid "is required by:" -#~ msgstr "est requis par :" - -#~ msgid "Configuration saved. " -#~ msgstr "Configuration enregistrée. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Attention : configuration incorrecte. " - -#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " #~ msgstr "" -#~ "Impossible de créer le monde : le nom contient des caractères invalides" +#~ "Attention : certains mods configurés sont introuvables.\n" +#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. " -#~ msgid "Multiplayer" -#~ msgstr "Multijoueur" - -#~ msgid "Advanced" -#~ msgstr "Avancé" - -#~ msgid "Show Public" -#~ msgstr "Voir les serveurs publics" - -#~ msgid "Show Favorites" -#~ msgstr "Voir les serveurs favoris" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Laisser l'adresse vide pour lancer un serveur local." - -#~ msgid "Create world" -#~ msgstr "Créer un monde" - -#~ msgid "Address required." -#~ msgstr "Adresse requise." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné" - -#~ msgid "Files to be deleted" -#~ msgstr "Fichiers à supprimer" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Impossible de configurer ce monde : aucune sélection active" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés" +#~ msgid "Delete map" +#~ msgstr "Supprimer la carte" #~ msgid "" #~ "Default Controls:\n" @@ -1061,149 +1291,73 @@ msgstr "gamespec invalide." #~ "- Échap : ce menu\n" #~ "- T : discuter\n" -#~ msgid "Delete map" -#~ msgstr "Supprimer la carte" +#~ msgid "Failed to delete all world files" +#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Impossible de configurer ce monde : aucune sélection active" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent" + +#~ msgid "Files to be deleted" +#~ msgstr "Fichiers à supprimer" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné" + +#~ msgid "Address required." +#~ msgstr "Adresse requise." + +#~ msgid "Create world" +#~ msgstr "Créer un monde" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Laisser l'adresse vide pour lancer un serveur local." + +#~ msgid "Show Favorites" +#~ msgstr "Voir les serveurs favoris" + +#~ msgid "Show Public" +#~ msgstr "Voir les serveurs publics" + +#~ msgid "Advanced" +#~ msgstr "Avancé" + +#~ msgid "Multiplayer" +#~ msgstr "Multijoueur" + +#~ msgid "Cannot create world: Name contains invalid characters" #~ msgstr "" -#~ "Attention : certains mods configurés sont introuvables.\n" -#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. " +#~ "Impossible de créer le monde : le nom contient des caractères invalides" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Attention : configuration incorrecte. " + +#~ msgid "Configuration saved. " +#~ msgstr "Configuration enregistrée. " + +#~ msgid "is required by:" +#~ msgstr "est requis par :" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Attention : certains mods ne sont pas encore configurés.\n" -#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. " +#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Contrôles:\n" -#~ "- ZQSD : se déplacer\n" -#~ "- Espace : sauter/grimper\n" -#~ "- Maj. : marcher prudemment/descendre\n" -#~ "- A : lâcher l'objet en main\n" -#~ "- I : inventaire\n" -#~ "- Souris : tourner/regarder\n" -#~ "- Souris gauche : creuser/attaquer\n" -#~ "- Souris droite : placer/utiliser\n" -#~ "- Molette souris : sélectionner objet\n" -#~ "- T : discuter\n" +#~ msgid " MB/s" +#~ msgstr " Mo/s" -#~ msgid "Exit to OS" -#~ msgstr "Quitter le jeu" +#~ msgid " KB/s" +#~ msgstr " Ko/s" -#~ msgid "Exit to Menu" -#~ msgstr "Quitter vers le menu" +#~ msgid "Fly mode" +#~ msgstr "Voler" -#~ msgid "Sound Volume" -#~ msgstr "Volume du son" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtrage anisotrope" -#~ msgid "Change Password" -#~ msgstr "Changer mot de passe" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-mapping" -#~ msgid "Continue" -#~ msgstr "Continuer" - -#~ msgid "You died." -#~ msgstr "Vous êtes mort." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Quitter le jeu..." - -#~ msgid "Connecting to server..." -#~ msgstr "Connexion au serveur..." - -#~ msgid "Resolving address..." -#~ msgstr "Résolution de l'adresse..." - -#~ msgid "Creating client..." -#~ msgstr "Création du client..." - -#~ msgid "Creating server...." -#~ msgstr "Création du serveur..." - -#~ msgid "Loading..." -#~ msgstr "Chargement..." - -#~ msgid "Local install" -#~ msgstr "Installation locale" - -#~ msgid "Add mod:" -#~ msgstr "Ajouter un mod :" - -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACKS DE TEXTURES" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "PARTIE SOLO" - -#~ msgid "Finite Liquid" -#~ msgstr "Liquides limités" - -#~ msgid "Preload item visuals" -#~ msgstr "Précharger les objets" - -#~ msgid "SETTINGS" -#~ msgstr "PARAMÈTRES" - -#~ msgid "Password" -#~ msgstr "Mot de passe" - -#~ msgid "Name" -#~ msgstr "Nom" - -#~ msgid "START SERVER" -#~ msgstr "DÉMARRER LE SERVEUR" - -#~ msgid "Favorites:" -#~ msgstr "Favoris :" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Ajouter un mod" - -#~ msgid "Remove selected mod" -#~ msgstr "Supprimer le mod sélectionné" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFIER LE JEU" - -#~ msgid "new game" -#~ msgstr "nouveau jeu" - -#~ msgid "edit game" -#~ msgstr "éditer le jeu" - -#~ msgid "Mods:" -#~ msgstr "Mods :" - -#~ msgid "Games" -#~ msgstr "Jeux" - -#~ msgid "GAMES" -#~ msgstr "JEUX" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Nom du jeu" +#~ msgid "Downloading" +#~ msgstr "Téléchargement" diff --git a/po/hu/minetest.po b/po/hu/minetest.po index d49bc782b..c3dc182b4 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-08-11 03:05+0200\n" "Last-Translator: Sasikaa Lacikaa \n" "Language-Team: LANGUAGE \n" @@ -18,62 +18,78 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Betöltés..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 #, fuzzy msgid "World:" msgstr "Világ kiválasztása:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 #, fuzzy msgid "Hide Game" msgstr "Játék" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 #, fuzzy msgid "Depends:" msgstr "Attól függ:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Mentés" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Mégse" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Összes engedélyezve" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Összes tiltva" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "Engedélyezve" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Összes engedélyezve" @@ -114,7 +130,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Nem sikerült a viág létrehozása: A világ neve már használva van" @@ -129,7 +145,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Igen" @@ -158,30 +174,30 @@ msgstr "Nem" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Elfogadva" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 #, fuzzy msgid "Failed to install $1 to $2" msgstr "A világ betöltése közben hiba" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -189,49 +205,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Le" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Világ neve" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -239,15 +246,19 @@ msgstr "" msgid "Credits" msgstr "Stáblista" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -289,12 +300,13 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Cím/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Név/jelszó" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -304,7 +316,7 @@ msgid "Public Serverlist" msgstr "Publikus Szerver Lista:" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Törlés" @@ -313,15 +325,33 @@ msgstr "Törlés" msgid "Connect" msgstr "Csatlakozás" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Kreatív mód" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "Engedélyezve" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "Engedélyezve" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Új" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Beállítás" @@ -330,17 +360,18 @@ msgstr "Beállítás" msgid "Start Game" msgstr "Játék indítása / Csatlakozás" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Világ kiválasztása:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Kreatív mód" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Sérülés engedélyezése" @@ -348,6 +379,10 @@ msgstr "Sérülés engedélyezése" msgid "Public" msgstr "Publikus" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Név/jelszó" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -360,151 +395,183 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Átlátszó víz" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Szép fák" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Bi-Linear Szűrés" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-Linear Szűrés" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Simított megvilágítás" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Részecskék engedélyezése" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D Felhők" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Szép fák" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 #, fuzzy msgid "Opaque Water" msgstr "Átlátszó víz" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Csatlakozás" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anzisztrópikus szűrés" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-Linear Szűrés" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Linear Szűrés" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shaderek" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Gomb választása" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Egyjátékos mód" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Beállítások" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Egyjátékos mód" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Beállítás" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Fő menü" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Játék" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Egyjátékos mód" @@ -520,52 +587,199 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Betöltés..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Cím létrehozása..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Tárgy textúrák..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Fő menü" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Csatlakozási hiba (Idő lejárt?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nincs kiválasztott világ, nincs cím. Nincs mit tenni." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Nem található, vagy nem betöltött játék \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Nem valós játék spec." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Elfogadva" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Meghaltál." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Újra éledés" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Alap beállítások:\n" +"- WASD: Mozgás\n" +"- Space: Ugrás/Mászás\n" +"- Shift: Lopakodás/Lefele menés\n" +"- Q: Tárgyak eldobása\n" +"- I: Invertory\n" +"- Egér: Forgás/Nézelődés\n" +"- Egér Bal-gomb: Ásás/ütés\n" +"- Egér jobb-gomb: elhejezés/használat\n" +"- Egér görgő: Tárgyak kiválasztása\n" +"- T: Beszélgetés\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Tovább" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Jelszó változtatás" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Hangerő" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Gomb választása" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Kilépés a menübe" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Kilépés az OP-rendszerbe" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Dolog leállítása..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Szerver létrehozása..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Kliens létrehozása..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Cím létrehozása..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Csatlakozás a szerverhez..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Elfogadva" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -580,556 +794,482 @@ msgstr "\"Használat\" = Lemászás" msgid "Double tap \"jump\" to toggle fly" msgstr "Duplán nyomd meg az \"ugrás\" gombot ahhoz hogy repülj" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "A gomb már használatban van" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "Nyomj meg egy gombot" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Vissza" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Előre" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Bal" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Jobb" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Használni" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Ugrás" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Lopakodás" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Dobás" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Invertory" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Beszélgetés" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Parancs" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konzol" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Repülés bekapcsolása" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Gyorsaság bekapcsolása" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Gyorsaság bekapcsolása" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "váltás noclip-re" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Távolság választása" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Stacks nyomtatása" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Régi jelszó" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Új jelszó" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Jelszó visszaigazolás" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Változtat" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Nem eggyeznek a jelszavak!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Hangerő: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Kilépés" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Bal gomb" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Középső gomb" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Jobb gomb" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X gomb 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Vissza" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Törlés" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulátor" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Gomb 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Kapital" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Controll" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kanaa" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menü" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pillanat-álj" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "váltás" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Konvertálás" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Kilépés" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Befejezés" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junjaa" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanjii" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nem konvertált" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "Vége" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Otthon" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mód váltás" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Következő" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Priorr" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Hely" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Le" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Tömörít" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Nyomtat" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Kiválaszt" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Fel" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Segítség" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Beilleszt" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Verzió" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Bal Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Prog" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numerikus billentyű 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numerikus billentyű 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Jobb Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Alvás" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numerikus billentyű 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numerikus billentyű 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numerikus billentyű 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numerikus billentyű 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numerikus billentyű 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numerikus billentyű 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numerikus billentyű *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numerikus billentyű +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numerikus billentyű -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numerikus billentyű /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numerikus billentyű 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numerikus billentyű 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Numerikus lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Skroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Bal Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Jobb Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Bal Controll" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Bal menü" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Jobb Controll" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Jobb menü" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Vessző" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Minusz" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "tizedes" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plusz" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attnn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSell" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEFF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSell" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clearr" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA11" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Nagyítás" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Fő menü" - -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" - -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Csatlakozási hiba (Idő lejárt?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nincs kiválasztott világ, nincs cím. Nincs mit tenni." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Nem található, vagy nem betöltött játék \"" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Nem valós játék spec." - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat" - -#~ msgid "is required by:" -#~ msgstr "kell neki:" - -#~ msgid "Configuration saved. " -#~ msgstr "Beállítások mentve. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Figyelem: A beállítások nem egyformák. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak" - -#~ msgid "Multiplayer" -#~ msgstr "Többjátékos mód" - -#~ msgid "Advanced" -#~ msgstr "Haladó" - -#~ msgid "Show Public" -#~ msgstr "Publikus mutatása" - -#~ msgid "Show Favorites" -#~ msgstr "Kedvencek mutatása" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts." - -#~ msgid "Create world" -#~ msgstr "Világ létrehozása" - -#~ msgid "Address required." -#~ msgstr "Cím szükséges." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Nem törölhető a világ: Nincs kiválasztva" - -#~ msgid "Files to be deleted" -#~ msgstr "A fájl törölve lett" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Hiba az összes világ törlése közben" - -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Alap beállítások:\n" -#~ "- WASD: Mozgás\n" -#~ "- Space: Ugrás/Mászás\n" -#~ "- Shift: Lopakodás/Lefele menés\n" -#~ "- Q: Tárgyak eldobása\n" -#~ "- I: Invertory\n" -#~ "- Egér: Forgás/Nézelődés\n" -#~ "- Egér Bal-gomb: Ásás/ütés\n" -#~ "- Egér jobb-gomb: elhejezés/használat\n" -#~ "- Egér görgő: Tárgyak kiválasztása\n" -#~ "- T: Beszélgetés\n" - -#~ msgid "Exit to OS" -#~ msgstr "Kilépés az OP-rendszerbe" - -#~ msgid "Exit to Menu" -#~ msgstr "Kilépés a menübe" - -#~ msgid "Sound Volume" -#~ msgstr "Hangerő" - -#~ msgid "Change Password" -#~ msgstr "Jelszó változtatás" - -#~ msgid "Continue" -#~ msgstr "Tovább" - -#~ msgid "You died." -#~ msgstr "Meghaltál." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Dolog leállítása..." - -#~ msgid "Connecting to server..." -#~ msgstr "Csatlakozás a szerverhez..." - -#~ msgid "Resolving address..." -#~ msgstr "Cím létrehozása..." - -#~ msgid "Creating client..." -#~ msgstr "Kliens létrehozása..." - -#~ msgid "Creating server...." -#~ msgstr "Szerver létrehozása..." - -#~ msgid "Loading..." -#~ msgstr "Betöltés..." - #, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Végtelen folyadék" - -#~ msgid "Preload item visuals" -#~ msgstr "Előretöltött tárgy láthatóság" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Régi jelszó" - -#~ msgid "Favorites:" -#~ msgstr "Kedvencek:" +#~ msgid "Game Name" +#~ msgstr "Játék" #, fuzzy #~ msgid "Games" #~ msgstr "Játék" +#~ msgid "Favorites:" +#~ msgstr "Kedvencek:" + #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Játék" +#~ msgid "Password" +#~ msgstr "Régi jelszó" + +#~ msgid "Preload item visuals" +#~ msgstr "Előretöltött tárgy láthatóság" + +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Végtelen folyadék" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Hiba az összes világ törlése közben" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék" + +#~ msgid "Files to be deleted" +#~ msgstr "A fájl törölve lett" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Nem törölhető a világ: Nincs kiválasztva" + +#~ msgid "Address required." +#~ msgstr "Cím szükséges." + +#~ msgid "Create world" +#~ msgstr "Világ létrehozása" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts." + +#~ msgid "Show Favorites" +#~ msgstr "Kedvencek mutatása" + +#~ msgid "Show Public" +#~ msgstr "Publikus mutatása" + +#~ msgid "Advanced" +#~ msgstr "Haladó" + +#~ msgid "Multiplayer" +#~ msgstr "Többjátékos mód" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Figyelem: A beállítások nem egyformák. " + +#~ msgid "Configuration saved. " +#~ msgstr "Beállítások mentve. " + +#~ msgid "is required by:" +#~ msgstr "kell neki:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anzisztrópikus szűrés" + +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-mapping" + +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Le" diff --git a/po/id/minetest.po b/po/id/minetest.po index 213619795..1cacddc2e 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-03-02 00:21+0700\n" "Last-Translator: Muhammad Rifqi Priyo Susanto " "\n" @@ -18,61 +18,77 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Oke" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Dunia:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "" "Sembunyikan\n" "permainan" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" "Sembunyikan\n" "konten pm" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Bergantung pada:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Simpan" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Batal" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Aktifkan PM" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Nonaktifkan PM" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "diaktifkan" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Aktifkan semua" @@ -112,7 +128,7 @@ msgstr "Peringatan: minimal development test ditujukan untuk pengembang." msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "Unduh sebuah sub-permainan, seperti minetest_game, dari minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Dunia bernama \"$1\" telah ada" @@ -126,7 +142,7 @@ msgstr "Kamu yakin ingin menghapus \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ya" @@ -154,15 +170,15 @@ msgstr "Tidak" msgid "Rename Modpack:" msgstr "Ganti Nama Paket Mod:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Setuju" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Pemasangan Mod: berkas: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -171,17 +187,17 @@ msgstr "" "\n" "Pemasangan Mod: tipe berkas tidak didukung \"$1\" atau kerusakan arsip" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Gagal untuk memasang $1 ke $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Pemasangan Mod: tidak dapat mencari nama folder yang sesuai untuk paket mod " "$1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1" @@ -189,48 +205,41 @@ msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1" msgid "Unsorted" msgstr "Tidak diurutkan" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "Cari" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "Mengunduh" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +#, fuzzy +msgid "Downloading $1, please wait..." msgstr "mohon tunggu..." -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "Berhasil dipasang:" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Nama pendek:" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "oke" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Peringkat" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Pasang ulang" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Pasang" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "Tutup toko" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Halaman $1 dari $2" @@ -238,15 +247,20 @@ msgstr "Halaman $1 dari $2" msgid "Credits" msgstr "Penghargaan" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Pengembang Inti" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Kontributor Aktif" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Pengembang Inti" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Kontributor Sebelumnya" @@ -287,12 +301,13 @@ msgid "Mods" msgstr "Mod" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Alamat/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nama/Kata sandi" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -301,7 +316,7 @@ msgid "Public Serverlist" msgstr "Daftar Server Publik" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Hapus" @@ -310,15 +325,33 @@ msgstr "Hapus" msgid "Connect" msgstr "Sambung" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Mode Kreatif" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "diaktifkan" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "diaktifkan" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Klien" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Baru" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Konfigurasi" @@ -326,17 +359,18 @@ msgstr "Konfigurasi" msgid "Start Game" msgstr "Mulai Permainan" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Pilih Dunia:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Mode Kreatif" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Aktifkan Kerusakan" @@ -344,6 +378,10 @@ msgstr "Aktifkan Kerusakan" msgid "Public" msgstr "Publik" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nama/Kata sandi" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -356,150 +394,184 @@ msgstr "Port" msgid "Server Port" msgstr "Port Server" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Tidak ada nama atau permainan yang dipilih" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Air Buram" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "Daun Melambai" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Pohon Indah" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Bi-Linear Filtering" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-Linear Filtering" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "Yakin ingin mengaturulang dunia anda?" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "Tidak!!!" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Pencahayaan Halus" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Aktifkan Partikel" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Awan 3D" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Pohon Indah" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Air Buram" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Kaca Tersambung" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotropic Filtering" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-Linear Filtering" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Linear Filtering" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shaders" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Ubah tombol" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Atur ulang dunia pemain tunggal" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "Skala antarmuka" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "Faktor skala yang diatur untuk elemen menu: " -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "Bebas sentuhan" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "Batas sentuhan (px)" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Bumpmapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "Gunakan Normalmaps" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "Air Berombak" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "Daun Melambai" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "Tanaman Berayun" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Pengaturan" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "Mode terbang" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Mulai Pemain Tunggal" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Konfigurasi mod" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Beranda" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Mainkan" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Pemain Tunggal" @@ -516,39 +588,175 @@ msgstr "Tidak ada informasi tersedia" msgid "Texturepacks" msgstr "Paket Tekstur" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Tekstur barang..." + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Tekstur barang..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menu Utama" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "Nama pemain terlalu panjang." + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Koneksi rusak (terlalu lama?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "Jalur dunia yang diberikan tidak ada: " + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Tidak dapat mencari atau memuat permainan \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Spesifikasi permainan tidak sah." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Lanjut" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "" + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Bangkit" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "" + +#: src/game.cpp:1129 +#, fuzzy +msgid "Change Password" +msgstr "Kata Sandi Baru" + +#: src/game.cpp:1134 +#, fuzzy +msgid "Sound Volume" +msgstr "Volume Suara: " + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Ubah tombol" + +#: src/game.cpp:1139 +#, fuzzy +msgid "Exit to Menu" +msgstr "Right Menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definisi barang..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definisi node..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -msgid " KB/s" -msgstr " KB/detik" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" -msgstr " MB/detik" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -556,18 +764,19 @@ msgstr "" "\n" "Cek debug.txt untuk detail." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Lanjut" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Masuk " +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "oke" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari minetest.conf)" +"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari " +"minetest.conf)" #: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" @@ -575,425 +784,421 @@ msgstr "\"Pakai\" = turun" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" -msgstr "Tekan ganda \"lompat\" untuk\n" +msgstr "" +"Tekan ganda \"lompat\" untuk\n" "beralih terbang" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Tombol telah terpakai" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "tekan tombol" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Maju" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Mundur" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Kiri" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Kanan" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Pakai" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Lompat" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Menyelinap" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Jatuhkan" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventaris" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Obrolan" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Perintah" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konsol" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Terbang" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Gerak cepat" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Gerak cepat" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Tembus blok" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Jarak pandang" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Cetak tumpukan" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Kata Sandi Lama" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Kata Sandi Baru" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Konfirmasi Kata Sandi" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Ubah" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Kata sandi tidak cocok!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volume Suara: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Keluar" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Klik Kiri" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Klik Tengah" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Klik Kanan" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Tombol X 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Backspace" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Bersihkan" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Tombol X 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Ctrl" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Alt" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pause" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mode Change" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Page Up" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Page Down" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Spasi" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Turun" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Execute" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Select" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Atas" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Help" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Snapshot" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Start Kiri" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Tombol Menu" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Start Kanan" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sleep" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Shift Kiri" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift Kanan" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Ctrl Kiri" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Left Menu" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Ctrl Kanan" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Right Menu" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Koma" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Kurang" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Titik" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Tambah" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menu Utama" +#~ msgid " MB/s" +#~ msgstr " MB/detik" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "Nama pemain terlalu panjang." +#~ msgid " KB/s" +#~ msgstr " KB/detik" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Koneksi rusak (terlalu lama?)" +#~ msgid "Fly mode" +#~ msgstr "Mode terbang" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan." +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotropic Filtering" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "Jalur dunia yang diberikan tidak ada: " +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Tidak dapat mencari atau memuat permainan \"" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Spesifikasi permainan tidak sah." \ No newline at end of file +#~ msgid "Downloading" +#~ msgstr "Mengunduh" diff --git a/po/it/minetest.po b/po/it/minetest.po index e67333d2f..ae9614944 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: Minetest 0.4.9\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-07-07 14:43+0200\n" "Last-Translator: Michal Čihař \n" -"Language-Team: Italian " -"\n" +"Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,57 +19,73 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Caricamento..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Mondo:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Nasc. gioco" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Nasc. cont. pacchetti" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod.:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Dipendenze:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Salvare" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Annullare" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Att. pacch." -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Disatt. pacch." -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "attivata" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Attivarli tutti" @@ -109,7 +125,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Esiste già un mondo chiamato \"$1\"" @@ -125,7 +141,7 @@ msgstr "Siete certi di volere cancellare \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Sì" @@ -153,15 +169,15 @@ msgstr "No" msgid "Rename Modpack:" msgstr "Rinominare il pacchetto moduli:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Accettare" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Installare un modulo: file: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -170,17 +186,17 @@ msgstr "" "\n" "Installare un modulo: tipo di file non supportato \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "L'installazione di $1 in $2 è fallita" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Installare un modulo: impossibile trovare un nome di cartella appropriato " "per il pacchetto moduli $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" "Installare un modulo: impossibile trovare il vero nome del modulo per: $1" @@ -189,48 +205,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Nome del mondo" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Valutazione" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Reinstallare" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Installare" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Pagina $1 di $2" @@ -238,15 +246,20 @@ msgstr "Pagina $1 di $2" msgid "Credits" msgstr "Riconoscimenti" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Sviluppatori principali" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Contributori attivi" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Sviluppatori principali" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Contributori precedenti" @@ -287,12 +300,13 @@ msgid "Mods" msgstr "Moduli" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Indirizzo/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nome/Password" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -301,7 +315,7 @@ msgid "Public Serverlist" msgstr "Elenco dei server pubblici" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Cancellare" @@ -310,15 +324,33 @@ msgstr "Cancellare" msgid "Connect" msgstr "Connettere" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Modalità creativa" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "attivata" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "attivata" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nuovo" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Configurare" @@ -326,17 +358,18 @@ msgstr "Configurare" msgid "Start Game" msgstr "Avviare il gioco" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Selezionare il mondo:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Modalità creativa" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Abilitare il danno" @@ -344,6 +377,10 @@ msgstr "Abilitare il danno" msgid "Public" msgstr "Pubblico" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nome/Password" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -356,150 +393,185 @@ msgstr "" msgid "Server Port" msgstr "Porta del server" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "" +"Non è stato fornito nessun nome del mondo oppure non è stato selezionato " +"nessun gioco" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Acqua opaca" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Alberi migliori" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Filtro Bi-Lineare" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtro Tri-Lineare" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Illuminazione armoniosa" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Abilitare le particelle" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Nuvole 3D" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Alberi migliori" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Acqua opaca" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Connettere" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtro anisotropico" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtro Bi-Lineare" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtro Tri-Lineare" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shader" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Cambiare i tasti" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Giocatore singolo" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "E' necessario usare i driver OpenGL per abilitare gli shader." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Impostazioni" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Giocatore singolo" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Configurare" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Menù principale" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Giocare" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Giocatore singolo" @@ -516,39 +588,188 @@ msgstr "Nessuna informazione disponibile" msgid "Texturepacks" msgstr "Pacch. immagini" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Caricamento..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Risoluzione dell'indirizzo..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Immagini degli oggetti..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menù principale" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Errore di connessione (scaduta?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Non è stato selezionato nessun mondo e non è stato fornito nessun indirizzo. " +"Niente da fare." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Impossibile trovare o caricare il gioco \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Specifica del gioco non valida." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Procedere" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Siete morti." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Riapparire" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controlli predefiniti:\n" +"- WASD: muoversi\n" +"- Space: saltare/arrampicarsi\n" +"- Shift: strisciare/scendere\n" +"- Q: scartare l'oggetto\n" +"- I: inventario\n" +"- Mouse: girarsi/guardare\n" +"- Tasto sinistro del mouse: scavare/colpire\n" +"- Tasto destro del mouse: posizionare/usare\n" +"- Rotella del mouse: scegliere l'oggetto\n" +"- T: chat\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Continuare" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Cambiare la password" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Volume del suono" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Cambiare i tasti" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Tornare al menù" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Tornare al S.O." + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Spegnimento della roba..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Creazione del server..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Creazione del client..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Risoluzione dell'indirizzo..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Connessione al server..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definizioni degli oggetti..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definizioni dei cubi..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -556,14 +777,14 @@ msgstr "" "\n" "Controllare debug.txt per i dettagli." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Procedere" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -578,554 +799,474 @@ msgstr "\"Usare\" = scendere" msgid "Double tap \"jump\" to toggle fly" msgstr "Volare On/Off = due volte \"saltare\"" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Tasto già in uso" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "premere il tasto" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Avanti" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Indietro" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Sinistra" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Destra" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Usare" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Saltare" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Strisciare" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Scartare" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventario" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chat" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Comando" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Console" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Volare On/Off" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Correre On/Off" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Correre On/Off" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Fantasma On/Off" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Selez. ad area" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Stampa stack" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Vecchia password" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Nuova password" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Confermare la password" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Cambiare" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Le password non coincidono!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volume suono: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Uscire" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Tasto sinistro" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Tasto centrale" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Tasto destro" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Pulsante X 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Backspace" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Canc" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Invio" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Pulsante X 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Bloc Maiusc" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menù" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pausa" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Maiusc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Fine" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "Fine" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Inizio" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Cambio di modalità" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Successivo" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Precedente" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Spazio" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Pag. giù" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Eseguire" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Stamp" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Selezionare" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Pag. su" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Aiuto" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Ins" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Istantanea" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Finestre a sinistra" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Applicazioni" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Tast. num. 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Tast. num. 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Finestre a destra" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sospensione" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Tast. num. 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Tast. num. 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Tast. num. 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Tast. num. 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Tast. num. 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Tast. num. 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Tast. num. *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Tast. num. +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Tast. num. -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Tast. num. /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Tast. num. 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Tast. num. 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Bloc Num" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Bloc Scorr" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Maiusc sx" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Maiusc dx" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Ctrl sx" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Menù a sinistra" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Ctrl dx" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Menù a destra" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Virgola" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Meno" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punto" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Più" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menù principale" - -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" - -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Errore di connessione (scaduta?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" -"Non è stato selezionato nessun mondo e non è stato fornito nessun indirizzo. " -"Niente da fare." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Impossibile trovare o caricare il gioco \"" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Specifica del gioco non valida." - -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Controlli predefiniti:\n" -#~ "- WASD: muoversi\n" -#~ "- Space: saltare/arrampicarsi\n" -#~ "- Shift: strisciare/scendere\n" -#~ "- Q: scartare l'oggetto\n" -#~ "- I: inventario\n" -#~ "- Mouse: girarsi/guardare\n" -#~ "- Tasto sinistro del mouse: scavare/colpire\n" -#~ "- Tasto destro del mouse: posizionare/usare\n" -#~ "- Rotella del mouse: scegliere l'oggetto\n" -#~ "- T: chat\n" - -#~ msgid "Exit to OS" -#~ msgstr "Tornare al S.O." - -#~ msgid "Exit to Menu" -#~ msgstr "Tornare al menù" - -#~ msgid "Sound Volume" -#~ msgstr "Volume del suono" - -#~ msgid "Change Password" -#~ msgstr "Cambiare la password" - -#~ msgid "Continue" -#~ msgstr "Continuare" - -#~ msgid "You died." -#~ msgstr "Siete morti." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Spegnimento della roba..." - -#~ msgid "Connecting to server..." -#~ msgstr "Connessione al server..." - -#~ msgid "Resolving address..." -#~ msgstr "Risoluzione dell'indirizzo..." - -#~ msgid "Creating client..." -#~ msgstr "Creazione del client..." - -#~ msgid "Creating server...." -#~ msgstr "Creazione del server..." - -#~ msgid "Loading..." -#~ msgstr "Caricamento..." - -#~ msgid "Local install" -#~ msgstr "Installazione locale" - -#~ msgid "Add mod:" -#~ msgstr "Aggiungere un modulo:" - -#~ msgid "MODS" -#~ msgstr "MODULI" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACCH. DI IMM." - -#~ msgid "SINGLE PLAYER" -#~ msgstr "GIOC. SING." - -#~ msgid "Finite Liquid" -#~ msgstr "Liquido limitato" - -#~ msgid "Preload item visuals" -#~ msgstr "Precaricare le immagini" - -#~ msgid "SETTINGS" -#~ msgstr "IMPOSTAZIONI" - -#~ msgid "Password" -#~ msgstr "Password" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "START SERVER" -#~ msgstr "AVVIO SERVER" - -#~ msgid "Favorites:" -#~ msgstr "Preferiti:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Aggiungere il modulo" - -#~ msgid "Remove selected mod" -#~ msgstr "Rimuovere il modulo selezionato" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFICARE IL GIOCO" - -#~ msgid "new game" -#~ msgstr "nuovo gioco" - -#~ msgid "edit game" -#~ msgstr "modificare il gioco" - -#~ msgid "Mods:" -#~ msgstr "Moduli:" - -#~ msgid "Games" -#~ msgstr "Giochi" - -#~ msgid "GAMES" -#~ msgstr "GIOCHI" +#~ msgid "Game Name" +#~ msgstr "Nome del gioco" #~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" #~ msgstr "Gestore del gioco: impossibile il modulo \"$1\" nel gioco \"$2\"" -#~ msgid "Game Name" -#~ msgstr "Nome del gioco" +#~ msgid "GAMES" +#~ msgstr "GIOCHI" + +#~ msgid "Games" +#~ msgstr "Giochi" + +#~ msgid "Mods:" +#~ msgstr "Moduli:" + +#~ msgid "edit game" +#~ msgstr "modificare il gioco" + +#~ msgid "new game" +#~ msgstr "nuovo gioco" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFICARE IL GIOCO" + +#~ msgid "Remove selected mod" +#~ msgstr "Rimuovere il modulo selezionato" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Aggiungere il modulo" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Preferiti:" + +#~ msgid "START SERVER" +#~ msgstr "AVVIO SERVER" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Password" +#~ msgstr "Password" + +#~ msgid "SETTINGS" +#~ msgstr "IMPOSTAZIONI" + +#~ msgid "Preload item visuals" +#~ msgstr "Precaricare le immagini" + +#~ msgid "Finite Liquid" +#~ msgstr "Liquido limitato" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "GIOC. SING." + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACCH. DI IMM." + +#~ msgid "MODS" +#~ msgstr "MODULI" + +#~ msgid "Add mod:" +#~ msgstr "Aggiungere un modulo:" + +#~ msgid "Local install" +#~ msgstr "Installazione locale" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtro anisotropico" + +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" diff --git a/po/ja/minetest.po b/po/ja/minetest.po index af208b8b2..ae26e294f 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -2,11 +2,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-23 02:38+0900\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-07-09 15:56+0200\n" "Last-Translator: sfan5 \n" -"Language-Team: Japanese " -"\n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,10 +14,26 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "決定" +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "読み込み中..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "ワールド:" @@ -40,14 +56,14 @@ msgstr "Mod名:" msgid "Depends:" msgstr "依存Mod:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "保存" #: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200 -#: src/keycode.cpp:224 +#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "キャンセル" @@ -118,7 +134,7 @@ msgstr "本当に\"$1\"を削除してよろしいですか?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "はい" @@ -146,7 +162,7 @@ msgstr "いいえ" msgid "Rename Modpack:" msgstr "名前を変更" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "決定" @@ -168,7 +184,9 @@ msgstr "$2へ$1をインストールできませんでした。" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Modインストール:Modパック$1に適したフォルダ名を見つけることができませんでした。" +msgstr "" +"Modインストール:Modパック$1に適したフォルダ名を見つけることができませんでし" +"た。" #: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" @@ -218,15 +236,20 @@ msgstr "ページ $1/$2" msgid "Credits" msgstr "クレジット" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "開発者" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "開発協力者" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "開発者" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "以前の開発協力者" @@ -280,7 +303,7 @@ msgid "Public Serverlist" msgstr "公開済みのサーバーの一覧" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "削除" @@ -308,11 +331,11 @@ msgstr "PvPあり" msgid "Client" msgstr "クライアント" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "作成" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "設定" @@ -320,17 +343,18 @@ msgstr "設定" msgid "Start Game" msgstr "ゲームスタート" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "ワールドを選択:" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "クリエイティブモード" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "ダメージあり" @@ -354,163 +378,176 @@ msgstr "ポート" msgid "Server Port" msgstr "サーバーのポート" -#: builtin/mainmenu/tab_server.lua:218 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "ワールド名が入力されていないか、ゲームが選択されていません。" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "サーバー" #: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "不透明な水" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "揺れる葉" + +#: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "綺麗な木" + +#: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" msgstr "フィルタ無し" -#: builtin/mainmenu/tab_settings.lua:22 +#: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" msgstr "バイリニアフィルタ" -#: builtin/mainmenu/tab_settings.lua:23 +#: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" msgstr "トリリニアフィルタ" -#: builtin/mainmenu/tab_settings.lua:32 +#: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" msgstr "ミップマップ無し" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" msgstr "ミップマップ" -#: builtin/mainmenu/tab_settings.lua:34 +#: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" msgstr "異方性フィルタ" -#: builtin/mainmenu/tab_settings.lua:77 +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "シングルプレイヤーのワールドをリセットしてよろしいですか?" -#: builtin/mainmenu/tab_settings.lua:81 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "いいえ" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "滑らかな光" -#: builtin/mainmenu/tab_settings.lua:183 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "パーティクル有効化" -#: builtin/mainmenu/tab_settings.lua:185 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "立体の雲" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "綺麗な木" - -#: builtin/mainmenu/tab_settings.lua:189 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "不透明な水" -#: builtin/mainmenu/tab_settings.lua:191 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "ガラスをつなげる" -#: builtin/mainmenu/tab_settings.lua:193 +#: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "ノードの強調" -#: builtin/mainmenu/tab_settings.lua:196 +#: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "テクスチャリング:" -#: builtin/mainmenu/tab_settings.lua:201 +#: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "レンダリング:" -#: builtin/mainmenu/tab_settings.lua:205 +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "ドライバーを変更するためMinetesを再起動します" -#: builtin/mainmenu/tab_settings.lua:207 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "シェーダー" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "操作変更" -#: builtin/mainmenu/tab_settings.lua:215 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "シングルプレイヤーのワールドをリセット" -#: builtin/mainmenu/tab_settings.lua:219 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "メニューの大きさ" -#: builtin/mainmenu/tab_settings.lua:223 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "メニューの大きさとして設定する数値:" -#: builtin/mainmenu/tab_settings.lua:229 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "タッチ位置を自由にする" -#: builtin/mainmenu/tab_settings.lua:235 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "タッチのしきい値(ピクセル単位)" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "バンプマッピング" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "ノーマルマップの生成" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "視差遮蔽マッピング" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "揺れる水" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "揺れる葉" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "揺れる草花" -#: builtin/mainmenu/tab_settings.lua:287 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "シェーダーを有効にするにはOpenGLを使用する必要があります。" -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "設定" -#: builtin/mainmenu/tab_simple_main.lua:80 -msgid "Fly mode" -msgstr "飛行モード" - -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "ゲームスタート" -#: builtin/mainmenu/tab_simple_main.lua:85 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "Mod設定" -#: builtin/mainmenu/tab_simple_main.lua:208 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "メイン" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "ゲームスタート" -#: builtin/mainmenu/tab_singleplayer.lua:268 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "シングルプレイヤー" @@ -526,55 +563,55 @@ msgstr "情報がありません。" msgid "Texturepacks" msgstr "テクスチャパック" -#: src/client.cpp:1616 +#: src/client.cpp:1721 msgid "Loading textures..." msgstr "テクスチャ読み込み中..." -#: src/client.cpp:1626 +#: src/client.cpp:1736 msgid "Rebuilding shaders..." msgstr "シェーダー構築中..." -#: src/client.cpp:1633 +#: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "ノードの設定中..." -#: src/client.cpp:1647 +#: src/client.cpp:1760 msgid "Initializing nodes" msgstr "ノードを設定中" -#: src/client.cpp:1655 +#: src/client.cpp:1768 msgid "Item textures..." msgstr "アイテムのテクスチャを設定中..." -#: src/client.cpp:1680 +#: src/client.cpp:1793 msgid "Done!" msgstr "完了!" -#: src/client/clientlauncher.cpp:172 +#: src/client/clientlauncher.cpp:185 msgid "Main Menu" msgstr "メインメニュー" -#: src/client/clientlauncher.cpp:210 +#: src/client/clientlauncher.cpp:223 msgid "Player name too long." msgstr "名前が長過ぎます。" -#: src/client/clientlauncher.cpp:248 +#: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" msgstr "接続失敗(またはタイムアウト)" -#: src/client/clientlauncher.cpp:413 +#: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." msgstr "ワールドが選択されていないアドレスです。続行できません。" -#: src/client/clientlauncher.cpp:420 +#: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " msgstr "ワールドが存在しません:" -#: src/client/clientlauncher.cpp:429 +#: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" msgstr "ゲーム\"の読み込みができません。" -#: src/client/clientlauncher.cpp:447 +#: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "無効なgamespecです。" @@ -582,19 +619,19 @@ msgstr "無効なgamespecです。" msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1046 src/guiFormSpecMenu.cpp:2008 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "決定" -#: src/game.cpp:1066 +#: src/game.cpp:1072 msgid "You died." msgstr "You died." -#: src/game.cpp:1067 +#: src/game.cpp:1073 msgid "Respawn" msgstr "Respawn" -#: src/game.cpp:1086 +#: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" @@ -622,7 +659,7 @@ msgstr "" "- タッチしてドラッグ:\n" "-- アイテムを置く\n" -#: src/game.cpp:1100 +#: src/game.cpp:1106 msgid "" "Default Controls:\n" "- WASD: move\n" @@ -648,75 +685,71 @@ msgstr "" "- ホイール:アイテム選択\n" "- T:チャット画面\n" -#: src/game.cpp:1119 +#: src/game.cpp:1125 msgid "Continue" msgstr "再開" -#: src/game.cpp:1123 +#: src/game.cpp:1129 msgid "Change Password" msgstr "パスワード変更" -#: src/game.cpp:1128 +#: src/game.cpp:1134 msgid "Sound Volume" msgstr "音量" -#: src/game.cpp:1130 +#: src/game.cpp:1136 msgid "Change Keys" msgstr "操作変更" -#: src/game.cpp:1133 +#: src/game.cpp:1139 msgid "Exit to Menu" msgstr "タイトル" -#: src/game.cpp:1135 +#: src/game.cpp:1141 msgid "Exit to OS" msgstr "終了" -#: src/game.cpp:1812 +#: src/game.cpp:1841 msgid "Shutting down..." msgstr "終了中..." -#: src/game.cpp:1862 -msgid "Loading..." -msgstr "読み込み中..." - -#: src/game.cpp:1919 +#: src/game.cpp:1948 msgid "Creating server..." msgstr "サーバー作成中..." -#: src/game.cpp:1956 +#: src/game.cpp:1984 msgid "Creating client..." msgstr "クライアント作成中..." -#: src/game.cpp:2129 +#: src/game.cpp:2159 msgid "Resolving address..." msgstr "アドレス解決中..." -#: src/game.cpp:2220 +#: src/game.cpp:2261 msgid "Connecting to server..." msgstr "サーバー接続中..." -#: src/game.cpp:2278 +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "アイテム定義中..." -#: src/game.cpp:2283 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "ノード定義中..." -#: src/game.cpp:2290 +#: src/game.cpp:2329 msgid "Media..." msgstr "..." -#: src/game.cpp:2295 -msgid " KB/s" -msgstr " KB/秒" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2299 -msgid " MB/s" -msgstr " MB/秒" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4255 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -724,103 +757,103 @@ msgstr "" "\n" "詳細はdebug.txtをご覧ください。" -#: src/guiFormSpecMenu.cpp:2799 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Enter" -#: src/guiFormSpecMenu.cpp:2819 +#: src/guiFormSpecMenu.cpp:2875 msgid "ok" msgstr "決定" -#: src/guiKeyChangeMenu.cpp:126 +#: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "操作の設定を変更します。" -#: src/guiKeyChangeMenu.cpp:166 +#: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" msgstr "「使用」で降りる" -#: src/guiKeyChangeMenu.cpp:181 +#: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" msgstr "「ジャンプ」二回押しで飛行モード" -#: src/guiKeyChangeMenu.cpp:297 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "すでに使われているキーです。" -#: src/guiKeyChangeMenu.cpp:372 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "キー入力待ち" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "前進" -#: src/guiKeyChangeMenu.cpp:399 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "後退" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "左に進む" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "右に進む" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "使用" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "ジャンプ" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "スニーク" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "落とす" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "インベントリ" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "チャット" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "コマンド" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "コンソール" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "飛行モード" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "高速移動モード" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" msgstr "シネマティックモード" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "すり抜けモード" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "視野範囲変更" -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "スタックの表示" @@ -844,298 +877,307 @@ msgstr "変更" msgid "Passwords do not match!" msgstr "パスワードが一致しません!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "音量:" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "閉じる" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "左ボタン" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "中ボタン" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "右ボタン" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Xボタン1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Back" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "消す" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "エンター" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "タブ" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Xボタン2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "コントロール" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "かな" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "メニュー" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "ポーズ" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "変換" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Finalキー" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junjaキー" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "半角/全角" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "無変換" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "終了" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "モード変更" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Page Down" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Page Up" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "スペース" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "下" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "実行キー" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "印刷キー" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "選択キー" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "上" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "ヘルプ" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Snapshot" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "左Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "右Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "スリープ" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "左Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "右Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "左Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "左メニュー" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "右Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "右メニュー" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "読点" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "ー" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "." -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "プラス" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr ":" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "ズーム" + +#~ msgid " MB/s" +#~ msgstr " MB/秒" + +#~ msgid " KB/s" +#~ msgstr " KB/秒" + +#~ msgid "Fly mode" +#~ msgstr "飛行モード" diff --git a/po/ko/minetest.po b/po/ko/minetest.po index 5eef8cd9a..9cb920bd0 100644 --- a/po/ko/minetest.po +++ b/po/ko/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-07-08 23:30+0200\n" "Last-Translator: Tae Lim Kook \n" -"Language-Team: Korean " -"\n" +"Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,57 +19,73 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "확인" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "저장" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "취소" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "" @@ -109,7 +125,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "" @@ -123,7 +139,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "" @@ -151,29 +167,29 @@ msgstr "" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -181,47 +197,39 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 msgid "Shortname:" msgstr "" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -229,15 +237,19 @@ msgstr "" msgid "Credits" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -278,12 +290,11 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +msgid "Name / Password :" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -292,7 +303,7 @@ msgid "Public Serverlist" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "" @@ -301,15 +312,30 @@ msgstr "" msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "" @@ -317,17 +343,18 @@ msgstr "" msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "" @@ -335,6 +362,10 @@ msgstr "" msgid "Public" msgstr "" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -347,143 +378,172 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "" @@ -499,50 +559,181 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "" + +#: src/game.cpp:1073 msgid "Respawn" msgstr "" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +msgid "Change Keys" +msgstr "" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" +#: src/guiFormSpecMenu.cpp:2855 +msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2846 -msgid "Enter " +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" msgstr "" #: src/guiKeyChangeMenu.cpp:125 @@ -557,422 +748,398 @@ msgstr "" msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "" - -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "" - -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" - -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "" diff --git a/po/ky/minetest.po b/po/ky/minetest.po index 47da737bd..7eb4ec2c3 100644 --- a/po/ky/minetest.po +++ b/po/ky/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-06-01 18:09+0200\n" "Last-Translator: Chynggyz Jumaliev \n" "Language-Team: LANGUAGE \n" @@ -18,62 +18,78 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Жүктөлүүдө..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 #, fuzzy msgid "World:" msgstr "Дүйнөнү тандаңыз:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 #, fuzzy msgid "Hide Game" msgstr "Оюн" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 #, fuzzy msgid "Depends:" msgstr "көз карандылыктары:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Сактоо" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Жокко чыгаруу" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Баарын күйгүзүү" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Баарын өчүрүү" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "күйгүзүлгөн" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Баарын күйгүзүү" @@ -114,7 +130,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "" @@ -128,7 +144,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ооба" @@ -157,30 +173,30 @@ msgstr "Жок" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Кабыл алуу" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 #, fuzzy msgid "Failed to install $1 to $2" msgstr "Дүйнөнү инициалдаштыруу катасы" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -188,49 +204,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Ылдый" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Дүйнө аты" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -238,15 +245,19 @@ msgstr "" msgid "Credits" msgstr "Алкыштар" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -288,12 +299,13 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Дареги/порту" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Аты/сырсөзү" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -303,7 +315,7 @@ msgid "Public Serverlist" msgstr "Жалпылык серверлердин тизмеси:" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Өчүрүү" @@ -312,15 +324,33 @@ msgstr "Өчүрүү" msgid "Connect" msgstr "Туташуу" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Жаратуу режими" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "күйгүзүлгөн" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "күйгүзүлгөн" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Жаңы" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Ырастоо" @@ -329,17 +359,18 @@ msgstr "Ырастоо" msgid "Start Game" msgstr "Оюнду баштоо/туташуу" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Дүйнөнү тандаңыз:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Жаратуу режими" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Убалды күйгүзүү" @@ -347,6 +378,10 @@ msgstr "Убалды күйгүзүү" msgid "Public" msgstr "Жалпылык" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Аты/сырсөзү" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -359,151 +394,183 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Күңүрт суу" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Кооз бактар" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Экисызык чыпкалоосу" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Үчсызык чыпкалоосу" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Тегиз жарык" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Бөлүкчөлөрдү күйгүзүү" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D-булуттар" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Кооз бактар" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 #, fuzzy msgid "Opaque Water" msgstr "Күңүрт суу" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Туташуу" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-текстуралоо" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Анизатропия чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Экисызык чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Үчсызык чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Көлөкөлөгүчтөр" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Баскычтарды өзгөртүү" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Бир кишилик" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-текстуралоо" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Ырастоолор" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Бир кишилик" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Ырастоо" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Башкы меню" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Ойноо" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Бир кишилик" @@ -519,40 +586,187 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Жүктөлүүдө..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Дареги чечилүүдө..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Буюм текстуралары..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Башкы меню" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Улантуу" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Сиз өлдүңүз." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Кайтадан жаралуу" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Жарыяланбас башкаруу:\n" +"- WASD: басуу\n" +"- Боштугу: секирүү/өйдө чыгуу\n" +"- Shift: уурданып басуу/ылдый түшүү\n" +"- Q: буюмду таштоо\n" +"- I: мүлк-шайман\n" +"- Чычканы: бурулуу/кароо\n" +"- Сол чычкан баскычы: казуу/согуу\n" +"- Оң чычкан баскычы: коюу/колдонуу\n" +"- Чычкан дөңгөлөгү: буюмду тандоо\n" +"- T: маек\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Улантуу" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Сырсөздү өзгөртүү" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Үн көлөмү" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Баскычтарды өзгөртүү" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Менюга чыгуу" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Оюндан чыгуу" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Оюн өчүрүлүүдө..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Сервер жаратылууда...." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Клиент жаратылууда..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Дареги чечилүүдө..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Серверге туташтырылууда..." + +#: src/game.cpp:2317 #, fuzzy msgid "Item definitions..." msgstr "Буюм текстуралары..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -560,14 +774,14 @@ msgstr "" "\n" "Толугураак маалымат үчүн, debug.txt'ти текшериңиз." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Улантуу" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -580,473 +794,421 @@ msgstr "" msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "баскычты басыңыз" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Алга" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Артка" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Солго" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Оңго" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Колдонуу" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Секирүү" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Уурданып басуу" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Ыргытуу" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Мүлк-шайман" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Маек" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Команда" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Консоль" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Учууга которуу" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Тез басууга которуу" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Тез басууга которуу" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Эски сырсөз" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Жаңы сырсөз" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Сырсөздү аныктоо" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Өзгөртүү" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Сырсөздөр дал келген жок!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Үн көлөмү: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Чыгуу" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Сол баскыч" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Ортоңку баскыч" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Оң баскыч" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Артка" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Тазалоо" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Ctrl" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Кана" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Меню" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Пауза" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Кандзи" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Режимди өзгөртүү" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Кийинки" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Боштук" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Ылдый" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Аткаруу" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Басма" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Тандоо" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Өйдө" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Жардам" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Тез сүрөт" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Сол Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Тиркемелер" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Кош. клав. 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Кош. клав. 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Оң Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Уйку" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Кош. клав. 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Кош. клав. 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Кош. клав. 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Кош. клав. 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Кош. клав. 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Кош. клав. 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Кош. клав. *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Кош. клав. +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Кош. клав. -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Кош. клав. /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Кош. клав. 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Кош. клав. 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Сол Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Оң Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Сол Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Сол меню" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Оң Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Оң меню" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Үтүр" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Кемитүү белгиси" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Айланма сан" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Кошуу белгиси" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Масштаб" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Башкы меню" +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Оюн" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#, fuzzy +#~ msgid "Games" +#~ msgstr "Оюн" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" +#~ msgid "Favorites:" +#~ msgstr "Тандалмалар:" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок." +#, fuzzy +#~ msgid "Password" +#~ msgstr "Эски сырсөз" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "" - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу" - -#~ msgid "is required by:" -#~ msgstr "талап кылынганы:" - -#~ msgid "Configuration saved. " -#~ msgstr "Конфигурация сакталды. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Эскертүү: Туура эмес конфигурация. " - -#~ msgid "Multiplayer" -#~ msgstr "Көп кишилик" - -#~ msgid "Advanced" -#~ msgstr "Кошумча" - -#~ msgid "Show Public" -#~ msgstr "Жалпылыкты көрсөтүү" - -#~ msgid "Show Favorites" -#~ msgstr "Тандалмаларды көрсөтүү" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз." - -#~ msgid "Create world" -#~ msgstr "Дүйнөнү жаратуу" - -#~ msgid "Address required." -#~ msgstr "Дареги талап кылынат." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок" - -#~ msgid "Files to be deleted" -#~ msgstr "Өчүрүлө турган файлдар" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок" +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Чектүү суюктук" #~ msgid "" #~ "Default Controls:\n" @@ -1073,82 +1235,60 @@ msgstr "" #~ "- ESC: бул меню\n" #~ "- T: маек\n" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Жарыяланбас башкаруу:\n" -#~ "- WASD: басуу\n" -#~ "- Боштугу: секирүү/өйдө чыгуу\n" -#~ "- Shift: уурданып басуу/ылдый түшүү\n" -#~ "- Q: буюмду таштоо\n" -#~ "- I: мүлк-шайман\n" -#~ "- Чычканы: бурулуу/кароо\n" -#~ "- Сол чычкан баскычы: казуу/согуу\n" -#~ "- Оң чычкан баскычы: коюу/колдонуу\n" -#~ "- Чычкан дөңгөлөгү: буюмду тандоо\n" -#~ "- T: маек\n" +#~ msgid "Failed to delete all world files" +#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок" -#~ msgid "Exit to OS" -#~ msgstr "Оюндан чыгуу" +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок" -#~ msgid "Exit to Menu" -#~ msgstr "Менюга чыгуу" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок" -#~ msgid "Sound Volume" -#~ msgstr "Үн көлөмү" +#~ msgid "Files to be deleted" +#~ msgstr "Өчүрүлө турган файлдар" -#~ msgid "Change Password" -#~ msgstr "Сырсөздү өзгөртүү" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок" -#~ msgid "Continue" -#~ msgstr "Улантуу" +#~ msgid "Address required." +#~ msgstr "Дареги талап кылынат." -#~ msgid "You died." -#~ msgstr "Сиз өлдүңүз." +#~ msgid "Create world" +#~ msgstr "Дүйнөнү жаратуу" -#~ msgid "Shutting down stuff..." -#~ msgstr "Оюн өчүрүлүүдө..." +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз." -#~ msgid "Connecting to server..." -#~ msgstr "Серверге туташтырылууда..." +#~ msgid "Show Favorites" +#~ msgstr "Тандалмаларды көрсөтүү" -#~ msgid "Resolving address..." -#~ msgstr "Дареги чечилүүдө..." +#~ msgid "Show Public" +#~ msgstr "Жалпылыкты көрсөтүү" -#~ msgid "Creating client..." -#~ msgstr "Клиент жаратылууда..." +#~ msgid "Advanced" +#~ msgstr "Кошумча" -#~ msgid "Creating server...." -#~ msgstr "Сервер жаратылууда...." +#~ msgid "Multiplayer" +#~ msgstr "Көп кишилик" -#~ msgid "Loading..." -#~ msgstr "Жүктөлүүдө..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Эскертүү: Туура эмес конфигурация. " + +#~ msgid "Configuration saved. " +#~ msgstr "Конфигурация сакталды. " + +#~ msgid "is required by:" +#~ msgstr "талап кылынганы:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Анизатропия чыпкалоосу" + +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-текстуралоо" #, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Чектүү суюктук" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Эски сырсөз" - -#~ msgid "Favorites:" -#~ msgstr "Тандалмалар:" - -#, fuzzy -#~ msgid "Games" -#~ msgstr "Оюн" - -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Оюн" +#~ msgid "Downloading" +#~ msgstr "Ылдый" diff --git a/po/lt/minetest.po b/po/lt/minetest.po index 28054b773..bd68c5840 100644 --- a/po/lt/minetest.po +++ b/po/lt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-12-11 19:23+0200\n" "Last-Translator: Jonas Kriaučiūnas \n" "Language-Team: LANGUAGE \n" @@ -19,57 +19,73 @@ msgstr "" "%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Gerai" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Įkeliama..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Pasaulis:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Slėpti vidinius" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Slėpti papild. pakų turinį" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Papildinys:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Priklauso:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Įrašyti" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Atsisakyti" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Įjungti papildinį" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Išjungti papildinį" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "įjungtas" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Įjungti visus" @@ -110,7 +126,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Pasaulis, pavadintas „$1“ jau yra" @@ -124,7 +140,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Taip" @@ -152,30 +168,30 @@ msgstr "Ne" msgid "Rename Modpack:" msgstr "Pervadinti papildinių paką:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 #, fuzzy msgid "Accept" msgstr "Priimti" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Nepavyko įdiegti $1 į $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -183,48 +199,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Pasaulio pavadinimas" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Įdiegti iš naujo" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Įdiegti" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -232,15 +240,20 @@ msgstr "" msgid "Credits" msgstr "Padėkos" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Pagrindiniai kūrėjai" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Aktyvūs pagalbininkai" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Pagrindiniai kūrėjai" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -281,12 +294,13 @@ msgid "Mods" msgstr "Papildiniai" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Adresas/Prievadas" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Vardas/slaptažodis" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -295,7 +309,7 @@ msgid "Public Serverlist" msgstr "Viešų serverių sąrašas" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Ištrinti" @@ -304,15 +318,33 @@ msgstr "Ištrinti" msgid "Connect" msgstr "Jungtis" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Kūrybinė veiksena" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Žaisti tinkle(klientas)" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Naujas" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Konfigūruoti" @@ -320,18 +352,19 @@ msgstr "Konfigūruoti" msgid "Start Game" msgstr "Pradėti žaidimą" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Pasirinkite pasaulį:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 #, fuzzy msgid "Creative Mode" msgstr "Kūrybinė veiksena" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Leisti sužeidimus" @@ -339,6 +372,10 @@ msgstr "Leisti sužeidimus" msgid "Public" msgstr "Viešas" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Vardas/slaptažodis" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -351,150 +388,180 @@ msgstr "" msgid "Server Port" msgstr "Serverio prievadas" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Serveris" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Nepermatomas vanduo" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 #, fuzzy msgid "Smooth Lighting" msgstr "Apšvietimo efektai" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Trimačiai debesys" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Nepermatomas vanduo" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Jungtis" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 #, fuzzy msgid "Shaders" msgstr "Šešėliai" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Nustatyti klavišus" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Žaisti vienam" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Nustatymai" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Žaisti vienam" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Konfigūruoti" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Pagrindinis meniu" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Žaisti" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Žaisti vienam" @@ -510,53 +577,189 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Įkeliama..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Ieškoma adreso..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Pagrindinis meniu" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +#, fuzzy +msgid "Proceed" +msgstr "Tęsti" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Jūs numirėte." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Prisikelti" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Tęsti" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Keisti slaptažodį" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Nustatyti klavišus" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Grįžti į meniu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Išeiti iš žaidimo" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Kuriamas serveris...." + +#: src/game.cpp:1984 +#, fuzzy +msgid "Creating client..." +msgstr "Kuriamas klientas..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Ieškoma adreso..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Jungiamasi prie serverio..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 -#, fuzzy -msgid "Proceed" -msgstr "Tęsti" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -569,509 +772,454 @@ msgstr "" msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Klavišas jau naudojamas" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "paspauskite klavišą" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Pirmyn" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Atgal" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Kairėn" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Dešinėn" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Naudoti" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Pašokti" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Mesti" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventorius" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Susirašinėti" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Komanda" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Senas slaptažodis" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Naujas slaptažodis" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Patvirtinti slaptažodį" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Pakeisti" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Slaptažodžiai nesutampa!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Išeiti" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Kairysis mygtukas" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Vidurinis mygtukas" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Dešinysis mygtukas" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Meniu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift (Lyg2)" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Tarpas" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Žemyn" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Vykdyti" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Aukštyn" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Pagalba" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Įterpti" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Kairysis Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Dešinysis Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Kairysis Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Dešinysis Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Kablelis" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plius" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 #, fuzzy msgid "Zoom" msgstr "Pritraukti" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Pagrindinis meniu" +#~ msgid "Game Name" +#~ msgstr "Žaidimo pavadinimas" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "GAMES" +#~ msgstr "ŽAIDIMAI" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "" +#~ msgid "Games" +#~ msgstr "Žaidimai" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Papildiniai:" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "edit game" +#~ msgstr "keisti žaidimą" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "" - -#~ msgid "Exit to OS" -#~ msgstr "Išeiti iš žaidimo" - -#~ msgid "Exit to Menu" -#~ msgstr "Grįžti į meniu" - -#~ msgid "Change Password" -#~ msgstr "Keisti slaptažodį" - -#~ msgid "Continue" -#~ msgstr "Tęsti" - -#~ msgid "You died." -#~ msgstr "Jūs numirėte." - -#~ msgid "Connecting to server..." -#~ msgstr "Jungiamasi prie serverio..." - -#~ msgid "Resolving address..." -#~ msgstr "Ieškoma adreso..." - -#, fuzzy -#~ msgid "Creating client..." -#~ msgstr "Kuriamas klientas..." - -#~ msgid "Creating server...." -#~ msgstr "Kuriamas serveris...." - -#~ msgid "Loading..." -#~ msgstr "Įkeliama..." - -#~ msgid "Add mod:" -#~ msgstr "Pridėti papildinį:" - -#~ msgid "MODS" -#~ msgstr "PAPILDINIAI" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "VIENAS ŽAIDĖJAS" - -#~ msgid "SETTINGS" -#~ msgstr "NUSTATYMAI" - -#~ msgid "Password" -#~ msgstr "Slaptažodis" - -#~ msgid "Name" -#~ msgstr "Vardas" - -#~ msgid "START SERVER" -#~ msgstr "PALEISTI SERVERĮ" - -#~ msgid "Favorites:" -#~ msgstr "Mėgiami:" - -#~ msgid "CLIENT" -#~ msgstr "ŽAISTI TINKLE" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Pridėti papildinį" - -#~ msgid "Remove selected mod" -#~ msgstr "Pašalinti pasirinktą papildinį" +#~ msgid "new game" +#~ msgstr "naujas žaidimas" #, fuzzy #~ msgid "EDIT GAME" #~ msgstr "KEISTI ŽAIDIMĄ" -#~ msgid "new game" -#~ msgstr "naujas žaidimas" +#~ msgid "Remove selected mod" +#~ msgstr "Pašalinti pasirinktą papildinį" -#~ msgid "edit game" -#~ msgstr "keisti žaidimą" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Pridėti papildinį" -#~ msgid "Mods:" -#~ msgstr "Papildiniai:" +#~ msgid "CLIENT" +#~ msgstr "ŽAISTI TINKLE" -#~ msgid "Games" -#~ msgstr "Žaidimai" +#~ msgid "Favorites:" +#~ msgstr "Mėgiami:" -#~ msgid "GAMES" -#~ msgstr "ŽAIDIMAI" +#~ msgid "START SERVER" +#~ msgstr "PALEISTI SERVERĮ" -#~ msgid "Game Name" -#~ msgstr "Žaidimo pavadinimas" +#~ msgid "Name" +#~ msgstr "Vardas" + +#~ msgid "Password" +#~ msgstr "Slaptažodis" + +#~ msgid "SETTINGS" +#~ msgstr "NUSTATYMAI" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "VIENAS ŽAIDĖJAS" + +#~ msgid "MODS" +#~ msgstr "PAPILDINIAI" + +#~ msgid "Add mod:" +#~ msgstr "Pridėti papildinį:" diff --git a/po/minetest.pot b/po/minetest.pot index 9dc989a79..2fd0ba1be 100644 --- a/po/minetest.pot +++ b/po/minetest.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-14 16:32+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,10 +17,26 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "" @@ -43,14 +59,14 @@ msgstr "" msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "" #: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200 -#: src/keycode.cpp:224 +#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "" @@ -121,7 +137,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "" @@ -149,29 +165,29 @@ msgstr "" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -219,15 +235,19 @@ msgstr "" msgid "Credits" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -281,7 +301,7 @@ msgid "Public Serverlist" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "" @@ -309,11 +329,11 @@ msgstr "" msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "" @@ -321,17 +341,18 @@ msgstr "" msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "" @@ -355,163 +376,172 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" #: builtin/mainmenu/tab_settings.lua:21 -msgid "No Filter" +msgid "Opaque Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua:22 -msgid "Bilinear Filter" +msgid "Simple Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua:23 -msgid "Trilinear Filter" +msgid "Fancy Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua:32 -msgid "No Mipmap" +msgid "No Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua:33 -msgid "Mipmap" +msgid "Bilinear Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:77 +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:81 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:183 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "" -#: builtin/mainmenu/tab_settings.lua:185 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:189 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:191 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "" -#: builtin/mainmenu/tab_settings.lua:193 +#: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 +#: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:201 +#: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:205 +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:207 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:215 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:219 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:223 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:229 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:235 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:287 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:80 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:85 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:208 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "" @@ -527,51 +557,55 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:1563 +#: src/client.cpp:1721 msgid "Loading textures..." msgstr "" -#: src/client.cpp:1573 +#: src/client.cpp:1736 msgid "Rebuilding shaders..." msgstr "" -#: src/client.cpp:1580 +#: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "" -#: src/client.cpp:1595 +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" -#: src/client.cpp:1620 +#: src/client.cpp:1793 msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:172 +#: src/client/clientlauncher.cpp:185 msgid "Main Menu" msgstr "" -#: src/client/clientlauncher.cpp:210 +#: src/client/clientlauncher.cpp:223 msgid "Player name too long." msgstr "" -#: src/client/clientlauncher.cpp:248 +#: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:413 +#: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." msgstr "" -#: src/client/clientlauncher.cpp:420 +#: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/clientlauncher.cpp:429 +#: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:447 +#: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "" @@ -579,19 +613,19 @@ msgstr "" msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1061 src/guiFormSpecMenu.cpp:2008 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "" -#: src/game.cpp:1081 +#: src/game.cpp:1072 msgid "You died." msgstr "" -#: src/game.cpp:1082 +#: src/game.cpp:1073 msgid "Respawn" msgstr "" -#: src/game.cpp:1101 +#: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" @@ -607,7 +641,7 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1115 +#: src/game.cpp:1106 msgid "" "Default Controls:\n" "- WASD: move\n" @@ -622,177 +656,173 @@ msgid "" "- T: chat\n" msgstr "" -#: src/game.cpp:1134 +#: src/game.cpp:1125 msgid "Continue" msgstr "" -#: src/game.cpp:1138 +#: src/game.cpp:1129 msgid "Change Password" msgstr "" -#: src/game.cpp:1143 +#: src/game.cpp:1134 msgid "Sound Volume" msgstr "" -#: src/game.cpp:1145 +#: src/game.cpp:1136 msgid "Change Keys" msgstr "" -#: src/game.cpp:1148 +#: src/game.cpp:1139 msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1150 +#: src/game.cpp:1141 msgid "Exit to OS" msgstr "" -#: src/game.cpp:1827 +#: src/game.cpp:1841 msgid "Shutting down..." msgstr "" -#: src/game.cpp:1876 -msgid "Loading..." -msgstr "" - -#: src/game.cpp:1933 +#: src/game.cpp:1948 msgid "Creating server..." msgstr "" -#: src/game.cpp:1970 +#: src/game.cpp:1984 msgid "Creating client..." msgstr "" -#: src/game.cpp:2143 +#: src/game.cpp:2159 msgid "Resolving address..." msgstr "" -#: src/game.cpp:2234 +#: src/game.cpp:2261 msgid "Connecting to server..." msgstr "" -#: src/game.cpp:2292 +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2297 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2304 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2309 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2313 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4265 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2799 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2819 +#: src/guiFormSpecMenu.cpp:2875 msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:126 +#: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -#: src/guiKeyChangeMenu.cpp:166 +#: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:181 +#: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:297 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:372 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "" @@ -816,298 +846,298 @@ msgstr "" msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "" diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 438e7e4ac..7dc7361c4 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-06-21 15:48+0200\n" "Last-Translator: sfan5 \n" "Language-Team: LANGUAGE \n" @@ -18,62 +18,78 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 #, fuzzy msgid "World:" msgstr "Navnet på verdenen" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 #, fuzzy msgid "Hide Game" msgstr "Spill" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 #, fuzzy msgid "Depends:" msgstr "Avhenger av:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Lagre" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Avbryt" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Aktiver Alle" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Deaktiver Alle" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "aktivert" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Aktiver Alle" @@ -114,7 +130,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "" @@ -128,7 +144,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ja" @@ -156,29 +172,29 @@ msgstr "Nei" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -186,48 +202,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Navnet på verdenen" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -235,15 +243,19 @@ msgstr "" msgid "Credits" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -284,12 +296,11 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +msgid "Name / Password :" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -298,7 +309,7 @@ msgid "Public Serverlist" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "" @@ -307,15 +318,33 @@ msgstr "" msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Opprett" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "aktivert" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "aktivert" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "" @@ -323,17 +352,18 @@ msgstr "" msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "" @@ -341,6 +371,10 @@ msgstr "" msgid "Public" msgstr "" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -353,143 +387,172 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "" @@ -505,50 +568,181 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "" +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Du døde." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +msgid "Change Keys" +msgstr "" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" +#: src/guiFormSpecMenu.cpp:2855 +msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2846 -msgid "Enter " +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" msgstr "" #: src/guiKeyChangeMenu.cpp:125 @@ -563,438 +757,409 @@ msgstr "" msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "" +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Spill" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" - -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "" - -#~ msgid "is required by:" -#~ msgstr "trengs av:" - -#~ msgid "Configuration saved. " -#~ msgstr "Konfigurasjon lagret. " - -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n" -#~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen." +#, fuzzy +#~ msgid "Games" +#~ msgstr "Spill" #~ msgid "" #~ "Warning: Some mods are not configured yet.\n" @@ -1003,13 +1168,15 @@ msgstr "" #~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n" #~ "De vil bli aktivert som standard når du lagrer konfigurasjonen." -#~ msgid "You died." -#~ msgstr "Du døde." +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n" +#~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen." -#, fuzzy -#~ msgid "Games" -#~ msgstr "Spill" +#~ msgid "Configuration saved. " +#~ msgstr "Konfigurasjon lagret. " -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Spill" +#~ msgid "is required by:" +#~ msgstr "trengs av:" diff --git a/po/nl/minetest.po b/po/nl/minetest.po index c81353d43..9efaf95fc 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2014-01-05 11:31+0200\n" "Last-Translator: b p \n" "Language-Team: \n" @@ -18,57 +18,73 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Bezig met laden..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Wereld:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Geen std" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Verberg mp mods" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Afhankelijkheden:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Bewaar" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Annuleer" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "MP inschakelen" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "MP uitschakelen" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "ingeschakeld" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Alles aan" @@ -108,7 +124,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Wereld \"$1\" bestaat al" @@ -122,7 +138,7 @@ msgstr "Weet je zeker dat je \"$1\" wilt verwijderen?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Ja" @@ -150,15 +166,15 @@ msgstr "Nee" msgid "Rename Modpack:" msgstr "Modverzameling hernoemen:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Accepteren" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Mod installeren: bestand: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -167,15 +183,15 @@ msgstr "" "\n" "Mod installeren: niet ondersteund bestandstype \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Installeren van $1 in $2 is mislukt" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "Mod installeren: kan geen geschikte map vinden voor modverzameling $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Mod installeren: kan geen echte modnaam vinden voor: $1" @@ -183,49 +199,40 @@ msgstr "Mod installeren: kan geen echte modnaam vinden voor: $1" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Downloaden" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Naam wereld" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Rang" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "opnieuw installeren" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Installeren" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Pagina $1 van $2" @@ -233,15 +240,20 @@ msgstr "Pagina $1 van $2" msgid "Credits" msgstr "Credits" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Hoofdontwikkelaars" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Actieve bijdragers" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Hoofdontwikkelaars" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Vroegere bijdragers" @@ -282,12 +294,13 @@ msgid "Mods" msgstr "Mods" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "IP-Adres/Poort" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Naam/Wachtwoord" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -296,7 +309,7 @@ msgid "Public Serverlist" msgstr "Publieke Serverlijst" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Verwijderen" @@ -305,15 +318,33 @@ msgstr "Verwijderen" msgid "Connect" msgstr "Verbinden" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Creatieve Modus" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "ingeschakeld" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "ingeschakeld" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nieuw" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Instellingen" @@ -321,17 +352,18 @@ msgstr "Instellingen" msgid "Start Game" msgstr "Start Server" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Selecteer Wereld:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Creatieve Modus" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Schade inschakelen" @@ -339,6 +371,10 @@ msgstr "Schade inschakelen" msgid "Public" msgstr "Publiek" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Naam/Wachtwoord" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -351,150 +387,183 @@ msgstr "" msgid "Server Port" msgstr "Serverpoort" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Ondoorzichtig water" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Mooie bomen" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Bi-Lineaire Filtering" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-Lineare Filtering" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Mooie verlichting" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Deeltjes aanzetten" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D wolken" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Mooie bomen" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Ondoorzichtig water" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Verbinden" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotrope Filtering" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-Lineaire Filtering" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Lineare Filtering" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shaders" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Toetsen" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Singleplayer" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Instellingen" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Singleplayer" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Instellingen" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Hoofdmenu" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Speel" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Singleplayer" @@ -511,39 +580,186 @@ msgstr "Geen informatie aanwezig" msgid "Texturepacks" msgstr "Texturen" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Bezig met laden..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "IP-adres opzoeken..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Voorwerp texturen..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Hoofdmenu" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Fout bij verbinden (time out?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Geen wereld en adres geselecteerd. Niks te doen." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Kan niet de game laden of vinden \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Onjuiste gamespec." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Doorgaan" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Je bent gestorven." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Herspawnen" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Standaard toetsen:\n" +"- W,A,S,D: bewegen\n" +"- Spatie: spring/klim\n" +"- Shift: kruip/duik\n" +"- Q: weggooien\n" +"- I: rugzak\n" +"- Muis: draaien/kijken\n" +"- L.muisknop: graaf/sla\n" +"- R.muisknop: plaats/gebruik\n" +"- Muiswiel: selecteer\n" +"- T: chat\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Verder spelen" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Verander wachtwoord" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Volume" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Toetsen" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Terug naar menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Afsluiten" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Stopzetten..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Bezig server te maken..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Bezig client te maken..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "IP-adres opzoeken..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Verbinding met de server wordt gemaakt..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Voorwerpdefinities..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Node definities..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -551,14 +767,14 @@ msgstr "" "\n" "Lees debug.txt voor details." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Doorgaan" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -573,477 +789,486 @@ msgstr "\"Gebruiken\" = Omlaag" msgid "Double tap \"jump\" to toggle fly" msgstr "2x \"springen\" om te vliegen" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Toets is al in gebruik" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "druk op" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Vooruit" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Achteruit" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Links" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Rechts" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Gebruiken" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Springen" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Kruipen" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Weggooien" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Rugzak" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chatten" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Opdracht" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Console" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Vliegen aan/uit" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Snel bewegen aan/uit" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Snel bewegen aan/uit" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Noclip aan/uit" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Range instellen" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Print stacks" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Huidig wachtwoord" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Nieuw wachtwoord" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Herhaal wachtwoord" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Veranderen" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Wachtwoorden zijn niet gelijk!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volume: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Terug" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Linkermuisknop" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Muiswielknop" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Rechtmuisknop" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X knop 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Terug" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Wissen" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Terug" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X knop 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Kapitaal" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pauze" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Converteren" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Modus veranderen" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Volgende" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Eerste" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Spatie" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Omlaag" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Uitvoeren" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Selecteren" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Omhoog" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Help" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Screenshot" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Linker Windowstoets" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Menu" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Rechter Windowstoets" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Slaapknop" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Linker Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Rechter Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Linker Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Linker Menu" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Rechter Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Rechter Menu" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Komma" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Min" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punt" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "SAK" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase EOF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Hoofdmenu" +#~ msgid "Game Name" +#~ msgstr "Spel" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Fout bij verbinden (time out?)" +#~ msgid "GAMES" +#~ msgstr "SPELLEN" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Geen wereld en adres geselecteerd. Niks te doen." +#~ msgid "Games" +#~ msgstr "Spellen" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Mods:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Kan niet de game laden of vinden \"" +#~ msgid "edit game" +#~ msgstr "spel aanpassen" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Onjuiste gamespec." +#~ msgid "new game" +#~ msgstr "nieuw spel" -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "EDIT GAME" +#~ msgstr "SPEL AANPASSEN" + +#~ msgid "Remove selected mod" +#~ msgstr "Geselecteerde mod verwijderen" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Mod toevoegen" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Favorieten:" + +#~ msgid "START SERVER" +#~ msgstr "START SERVER" + +#~ msgid "Name" +#~ msgstr "Naam" + +#~ msgid "Password" +#~ msgstr "Wachtwoord" + +#~ msgid "SETTINGS" +#~ msgstr "INSTELLINGEN" + +#~ msgid "Preload item visuals" +#~ msgstr "Voorwerpen vooraf laden" + +#~ msgid "Finite Liquid" +#~ msgstr "Eindige vloeistoffen" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "SINGLEPLAYER" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTUREN" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "Add mod:" +#~ msgstr "Mod toevoegen:" + +#~ msgid "Local install" +#~ msgstr "Plaatselijk installeren" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item" +#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n" +#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie " +#~ "bewaard. " -#~ msgid "is required by:" -#~ msgstr "is benodigd voor:" - -#~ msgid "Configuration saved. " -#~ msgstr "Instellingen bewaard. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Waarschuwing: Instellingen niet consistent. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens" - -#~ msgid "Multiplayer" -#~ msgstr "Multiplayer" - -#~ msgid "Advanced" -#~ msgstr "Geavanceerd" - -#~ msgid "Show Public" -#~ msgstr "Publieke server" - -#~ msgid "Show Favorites" -#~ msgstr "Favourieten" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Laat het adres leeg om een lokale server te starten." - -#~ msgid "Create world" -#~ msgstr "Maak wereld aan" - -#~ msgid "Address required." -#~ msgstr "IP-adres nodig." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd" - -#~ msgid "Files to be deleted" -#~ msgstr "Deze bestanden worden verwijderd" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Niet alle bestanden zijn verwijderd" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "LEt op: Sommige ingestelde mods zijn vermist.\n" +#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. " #~ msgid "" #~ "Default Controls:\n" @@ -1070,147 +1295,64 @@ msgstr "Onjuiste gamespec." #~ "- ESC: Menu\n" #~ "- T: Chat\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Niet alle bestanden zijn verwijderd" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden" + +#~ msgid "Files to be deleted" +#~ msgstr "Deze bestanden worden verwijderd" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd" + +#~ msgid "Address required." +#~ msgstr "IP-adres nodig." + +#~ msgid "Create world" +#~ msgstr "Maak wereld aan" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Laat het adres leeg om een lokale server te starten." + +#~ msgid "Show Favorites" +#~ msgstr "Favourieten" + +#~ msgid "Show Public" +#~ msgstr "Publieke server" + +#~ msgid "Advanced" +#~ msgstr "Geavanceerd" + +#~ msgid "Multiplayer" +#~ msgstr "Multiplayer" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Waarschuwing: Instellingen niet consistent. " + +#~ msgid "Configuration saved. " +#~ msgstr "Instellingen bewaard. " + +#~ msgid "is required by:" +#~ msgstr "is benodigd voor:" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "LEt op: Sommige ingestelde mods zijn vermist.\n" -#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. " +#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n" -#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie " -#~ "bewaard. " +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotrope Filtering" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Standaard toetsen:\n" -#~ "- W,A,S,D: bewegen\n" -#~ "- Spatie: spring/klim\n" -#~ "- Shift: kruip/duik\n" -#~ "- Q: weggooien\n" -#~ "- I: rugzak\n" -#~ "- Muis: draaien/kijken\n" -#~ "- L.muisknop: graaf/sla\n" -#~ "- R.muisknop: plaats/gebruik\n" -#~ "- Muiswiel: selecteer\n" -#~ "- T: chat\n" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" -#~ msgid "Exit to OS" -#~ msgstr "Afsluiten" - -#~ msgid "Exit to Menu" -#~ msgstr "Terug naar menu" - -#~ msgid "Sound Volume" -#~ msgstr "Volume" - -#~ msgid "Change Password" -#~ msgstr "Verander wachtwoord" - -#~ msgid "Continue" -#~ msgstr "Verder spelen" - -#~ msgid "You died." -#~ msgstr "Je bent gestorven." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Stopzetten..." - -#~ msgid "Connecting to server..." -#~ msgstr "Verbinding met de server wordt gemaakt..." - -#~ msgid "Resolving address..." -#~ msgstr "IP-adres opzoeken..." - -#~ msgid "Creating client..." -#~ msgstr "Bezig client te maken..." - -#~ msgid "Creating server...." -#~ msgstr "Bezig server te maken..." - -#~ msgid "Loading..." -#~ msgstr "Bezig met laden..." - -#~ msgid "Local install" -#~ msgstr "Plaatselijk installeren" - -#~ msgid "Add mod:" -#~ msgstr "Mod toevoegen:" - -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTUREN" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "SINGLEPLAYER" - -#~ msgid "Finite Liquid" -#~ msgstr "Eindige vloeistoffen" - -#~ msgid "Preload item visuals" -#~ msgstr "Voorwerpen vooraf laden" - -#~ msgid "SETTINGS" -#~ msgstr "INSTELLINGEN" - -#~ msgid "Password" -#~ msgstr "Wachtwoord" - -#~ msgid "Name" -#~ msgstr "Naam" - -#~ msgid "START SERVER" -#~ msgstr "START SERVER" - -#~ msgid "Favorites:" -#~ msgstr "Favorieten:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Mod toevoegen" - -#~ msgid "Remove selected mod" -#~ msgstr "Geselecteerde mod verwijderen" - -#~ msgid "EDIT GAME" -#~ msgstr "SPEL AANPASSEN" - -#~ msgid "new game" -#~ msgstr "nieuw spel" - -#~ msgid "edit game" -#~ msgstr "spel aanpassen" - -#~ msgid "Mods:" -#~ msgstr "Mods:" - -#~ msgid "Games" -#~ msgstr "Spellen" - -#~ msgid "GAMES" -#~ msgstr "SPELLEN" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren" - -#~ msgid "Game Name" -#~ msgstr "Spel" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Downloaden" diff --git a/po/pl/minetest.po b/po/pl/minetest.po index c49c340cd..23d1f83c8 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-10-08 21:22+0200\n" "Last-Translator: Maciej Kasatkin \n" "Language-Team: Polish <>\n" @@ -19,59 +19,75 @@ msgstr "" "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Ładowanie..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Świat:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Ukryj Grę" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Zależy od:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Zapisz" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Anuluj" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Włącz wszystkie" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Wyłącz wszystkie" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "włączone" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Włącz wszystkie" @@ -111,7 +127,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Istnieje już świat o nazwie \"$1\"" @@ -125,7 +141,7 @@ msgstr "Na pewno usunąć \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Tak" @@ -153,15 +169,15 @@ msgstr "Nie" msgid "Rename Modpack:" msgstr "Zmień nazwe Paczki Modów:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Accept" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Zainstaluj mod: plik: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -170,16 +186,16 @@ msgstr "" "\n" "Instalacja moda: nieznany typ pliku \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Instalacja $1 do $2 nie powiodła się" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" @@ -187,49 +203,40 @@ msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Ściągnij" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Nazwa świata" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Ocena" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Ponowna instalacja" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Instaluj" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Strona $1 z $2" @@ -237,15 +244,20 @@ msgstr "Strona $1 z $2" msgid "Credits" msgstr "Autorzy" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Twórcy" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Aktywni współautorzy" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Twórcy" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Byli współautorzy" @@ -289,12 +301,13 @@ msgid "Mods" msgstr "Mody" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Adres/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nazwa gracza/Hasło" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -303,7 +316,7 @@ msgid "Public Serverlist" msgstr "Lista publicznych serwerów" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Usuń" @@ -312,15 +325,33 @@ msgstr "Usuń" msgid "Connect" msgstr "Połącz" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Tryb kreatywny" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "włączone" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "włączone" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Klient" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nowy" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Ustaw" @@ -328,17 +359,18 @@ msgstr "Ustaw" msgid "Start Game" msgstr "Rozpocznij grę/Połącz" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Wybierz świat:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Tryb kreatywny" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Włącz obrażenia" @@ -346,6 +378,10 @@ msgstr "Włącz obrażenia" msgid "Public" msgstr "Publiczne" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nazwa gracza/Hasło" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -358,150 +394,183 @@ msgstr "" msgid "Server Port" msgstr "Port Serwera" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Nie podano nazwy świata lub nie wybrano gry" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Serwer" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Nieprzeźroczysta woda" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Ozdobne drzewa" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Filtrowanie dwuliniowe" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtrowanie trójliniowe" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Płynne oświetlenie" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Włącz cząstki" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Chmury 3D" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Ozdobne drzewa" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Nieprzeźroczysta woda" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Połącz" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mappowanie" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtrowanie anizotropowe" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtrowanie dwuliniowe" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtrowanie trójliniowe" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shadery" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Zmień klawisze" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Pojedynczy gracz" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mappowanie" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Ustawienia" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Pojedynczy gracz" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Ustaw" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Menu główne" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Graj" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Pojedynczy gracz" @@ -518,39 +587,186 @@ msgstr "Brak informacjii" msgid "Texturepacks" msgstr "Paczki tekstur" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Ładowanie..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Sprawdzanie adresu..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Tekstury przedmiotów..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menu główne" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Błąd połączenia (brak odpowiedzi?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nie wybrano świata ani adresu." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Nie można znaleźć lub wczytać trybu gry \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Nieprawidłowa specyfikacja trybu gry." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Kontynuuj" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Zginąłeś." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Wróć do gry" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Domyślne sterowanie:↵\n" +"- WASD: ruch↵\n" +"- Spacja: skok/wspinanie się↵\n" +"- Shift: skradanie się/schodzenie w dół↵\n" +"- Q: upuszczenie przedmiotu↵\n" +"- I: ekwipunek↵\n" +"- Mysz: obracanie się/patrzenie↵\n" +"- Lewy przycisk myszy: kopanie/uderzanie↵\n" +"- Prawy przycisk myszy: postawienie/użycie przedmiotu↵\n" +"- Rolka myszy: wybór przedmiotu↵\n" +"- T: chat\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Dalej" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Zmień hasło" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Głośność" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Zmień klawisze" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Wyjście do menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Wyjście z gry" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Wyłączanie..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Tworzenie serwera...." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Tworzenie klienta..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Sprawdzanie adresu..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Łączenie z serwerem..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definicje przedmiotów..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definicje nod..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -558,14 +774,14 @@ msgstr "" "\n" "Sprawdź plik debug.txt by uzyskać więcej informacji." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Kontynuuj" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -580,478 +796,487 @@ msgstr "\"Użyj\" = wspinaj się" msgid "Double tap \"jump\" to toggle fly" msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Klawisz już zdefiniowany" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "naciśnij klawisz" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Przód" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Tył" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Lewo" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Prawo" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Użyj" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Skok" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Skradanie" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Upuść" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Ekwipunek" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Czat" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Komenda" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konsola" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Przełącz tryb latania" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Przełącz tryb szybki" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Przełącz tryb szybki" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Przełącz tryb noclip" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Zasięg widzenia" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Drukuj stosy" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Stare hasło" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Nowe hasło" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Potwierdź hasło" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Zmień" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Hasła nie są jednakowe!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Głośność: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Wyjście" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Lewy przycisk myszy" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Środkowy przycisk myszy" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Prawy przycisk myszy" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X Button 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Backspace" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Delete" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Button 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pause" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mode Change" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Next" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Prior" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Spacja" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Dół" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Execute" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Select" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Góra" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Pomoc" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Snapshot" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Lewy Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Prawy Windows" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sleep" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Lewy Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Prawy Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Lewy Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Lewy Menu" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Prawy Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Prawy Menu" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Przecinek" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Minus" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Kropka" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menu główne" +#~ msgid "Game Name" +#~ msgstr "Nazwa Gry" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Błąd połączenia (brak odpowiedzi?)" +#~ msgid "GAMES" +#~ msgstr "GRY" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nie wybrano świata ani adresu." +#~ msgid "Games" +#~ msgstr "Gry" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Mody:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Nie można znaleźć lub wczytać trybu gry \"" +#~ msgid "edit game" +#~ msgstr "edytuj grę" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Nieprawidłowa specyfikacja trybu gry." +#~ msgid "new game" +#~ msgstr "nowa gra" -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "EDIT GAME" +#~ msgstr "EDYTUJ GRĘ" + +#~ msgid "Remove selected mod" +#~ msgstr "Usuń zaznaczony mod" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<--Dodaj mod" + +#~ msgid "CLIENT" +#~ msgstr "KLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Ulubione:" + +#~ msgid "START SERVER" +#~ msgstr "URUCHOM SERWER" + +#~ msgid "Name" +#~ msgstr "Nazwa" + +#~ msgid "Password" +#~ msgstr "Hasło" + +#~ msgid "SETTINGS" +#~ msgstr "USTAWIENIA" + +#~ msgid "Preload item visuals" +#~ msgstr "Ładuj obrazy przedmiotów" + +#~ msgid "Finite Liquid" +#~ msgstr "Realistyczne ciecze" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "TRYB JEDNOOSOBOWY" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACZKI TEKSTUR" + +#~ msgid "MODS" +#~ msgstr "MODY" + +#, fuzzy +#~ msgid "Add mod:" +#~ msgstr "<<--Dodaj mod" + +#, fuzzy +#~ msgid "Local install" +#~ msgstr "Instaluj" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: " -#~ "przenieś pojedynczy przedmiot" +#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n" +#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. " -#~ msgid "is required by:" -#~ msgstr "wymagane przez:" - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguracja zapisana. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki" - -#~ msgid "Multiplayer" -#~ msgstr "Gra wieloosobowa" - -#~ msgid "Advanced" -#~ msgstr "Zaawansowane" - -#~ msgid "Show Public" -#~ msgstr "Pokaż publiczne" - -#~ msgid "Show Favorites" -#~ msgstr "Pokaż ulubione" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny." - -#~ msgid "Create world" -#~ msgstr "Stwórz świat" - -#~ msgid "Address required." -#~ msgstr "Wymagany adres." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Nie można skasować świata: nic nie zaznaczono" - -#~ msgid "Files to be deleted" -#~ msgstr "Pliki do skasowania" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Nie udało się skasować wszystkich plików świata" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n" +#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. " #~ msgid "" #~ "Default Controls:\n" @@ -1078,148 +1303,65 @@ msgstr "Nieprawidłowa specyfikacja trybu gry." #~ "- ESC: to menu\n" #~ "- T: czat\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Nie udało się skasować wszystkich plików świata" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry" + +#~ msgid "Files to be deleted" +#~ msgstr "Pliki do skasowania" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Nie można skasować świata: nic nie zaznaczono" + +#~ msgid "Address required." +#~ msgstr "Wymagany adres." + +#~ msgid "Create world" +#~ msgstr "Stwórz świat" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny." + +#~ msgid "Show Favorites" +#~ msgstr "Pokaż ulubione" + +#~ msgid "Show Public" +#~ msgstr "Pokaż publiczne" + +#~ msgid "Advanced" +#~ msgstr "Zaawansowane" + +#~ msgid "Multiplayer" +#~ msgstr "Gra wieloosobowa" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. " + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguracja zapisana. " + +#~ msgid "is required by:" +#~ msgstr "wymagane przez:" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n" -#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. " +#~ "Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: " +#~ "przenieś pojedynczy przedmiot" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n" -#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. " +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtrowanie anizotropowe" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Domyślne sterowanie:↵\n" -#~ "- WASD: ruch↵\n" -#~ "- Spacja: skok/wspinanie się↵\n" -#~ "- Shift: skradanie się/schodzenie w dół↵\n" -#~ "- Q: upuszczenie przedmiotu↵\n" -#~ "- I: ekwipunek↵\n" -#~ "- Mysz: obracanie się/patrzenie↵\n" -#~ "- Lewy przycisk myszy: kopanie/uderzanie↵\n" -#~ "- Prawy przycisk myszy: postawienie/użycie przedmiotu↵\n" -#~ "- Rolka myszy: wybór przedmiotu↵\n" -#~ "- T: chat\n" - -#~ msgid "Exit to OS" -#~ msgstr "Wyjście z gry" - -#~ msgid "Exit to Menu" -#~ msgstr "Wyjście do menu" - -#~ msgid "Sound Volume" -#~ msgstr "Głośność" - -#~ msgid "Change Password" -#~ msgstr "Zmień hasło" - -#~ msgid "Continue" -#~ msgstr "Dalej" - -#~ msgid "You died." -#~ msgstr "Zginąłeś." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Wyłączanie..." - -#~ msgid "Connecting to server..." -#~ msgstr "Łączenie z serwerem..." - -#~ msgid "Resolving address..." -#~ msgstr "Sprawdzanie adresu..." - -#~ msgid "Creating client..." -#~ msgstr "Tworzenie klienta..." - -#~ msgid "Creating server...." -#~ msgstr "Tworzenie serwera...." - -#~ msgid "Loading..." -#~ msgstr "Ładowanie..." +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mappowanie" #, fuzzy -#~ msgid "Local install" -#~ msgstr "Instaluj" - -#, fuzzy -#~ msgid "Add mod:" -#~ msgstr "<<--Dodaj mod" - -#~ msgid "MODS" -#~ msgstr "MODY" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACZKI TEKSTUR" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "TRYB JEDNOOSOBOWY" - -#~ msgid "Finite Liquid" -#~ msgstr "Realistyczne ciecze" - -#~ msgid "Preload item visuals" -#~ msgstr "Ładuj obrazy przedmiotów" - -#~ msgid "SETTINGS" -#~ msgstr "USTAWIENIA" - -#~ msgid "Password" -#~ msgstr "Hasło" - -#~ msgid "Name" -#~ msgstr "Nazwa" - -#~ msgid "START SERVER" -#~ msgstr "URUCHOM SERWER" - -#~ msgid "Favorites:" -#~ msgstr "Ulubione:" - -#~ msgid "CLIENT" -#~ msgstr "KLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<--Dodaj mod" - -#~ msgid "Remove selected mod" -#~ msgstr "Usuń zaznaczony mod" - -#~ msgid "EDIT GAME" -#~ msgstr "EDYTUJ GRĘ" - -#~ msgid "new game" -#~ msgstr "nowa gra" - -#~ msgid "edit game" -#~ msgstr "edytuj grę" - -#~ msgid "Mods:" -#~ msgstr "Mody:" - -#~ msgid "Games" -#~ msgstr "Gry" - -#~ msgid "GAMES" -#~ msgstr "GRY" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się" - -#~ msgid "Game Name" -#~ msgstr "Nazwa Gry" +#~ msgid "Downloading" +#~ msgstr "Ściągnij" diff --git a/po/pt/minetest.po b/po/pt/minetest.po index 24680e2d4..b433ef245 100644 --- a/po/pt/minetest.po +++ b/po/pt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2014-01-06 01:45+0200\n" "Last-Translator: João Farias \n" "Language-Team: LANGUAGE \n" @@ -18,59 +18,75 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "A carregar..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Mundo:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Esconder Jogo" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Extra:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Depende de:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Guardar" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Ativar Tudo" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Desativar Tudo" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "ativo" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Ativar Tudo" @@ -111,7 +127,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "O mundo com o nome \"$1\" já existe" @@ -125,7 +141,7 @@ msgstr "Tem a certeza que pertende eliminar \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Sim" @@ -153,15 +169,15 @@ msgstr "Não" msgid "Rename Modpack:" msgstr "Renomear Pacote de Extras:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Aceitar" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Instalar Extra: ficheiro: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -170,15 +186,15 @@ msgstr "" "\n" "Instalar Extra: tipo de ficheiro desconhecido \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Falha ao instalar de $1 ao $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -186,49 +202,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Descarregar" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Nome do Mundo" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Classificação" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "re-Instalar" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Instalar" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Página $1 de $2" @@ -236,15 +243,20 @@ msgstr "Página $1 de $2" msgid "Credits" msgstr "Créditos" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Desenvolvedores Chave" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Contribuintes Ativos" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Desenvolvedores Chave" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Antigos Contribuintes" @@ -288,12 +300,13 @@ msgid "Mods" msgstr "Extras" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Endereço/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nome/Senha" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -302,7 +315,7 @@ msgid "Public Serverlist" msgstr "Lista de Servidores Públicos" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Eliminar" @@ -311,15 +324,33 @@ msgstr "Eliminar" msgid "Connect" msgstr "Ligar" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Modo Criativo" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "ativo" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "ativo" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Novo" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Configurar" @@ -327,17 +358,18 @@ msgstr "Configurar" msgid "Start Game" msgstr "Jogar" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Seleccionar Mundo:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Modo Criativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Ativar Dano" @@ -345,6 +377,10 @@ msgstr "Ativar Dano" msgid "Public" msgstr "Público" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nome/Senha" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -357,150 +393,183 @@ msgstr "" msgid "Server Port" msgstr "Porta" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Mundo sem nome ou nenhum jogo selecionado" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Servidor" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Água Opaca" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Árvores Melhoradas" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Filtro Bi-Linear" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtro Tri-Linear" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Iluminação Suave" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Ativar Partículas" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Nuvens 3D" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Árvores Melhoradas" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Água Opaca" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Ligar" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtro Anisotrópico" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtro Bi-Linear" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtro Tri-Linear" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Sombras" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Mudar teclas" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Um Jogador" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Definições" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Um Jogador" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Configurar" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Menu Principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Jogar" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Um Jogador" @@ -517,39 +586,187 @@ msgstr "Sem informação" msgid "Texturepacks" msgstr "Pacotes de Texturas" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "A carregar..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "A resolver endereço..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Texturas dos items..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menu Principal" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Erro de conexão (excedeu tempo?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Não foi possível encontrar ou carregar jogo \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "gamespec inválido." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Continuar" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Morreste." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Reaparecer" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Teclas por defeito:\n" +"- WASD: mover\n" +"- Barra de espaço: saltar/subir\n" +"- Shift: andar cuidadosamente/descer\n" +"- Q: Largar item\n" +"- I: Inventário\n" +"- Rato: virar/olhar\n" +"- Clique esquerdo: cavar/bater\n" +"- Clique direito: colocar/utilizar\n" +"- Roda do rato: seleccionar item\n" +"- T: conversação\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Continuar" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Mudar Senha" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Volume do som" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Mudar teclas" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Sair para Menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Sair para o sistema" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "A desligar..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "A criar servidor..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "A criar cliente..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "A resolver endereço..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "A conectar ao servidor..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definições dos Itens..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Dados..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -557,14 +774,14 @@ msgstr "" "\n" "Consulte debug.txt para mais detalhes." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Continuar" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)" @@ -577,477 +794,489 @@ msgstr "\"Use\" = descer" msgid "Double tap \"jump\" to toggle fly" msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Tecla já em uso" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "pressione a tecla" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Avançar" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Recuar" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Esquerda" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Direita" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Usar" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Saltar" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Agachar" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Largar" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventário" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Conversa" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Comando" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Consola" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Ativar/Desativar vôo" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Ativar/Desativar correr" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Ativar/Desativar correr" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Ativar/Desativar noclip" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Seleccionar Distância" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Imprimir stacks" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Senha antiga" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Senha Nova" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Confirmar Senha" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Mudar" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Senhas não correspondem!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volume do som: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Sair" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Botão Esquerdo" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Roda do Rato" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Botão Direito" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Botão X 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Voltar" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Limpar" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulação" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Botão X 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Capital" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pausa" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Converter" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "ESC" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nãoconverter" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mode Change" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Próximo" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Prévio" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Espaço" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Baixo" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Executar" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Seleccionar" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Cima" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Ajuda" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Screenshot" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "WINDOWS Esq." -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "App" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "WINDOWS Dir." -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Suspender" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Shift Esquerdo" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift Direito" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Control Esq" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Menu Esquerdo" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Control Direito" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Menu Direito" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Virgula" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Menos" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Período" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Mais" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attm" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Apagar OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "Limpar OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PAL" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menu Principal" +#~ msgid "Game Name" +#~ msgstr "Nome do Jogo" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "" +#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo " +#~ "\"$2\"" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Erro de conexão (excedeu tempo?)" +#~ msgid "GAMES" +#~ msgstr "JOGOS" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" -"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer." +#~ msgid "Games" +#~ msgstr "Jogos" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Extras:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Não foi possível encontrar ou carregar jogo \"" +#~ msgid "edit game" +#~ msgstr "editar jogo" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "gamespec inválido." +#~ msgid "new game" +#~ msgstr "novo jogo" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item" +#~ msgid "EDIT GAME" +#~ msgstr "EDITAR JOGO" -#~ msgid "is required by:" -#~ msgstr "é necessário pelo:" +#~ msgid "Remove selected mod" +#~ msgstr "Remover extra selecionado" -#~ msgid "Configuration saved. " -#~ msgstr "Configuração gravada. " +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adicionar extra" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Atenção: Configuração não compatível. " +#~ msgid "CLIENT" +#~ msgstr "CLIENTE" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" +#~ msgid "Favorites:" +#~ msgstr "Favoritos:" -#~ msgid "Multiplayer" -#~ msgstr "Vários jogadores" +#~ msgid "START SERVER" +#~ msgstr "INICIAR SERVIDOR" -#~ msgid "Advanced" -#~ msgstr "Avançado" +#~ msgid "Name" +#~ msgstr "Nome" -#~ msgid "Show Public" -#~ msgstr "Mostrar Públicos" +#~ msgid "Password" +#~ msgstr "Senha" -#~ msgid "Show Favorites" -#~ msgstr "Mostrar Favoritos" +#~ msgid "SETTINGS" +#~ msgstr "DEFINIÇÕES" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Deixe endereço em branco para iniciar servidor local." +#~ msgid "Preload item visuals" +#~ msgstr "Pré-carregamento dos itens" -#~ msgid "Create world" -#~ msgstr "Criar mundo" +#~ msgid "Finite Liquid" +#~ msgstr "Líquido Finito" -#~ msgid "Address required." -#~ msgstr "Endereço necessário." +#~ msgid "SINGLE PLAYER" +#~ msgstr "Um Jogador" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado" +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACOTES DE TEXTURAS" -#~ msgid "Files to be deleted" -#~ msgstr "Ficheiros para eliminar" +#~ msgid "MODS" +#~ msgstr "EXTRAS" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos" +#, fuzzy +#~ msgid "Add mod:" +#~ msgstr "<<-- Adicionar extra" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Não foi possível configurar mundo: Nada seleccionado" +#, fuzzy +#~ msgid "Local install" +#~ msgstr "Instalar" -#~ msgid "Failed to delete all world files" -#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods ainda não estão configurados.\n" +#~ "Eles vão ser ativados por predefinição quando guardar a configuração. " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods configurados estão em falta.\n" +#~ "As suas definições vão ser removidas quando gravar a configuração. " #~ msgid "" #~ "Default Controls:\n" @@ -1074,150 +1303,63 @@ msgstr "gamespec inválido." #~ "- ESC: Este menu\n" #~ "- T: Chat\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods configurados estão em falta.\n" -#~ "As suas definições vão ser removidas quando gravar a configuração. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods ainda não estão configurados.\n" -#~ "Eles vão ser ativados por predefinição quando guardar a configuração. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Não foi possível configurar mundo: Nada seleccionado" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Teclas por defeito:\n" -#~ "- WASD: mover\n" -#~ "- Barra de espaço: saltar/subir\n" -#~ "- Shift: andar cuidadosamente/descer\n" -#~ "- Q: Largar item\n" -#~ "- I: Inventário\n" -#~ "- Rato: virar/olhar\n" -#~ "- Clique esquerdo: cavar/bater\n" -#~ "- Clique direito: colocar/utilizar\n" -#~ "- Roda do rato: seleccionar item\n" -#~ "- T: conversação\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos" -#~ msgid "Exit to OS" -#~ msgstr "Sair para o sistema" +#~ msgid "Files to be deleted" +#~ msgstr "Ficheiros para eliminar" -#~ msgid "Exit to Menu" -#~ msgstr "Sair para Menu" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado" -#~ msgid "Sound Volume" -#~ msgstr "Volume do som" +#~ msgid "Address required." +#~ msgstr "Endereço necessário." -#~ msgid "Change Password" -#~ msgstr "Mudar Senha" +#~ msgid "Create world" +#~ msgstr "Criar mundo" -#~ msgid "Continue" -#~ msgstr "Continuar" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Deixe endereço em branco para iniciar servidor local." -#~ msgid "You died." -#~ msgstr "Morreste." +#~ msgid "Show Favorites" +#~ msgstr "Mostrar Favoritos" -#~ msgid "Shutting down stuff..." -#~ msgstr "A desligar..." +#~ msgid "Show Public" +#~ msgstr "Mostrar Públicos" -#~ msgid "Connecting to server..." -#~ msgstr "A conectar ao servidor..." +#~ msgid "Advanced" +#~ msgstr "Avançado" -#~ msgid "Resolving address..." -#~ msgstr "A resolver endereço..." +#~ msgid "Multiplayer" +#~ msgstr "Vários jogadores" -#~ msgid "Creating client..." -#~ msgstr "A criar cliente..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" -#~ msgid "Creating server...." -#~ msgstr "A criar servidor..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Atenção: Configuração não compatível. " -#~ msgid "Loading..." -#~ msgstr "A carregar..." +#~ msgid "Configuration saved. " +#~ msgstr "Configuração gravada. " + +#~ msgid "is required by:" +#~ msgstr "é necessário pelo:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtro Anisotrópico" + +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" #, fuzzy -#~ msgid "Local install" -#~ msgstr "Instalar" - -#, fuzzy -#~ msgid "Add mod:" -#~ msgstr "<<-- Adicionar extra" - -#~ msgid "MODS" -#~ msgstr "EXTRAS" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACOTES DE TEXTURAS" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "Um Jogador" - -#~ msgid "Finite Liquid" -#~ msgstr "Líquido Finito" - -#~ msgid "Preload item visuals" -#~ msgstr "Pré-carregamento dos itens" - -#~ msgid "SETTINGS" -#~ msgstr "DEFINIÇÕES" - -#~ msgid "Password" -#~ msgstr "Senha" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "START SERVER" -#~ msgstr "INICIAR SERVIDOR" - -#~ msgid "Favorites:" -#~ msgstr "Favoritos:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENTE" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adicionar extra" - -#~ msgid "Remove selected mod" -#~ msgstr "Remover extra selecionado" - -#~ msgid "EDIT GAME" -#~ msgstr "EDITAR JOGO" - -#~ msgid "new game" -#~ msgstr "novo jogo" - -#~ msgid "edit game" -#~ msgstr "editar jogo" - -#~ msgid "Mods:" -#~ msgstr "Extras:" - -#~ msgid "Games" -#~ msgstr "Jogos" - -#~ msgid "GAMES" -#~ msgstr "JOGOS" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "" -#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo " -#~ "\"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Nome do Jogo" +#~ msgid "Downloading" +#~ msgstr "Descarregar" diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index b8b68a661..830bd5e82 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-11-25 02:13+0200\n" "Last-Translator: Frederico Guimarães \n" "Language-Team: LANGUAGE \n" @@ -18,57 +18,73 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Carregando..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Mundo:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Ocultar jogos" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Ocultar conteúdo PMs" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Depende de:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Salvar" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Habilitar PMs" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Desabilitar PMs" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "habilitado" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Habilitar todos" @@ -108,7 +124,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Já existe um mundo com o nome \"$1\"" @@ -123,7 +139,7 @@ msgstr "Tem certeza que deseja excluir \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Sim" @@ -151,15 +167,15 @@ msgstr "Não" msgid "Rename Modpack:" msgstr "Renomear pacote de módulos:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Aceitar" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Instalação de módulo: arquivo: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -168,17 +184,17 @@ msgstr "" "\n" "Instalação de módulo: o tipo de arquivo \"$1\" não é suportado" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Não foi possível instalar $1 em $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalação de módulo: não foi possível encontrar o nome adequado da pasta " "para o pacote de módulos $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" "Instalação de módulo: não foi possível encontrar o nome real do módulo: $1" @@ -187,49 +203,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Baixar" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Nome do mundo" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Classificação" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "reinstalar" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Instalar" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Página $1 de $2" @@ -237,15 +244,20 @@ msgstr "Página $1 de $2" msgid "Credits" msgstr "Créditos" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Desenvolvedores principais" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Colaboradores ativos" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Desenvolvedores principais" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Colaboradores anteriores" @@ -286,12 +298,13 @@ msgid "Mods" msgstr "Módulos" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Endereço/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nome/Senha" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -300,7 +313,7 @@ msgid "Public Serverlist" msgstr "Servidores públicos" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Excluir" @@ -309,15 +322,33 @@ msgstr "Excluir" msgid "Connect" msgstr "Conectar" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Modo criativo" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "habilitado" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "habilitado" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Novo" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Configurar" @@ -325,17 +356,18 @@ msgstr "Configurar" msgid "Start Game" msgstr "Iniciar o jogo" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Selecione um mundo:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Modo criativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Habilitar dano" @@ -343,6 +375,10 @@ msgstr "Habilitar dano" msgid "Public" msgstr "Público" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nome/Senha" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -355,150 +391,184 @@ msgstr "" msgid "Server Port" msgstr "Porta do servidor" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "" +"Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Servidor" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Água opaca" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Árvores melhores" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Filtragem bi-linear" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtragem tri-linear" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Iluminação suave" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Habilitar partículas" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Nuvens 3D" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Árvores melhores" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Água opaca" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Conectar" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mipmapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtragem anisotrópica" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtragem bi-linear" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtragem tri-linear" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Sombreadores" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Mudar teclas" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Um jogador" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mipmapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Configurações" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Um jogador" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Configurar" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Menu principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Jogar" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Um jogador" @@ -515,39 +585,188 @@ msgstr "Nenhuma informação disponível" msgid "Texturepacks" msgstr "Pacotes de texturas" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Carregando..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Resolvendo os endereços..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Texturas dos itens..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Menu principal" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Erro de conexão (tempo excedido?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a " +"ser feito." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Não foi possível localizar ou carregar jogo \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Especificação do jogo inválida." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Continuar" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Você morreu." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Reviver" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controles padrão:\n" +"- WASD: mover\n" +"- Espaço: pular/escalar\n" +"- Shift: esgueirar/descer\n" +"- Q: descartar o item\n" +"- I: inventário\n" +"- Mouse: virar/olhar\n" +"- Botão esquerdo: cavar/atingir\n" +"- Botão direito: colocar/usar\n" +"- Roda: selecionar item\n" +"- T: bate-papo\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Continuar" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Alterar a senha" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Volume do som" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Mudar teclas" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Sair para o menu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Sair do Minetest" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Desligando tudo..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Criando o servidor..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Criando o cliente..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Resolvendo os endereços..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Conectando ao servidor..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definições dos itens..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definições dos nós..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Mídia..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -555,14 +774,14 @@ msgstr "" "\n" "Verifique o debug.txt para mais detalhes." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Continuar" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -577,478 +796,485 @@ msgstr "\"Usar\" = descer" msgid "Double tap \"jump\" to toggle fly" msgstr "\"Pular\" duas vezes ativa o voo" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Essa tecla já está em uso" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "press. uma tecla" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Avançar" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Voltar" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Esquerda" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Direita" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Usar" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Pular" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Esgueirar" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Soltar" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventário" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Bate-papo" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Comando" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Console" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Alternar voo" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Alternar corrida" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Alternar corrida" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Alternar noclip" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Sel. distância" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Impr. pilha (log)" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Senha antiga" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Nova senha" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Confirmar a senha" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Alterar" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "As senhas não correspondem!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volume do som: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Sair" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Botão esquerdo" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Roda do mouse" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Botão direito" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Botão X 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Backspace" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Limpar" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Botão X 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Ctrl" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pause" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mode Change" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Page Down" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Page Up" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Espaço" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Abaixo" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Executar" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print Screen" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Select" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Acima" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Ajuda" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Captura de tela" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Windows esq." -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Tecl.num.0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Tecl.num.1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Windows dir." -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sleep" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Tecl.num.2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Tecl.num.3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Tecl.num.4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Tecl.num.5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Tecl.num.6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Tecl.num.7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Tecl.num.*" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Tecl.num.+" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Tecl.num.-" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Tecl.num./" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Tecl.num.8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Tecl.num.9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Shift esq." -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift dir." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Ctrl esq." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Menu esq." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Ctrl dir." -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Menu dir." -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Vírgula" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Menos" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Ponto" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Mais" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Apagar OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "Limpar OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Menu principal" +#~ msgid "Game Name" +#~ msgstr "Nome do jogo" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\"" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Erro de conexão (tempo excedido?)" +#~ msgid "GAMES" +#~ msgstr "JOGOS" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" -"Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a " -"ser feito." +#~ msgid "Games" +#~ msgstr "Jogos" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Módulos:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Não foi possível localizar ou carregar jogo \"" +#~ msgid "edit game" +#~ msgstr "editar o jogo" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Especificação do jogo inválida." +#~ msgid "new game" +#~ msgstr "novo jogo" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item" +#~ msgid "EDIT GAME" +#~ msgstr "EDITAR JOGO" -#~ msgid "is required by:" -#~ msgstr "é necessário para:" +#~ msgid "Remove selected mod" +#~ msgstr "Remover o módulo selecionado" -#~ msgid "Configuration saved. " -#~ msgstr "A configuração foi salva. " +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adicionar módulo" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Atenção: A configuração não está consistente." +#~ msgid "CLIENT" +#~ msgstr "CLIENTE" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos" +#~ msgid "Favorites:" +#~ msgstr "Favoritos:" -#~ msgid "Multiplayer" -#~ msgstr "Vários jogadores" +#~ msgid "START SERVER" +#~ msgstr "SERVIDOR" -#~ msgid "Advanced" -#~ msgstr "Avançado" +#~ msgid "Name" +#~ msgstr "Nome" -#~ msgid "Show Public" -#~ msgstr "Exibir públicos" +#~ msgid "Password" +#~ msgstr "Senha" -#~ msgid "Show Favorites" -#~ msgstr "Exibir favoritos" +#~ msgid "SETTINGS" +#~ msgstr "CONFIGURAÇÕES" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Deixe o endereço em branco para iniciar um servidor local." +#~ msgid "Preload item visuals" +#~ msgstr "Precarga de elementos visuais" -#~ msgid "Create world" -#~ msgstr "Criar o mundo" +#~ msgid "Finite Liquid" +#~ msgstr "Líquido finito" -#~ msgid "Address required." -#~ msgstr "É necessário um endereço." +#~ msgid "SINGLE PLAYER" +#~ msgstr "UM JOGADOR" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado" +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTURAS" -#~ msgid "Files to be deleted" -#~ msgstr "Arquivos a serem excluídos" +#~ msgid "MODS" +#~ msgstr "MÓDULOS" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo" +#~ msgid "Add mod:" +#~ msgstr "Adicionar módulo:" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado" +#~ msgid "Local install" +#~ msgstr "Instalação local" -#~ msgid "Failed to delete all world files" -#~ msgstr "Não foi possível excluir todos os arquivos do mundo" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods ainda não foram configurados.\n" +#~ "E eles serão ativados por padrão, quando você salvar a configuração." + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods configurados não foram encontrados.\n" +#~ "Suas definições serão removidas quando você salvar a configuração." #~ msgid "" #~ "Default Controls:\n" @@ -1075,146 +1301,63 @@ msgstr "Especificação do jogo inválida." #~ "- ESC: este menu\n" #~ "- T: bate-papo\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods configurados não foram encontrados.\n" -#~ "Suas definições serão removidas quando você salvar a configuração." +#~ msgid "Failed to delete all world files" +#~ msgstr "Não foi possível excluir todos os arquivos do mundo" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods ainda não foram configurados.\n" -#~ "E eles serão ativados por padrão, quando você salvar a configuração." +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Controles padrão:\n" -#~ "- WASD: mover\n" -#~ "- Espaço: pular/escalar\n" -#~ "- Shift: esgueirar/descer\n" -#~ "- Q: descartar o item\n" -#~ "- I: inventário\n" -#~ "- Mouse: virar/olhar\n" -#~ "- Botão esquerdo: cavar/atingir\n" -#~ "- Botão direito: colocar/usar\n" -#~ "- Roda: selecionar item\n" -#~ "- T: bate-papo\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo" -#~ msgid "Exit to OS" -#~ msgstr "Sair do Minetest" +#~ msgid "Files to be deleted" +#~ msgstr "Arquivos a serem excluídos" -#~ msgid "Exit to Menu" -#~ msgstr "Sair para o menu" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado" -#~ msgid "Sound Volume" -#~ msgstr "Volume do som" +#~ msgid "Address required." +#~ msgstr "É necessário um endereço." -#~ msgid "Change Password" -#~ msgstr "Alterar a senha" +#~ msgid "Create world" +#~ msgstr "Criar o mundo" -#~ msgid "Continue" -#~ msgstr "Continuar" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Deixe o endereço em branco para iniciar um servidor local." -#~ msgid "You died." -#~ msgstr "Você morreu." +#~ msgid "Show Favorites" +#~ msgstr "Exibir favoritos" -#~ msgid "Shutting down stuff..." -#~ msgstr "Desligando tudo..." +#~ msgid "Show Public" +#~ msgstr "Exibir públicos" -#~ msgid "Connecting to server..." -#~ msgstr "Conectando ao servidor..." +#~ msgid "Advanced" +#~ msgstr "Avançado" -#~ msgid "Resolving address..." -#~ msgstr "Resolvendo os endereços..." +#~ msgid "Multiplayer" +#~ msgstr "Vários jogadores" -#~ msgid "Creating client..." -#~ msgstr "Criando o cliente..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos" -#~ msgid "Creating server...." -#~ msgstr "Criando o servidor..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Atenção: A configuração não está consistente." -#~ msgid "Loading..." -#~ msgstr "Carregando..." +#~ msgid "Configuration saved. " +#~ msgstr "A configuração foi salva. " -#~ msgid "Local install" -#~ msgstr "Instalação local" +#~ msgid "is required by:" +#~ msgstr "é necessário para:" -#~ msgid "Add mod:" -#~ msgstr "Adicionar módulo:" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item" -#~ msgid "MODS" -#~ msgstr "MÓDULOS" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtragem anisotrópica" -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTURAS" +#~ msgid "Mip-Mapping" +#~ msgstr "Mipmapping" -#~ msgid "SINGLE PLAYER" -#~ msgstr "UM JOGADOR" - -#~ msgid "Finite Liquid" -#~ msgstr "Líquido finito" - -#~ msgid "Preload item visuals" -#~ msgstr "Precarga de elementos visuais" - -#~ msgid "SETTINGS" -#~ msgstr "CONFIGURAÇÕES" - -#~ msgid "Password" -#~ msgstr "Senha" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "START SERVER" -#~ msgstr "SERVIDOR" - -#~ msgid "Favorites:" -#~ msgstr "Favoritos:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENTE" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adicionar módulo" - -#~ msgid "Remove selected mod" -#~ msgstr "Remover o módulo selecionado" - -#~ msgid "EDIT GAME" -#~ msgstr "EDITAR JOGO" - -#~ msgid "new game" -#~ msgstr "novo jogo" - -#~ msgid "edit game" -#~ msgstr "editar o jogo" - -#~ msgid "Mods:" -#~ msgstr "Módulos:" - -#~ msgid "Games" -#~ msgstr "Jogos" - -#~ msgid "GAMES" -#~ msgstr "JOGOS" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Nome do jogo" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Baixar" diff --git a/po/ro/minetest.po b/po/ro/minetest.po index eefdd5f22..e58dace34 100644 --- a/po/ro/minetest.po +++ b/po/ro/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-12-18 21:44+0200\n" "Last-Translator: King Artur \n" "Language-Team: LANGUAGE \n" @@ -19,57 +19,73 @@ msgstr "" "20)) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Se încarcă..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Lume:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Ascunde Joc" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Ascunde conținutul mp" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Dependințe:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Salvează" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Anulează" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Activează MP" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Dezactivează MP" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "activat" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Activează tot" @@ -109,7 +125,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "O lume cu numele \"$1\" deja există" @@ -123,7 +139,7 @@ msgstr "Ești sigur că vrei să ștergi \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Da" @@ -151,15 +167,15 @@ msgstr "Nu" msgid "Rename Modpack:" msgstr "Redenumiți Pachetul de moduri:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Acceptă" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Instalare Mod: fișier: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -168,17 +184,17 @@ msgstr "" "\n" "Instalare Mod: tip de fișier neacceptat \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Eșuare la instalarea $1 în $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de " "mod $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" @@ -186,49 +202,40 @@ msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Descarcă" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Numele lumii" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Notă" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Reinstalează" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Instalează" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Pagina $1 din $2" @@ -236,15 +243,20 @@ msgstr "Pagina $1 din $2" msgid "Credits" msgstr "Credits" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Dezvoltatori de bază" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Contribuitori activi" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Dezvoltatori de bază" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Foști contribuitori" @@ -285,12 +297,13 @@ msgid "Mods" msgstr "Moduri" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Adresă/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Nume/Parolă" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -299,7 +312,7 @@ msgid "Public Serverlist" msgstr "Listă de servere publică" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Șterge" @@ -308,15 +321,33 @@ msgstr "Șterge" msgid "Connect" msgstr "Conectează" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Modul Creativ" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "activat" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "activat" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Nou" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Configurează" @@ -324,17 +355,18 @@ msgstr "Configurează" msgid "Start Game" msgstr "Începe jocul" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Selectează lumea:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Modul Creativ" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Activează Daune" @@ -342,6 +374,10 @@ msgstr "Activează Daune" msgid "Public" msgstr "Public" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Nume/Parolă" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -354,150 +390,183 @@ msgstr "" msgid "Server Port" msgstr "Port server" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Jocul nu are nume, sau nu ai selectat un joc" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Apă opacă" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Copaci fantezici" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Filtrare Biliniară" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtrare Triliniară" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Lumină mai bună" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Activează particulele" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "Nori 3D" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Copaci fantezici" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Apă opacă" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Conectează" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtru Anizotropic" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtrare Biliniară" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtrare Triliniară" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Umbră" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Modifică tastele" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Singleplayer" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip Mapping" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Setări" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Singleplayer" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Configurează" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Meniul Principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Joacă" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Singleplayer" @@ -514,39 +583,186 @@ msgstr "Nici o informație disponibilă" msgid "Texturepacks" msgstr "Pachete de tetură" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Se încarcă..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Se rezolvă adresa..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Texturi..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Meniul Principal" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Eroare de conexiune (timeout?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Nu se poate găsi sau încărca jocul \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Specificare invalidă" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "lipsă_tip_font" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Continuă" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Ai murit." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Reînviere" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: 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" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Continuă" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Schimbă Parola" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Volum Sunet" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Modifică tastele" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Ieși în Meniu" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Ieși din joc" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Se închide..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Se crează serverul..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Se creează clientul..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Se rezolvă adresa..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Se conectează la server..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Definițiile obiectelor..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Definițiile Blocurilor..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -554,14 +770,14 @@ msgstr "" "\n" "Verifică deug.txt pentru detalii." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Continuă" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -575,556 +791,482 @@ msgstr "\"Aleargă\" = coboară" msgid "Double tap \"jump\" to toggle fly" msgstr "Apasă de 2 ori \"sari\" pentru a zbura" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Tastă deja folosită" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "apasă o tastă" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Înainte" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Înapoi" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Stânga" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Dreapta" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Aleargă" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Sari" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Furișează" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Aruncă" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Inventar" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Chat" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Comandă" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Consloă" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Intră pe zbor" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Intră pe rapid" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Intră pe rapid" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Intră pe noclip" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Selectare distanță" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Salvează logurile" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Vechea parolă" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Noua parolă" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Confirmarea parolei" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Schimbă" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Parolele nu se potrivesc!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Volum sunet: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Ieșire" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Stânga" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Rotiță" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Drepata" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X Butonul 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Înapoi" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Șterge" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Înapoi" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Butonul 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Capital" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Control" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Meniu" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Pauză" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Convert" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Nonconvert" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Schimbă modul" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Următorul" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Anteriorul" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Spațiu" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Jos" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Execută" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Selectează" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Sus" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Ajutor" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "PrintScreen" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Windows Stânga" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Aplicații" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Windows Dreapta" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sleep" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Shift Stânga" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift Dreapta" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Ctrl Stânga" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Meniu Stânga" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Ctrl Dreapta" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Meniu Drepata" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Virgulă" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Minus" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Punct" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Plus" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Ștergere OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "Curățare OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Mărire" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Meniul Principal" +#~ msgid "Game Name" +#~ msgstr "Numele jocului" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\"" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Eroare de conexiune (timeout?)" +#~ msgid "GAMES" +#~ msgstr "JOCURI" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut." +#~ msgid "Games" +#~ msgstr "Jocuri" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Moduri:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Nu se poate găsi sau încărca jocul \"" +#~ msgid "edit game" +#~ msgstr "modifică jocul" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Specificare invalidă" +#~ msgid "new game" +#~ msgstr "joc nou" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFICĂ JOCUL" + +#~ msgid "Remove selected mod" +#~ msgstr "Șterge modul selectat" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adaugă modul" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Preferate:" + +#~ msgid "START SERVER" +#~ msgstr "DESCHIDE SERVERUL" + +#~ msgid "Name" +#~ msgstr "Nume" + +#~ msgid "Password" +#~ msgstr "Parolă" + +#~ msgid "SETTINGS" +#~ msgstr "SETĂRI" + +#~ msgid "Preload item visuals" +#~ msgstr "Pre-încarcă imaginile obiectelor" + +#~ msgid "Finite Liquid" +#~ msgstr "Lichid finit" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "SINGLE PLAYER" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACHETE DE TEXTURĂ" + +#~ msgid "MODS" +#~ msgstr "MODURI" + +#~ msgid "Add mod:" +#~ msgstr "Adăugaţi mod:" + +#~ msgid "Local install" +#~ msgstr "Instalare locală" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Click stânga: Mută toate obiectele, Click dreapta: Mută un singur obiect" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: 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" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtru Anizotropic" -#~ msgid "Exit to OS" -#~ msgstr "Ieși din joc" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip Mapping" -#~ msgid "Exit to Menu" -#~ msgstr "Ieși în Meniu" - -#~ msgid "Sound Volume" -#~ msgstr "Volum Sunet" - -#~ msgid "Change Password" -#~ msgstr "Schimbă Parola" - -#~ msgid "Continue" -#~ msgstr "Continuă" - -#~ msgid "You died." -#~ msgstr "Ai murit." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Se închide..." - -#~ msgid "Connecting to server..." -#~ msgstr "Se conectează la server..." - -#~ msgid "Resolving address..." -#~ msgstr "Se rezolvă adresa..." - -#~ msgid "Creating client..." -#~ msgstr "Se creează clientul..." - -#~ msgid "Creating server...." -#~ msgstr "Se crează serverul..." - -#~ msgid "Loading..." -#~ msgstr "Se încarcă..." - -#~ msgid "Local install" -#~ msgstr "Instalare locală" - -#~ msgid "Add mod:" -#~ msgstr "Adăugaţi mod:" - -#~ msgid "MODS" -#~ msgstr "MODURI" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACHETE DE TEXTURĂ" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "SINGLE PLAYER" - -#~ msgid "Finite Liquid" -#~ msgstr "Lichid finit" - -#~ msgid "Preload item visuals" -#~ msgstr "Pre-încarcă imaginile obiectelor" - -#~ msgid "SETTINGS" -#~ msgstr "SETĂRI" - -#~ msgid "Password" -#~ msgstr "Parolă" - -#~ msgid "Name" -#~ msgstr "Nume" - -#~ msgid "START SERVER" -#~ msgstr "DESCHIDE SERVERUL" - -#~ msgid "Favorites:" -#~ msgstr "Preferate:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adaugă modul" - -#~ msgid "Remove selected mod" -#~ msgstr "Șterge modul selectat" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFICĂ JOCUL" - -#~ msgid "new game" -#~ msgstr "joc nou" - -#~ msgid "edit game" -#~ msgstr "modifică jocul" - -#~ msgid "Mods:" -#~ msgstr "Moduri:" - -#~ msgid "Games" -#~ msgstr "Jocuri" - -#~ msgid "GAMES" -#~ msgstr "JOCURI" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Numele jocului" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Descarcă" diff --git a/po/ru/minetest.po b/po/ru/minetest.po index 5d9d16deb..7cdc318f7 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-12-29 16:58+0200\n" "Last-Translator: Сергей Голубев \n" "Language-Team: Russian\n" @@ -19,57 +19,73 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Загрузка..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Мир:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Скрыть игру" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Скрыть содержимое модпака" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Мод:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Зависит от:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Сохранить" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Отменить" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Включить мультиплеер" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Отключить мультиплеер" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "включено" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Включить всё" @@ -109,7 +125,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "Мир под названием \"$1\" уже существует" @@ -123,7 +139,7 @@ msgstr "Уверены, что хотите удалить \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Да" @@ -151,15 +167,15 @@ msgstr "Нет" msgid "Rename Modpack:" msgstr "Переименовать модпак:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Принять" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Установка мода: файл \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -168,16 +184,16 @@ msgstr "" "\n" "Установка мода: неподдерживаемый тип \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "Ошибка при установке $1 в $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Установка мода: невозможно найти подходящее имя директории для модпака $1" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "Установка мода: невозможно определить название мода для $1" @@ -185,49 +201,40 @@ msgstr "Установка мода: невозможно определить msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Загрузить" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Название мира" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Рейтинг" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "Переустановить" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Установить" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "Страница $1 из $2" @@ -235,15 +242,20 @@ msgstr "Страница $1 из $2" msgid "Credits" msgstr "Благодарности" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Основные разработчики" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Активные контрибьюторы" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Основные разработчики" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "В отставке" @@ -284,12 +296,13 @@ msgid "Mods" msgstr "Моды" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Адрес/Порт" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Имя/Пароль" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -298,7 +311,7 @@ msgid "Public Serverlist" msgstr "Список публичных серверов" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Удалить" @@ -307,15 +320,33 @@ msgstr "Удалить" msgid "Connect" msgstr "Подключиться" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Режим создания" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "включено" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "включено" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Клиент" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Новый" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Настроить" @@ -323,17 +354,18 @@ msgstr "Настроить" msgid "Start Game" msgstr "Начать игру" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Выберите мир:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Режим создания" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Включить урон" @@ -341,6 +373,10 @@ msgstr "Включить урон" msgid "Public" msgstr "Публичные" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Имя/Пароль" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -353,150 +389,183 @@ msgstr "" msgid "Server Port" msgstr "Порт" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Не задано имя мира или не выбрана игра" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Сервер" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Непрозрачная вода" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Красивые деревья" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Билинейная фильтрация" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Трилинейная фильтрация" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Мягкое освещение" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Включить частицы" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D облака" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Красивые деревья" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Непрозрачная вода" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Подключиться" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-текстурирование" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Анизотропная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Билинейная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Трилинейная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Шейдеры" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Смена управления" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Одиночная игра" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "Mip-текстурирование" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "Для включения шейдеров необходим драйвер OpenGL." -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Настройки" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Одиночная игра" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Настроить" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Главное меню" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Играть" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Одиночная игра" @@ -513,39 +582,186 @@ msgstr "Описание отсутствует" msgid "Texturepacks" msgstr "Пакеты текстур" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Загрузка..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Получение адреса..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Текстуры предметов..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Главное меню" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Ошибка соединения (таймаут?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Не выбран мир и не введен адрес." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Невозможно найти или загрузить игру \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Неправильная конфигурация игры." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Продолжить" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Вы умерли." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Возродиться" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Управление по умолчанию:\n" +"- WASD: движение\n" +"- Пробел: прыжок/вверх\n" +"- Shift: красться/вниз\n" +"- Q: бросить предмет\n" +"- I: инвентарь\n" +"- Мышка: поворот\n" +"- ЛКМ: копать/удар\n" +"- ПКМ: поставить/использовать\n" +"- Колесико мыши: выбор предмета\n" +"- T: чат\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Продолжить" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Изменить пароль" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Громкость звука" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Смена управления" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Выход в меню" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Выход в ОС" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "Завершение работы..." + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Создание сервера..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Создание клиента..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Получение адреса..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Подключение к серверу..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Описания предметов..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Описания нод..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "Медиафайлы..." -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -553,14 +769,14 @@ msgstr "" "\n" "Подробная информация в debug.txt." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Продолжить" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -575,476 +791,486 @@ msgstr "\"Использовать\" = вниз" msgid "Double tap \"jump\" to toggle fly" msgstr "Двойной прыжок = летать" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Клавиша уже используется" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "нажмите клавишу" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Вперед" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Назад" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Влево" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Вправо" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Использовать" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Прыжок" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Красться" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Бросить" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Инвентарь" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Чат" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Команда" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Консоль" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Полёт" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Ускорение" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Ускорение" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Включить noclip" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Зона видимости" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Печать стеков" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Старый пароль" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Новый пароль" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Подтверждение пароля" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Изменить" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Пароли не совпадают!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Громкость звука: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Выход" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Левая кнопка" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Средняя кнопка" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Правая кнопка" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Доп. кнопка 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "Назад" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Очистить" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "Вернуться" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Доп. кнопка 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Ctrl" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Кана" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Меню" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Пауза" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "Преобразовать" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Конец" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Кандзи" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Не преобразовано" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mode Change" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Next" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Prior" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "Пробел" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Вниз" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "Выполнить" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Выбор" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Вверх" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Справка" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Cнимок" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Левая кл. Win" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Приложения" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Доп. клав. 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Доп. клав. 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Прав. кл. Win" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Sleep" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Доп. клав. 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Доп. клав. 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Доп. клав. 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Доп. клав. 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Доп. клав. 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Доп. клав. 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Доп. клав. *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Доп. клав. +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Доп. клав. -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Доп. клав. /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Доп. клав. 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Доп. клав. 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Левый Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Правый Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Левый Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Левая клавиша меню" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Правый Ctrl" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Правая клавиша меню" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Запятая" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Минус" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "Период" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Плюс" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Внимание" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Стереть ОНС" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "Очистить OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Масштаб" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Главное меню" +#~ msgid "Game Name" +#~ msgstr "Название" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру \"$2\"" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Ошибка соединения (таймаут?)" +#~ msgid "GAMES" +#~ msgstr "ИГРЫ" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Не выбран мир и не введен адрес." +#~ msgid "Games" +#~ msgstr "Игры" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Mods:" +#~ msgstr "Моды:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Невозможно найти или загрузить игру \"" +#~ msgid "edit game" +#~ msgstr "Редактировать" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Неправильная конфигурация игры." +#~ msgid "new game" +#~ msgstr "Создать игру" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет" +#~ msgid "EDIT GAME" +#~ msgstr "РЕДАКТИРОВАНИЕ" -#~ msgid "is required by:" -#~ msgstr "требуется для:" +#~ msgid "Remove selected mod" +#~ msgstr "Удалить мод" -#~ msgid "Configuration saved. " -#~ msgstr "Настройки сохранены. " +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Добавить мод" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Предупреждение: Неверная конфигурация. " +#~ msgid "CLIENT" +#~ msgstr "КЛИЕНТ" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы" +#~ msgid "Favorites:" +#~ msgstr "Избранное:" -#~ msgid "Multiplayer" -#~ msgstr "Сетевая игра" +#~ msgid "START SERVER" +#~ msgstr "СЕРВЕР" -#~ msgid "Advanced" -#~ msgstr "Дополнительно" +#~ msgid "Name" +#~ msgstr "Имя" -#~ msgid "Show Public" -#~ msgstr "Публичные" +#~ msgid "Password" +#~ msgstr "Пароль" -#~ msgid "Show Favorites" -#~ msgstr "Избранные" +#~ msgid "SETTINGS" +#~ msgstr "НАСТРОЙКИ" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Оставьте адрес пустым для запуска локального сервера." +#~ msgid "Preload item visuals" +#~ msgstr "Предзагрузка изображений" -#~ msgid "Create world" -#~ msgstr "Создать мир" +#~ msgid "Finite Liquid" +#~ msgstr "Конечные жидкости" -#~ msgid "Address required." -#~ msgstr "Нужно ввести адрес." +#~ msgid "SINGLE PLAYER" +#~ msgstr "ОДИНОЧНАЯ ИГРА" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Невозможно удалить мир: Ничего не выбрано" +#~ msgid "TEXTURE PACKS" +#~ msgstr "ПАКЕТЫ ТЕКСТУР" -#~ msgid "Files to be deleted" -#~ msgstr "Следующие файлы будут удалены" +#~ msgid "MODS" +#~ msgstr "МОДЫ" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Невозможно создать мир: Ни одной игры не найдено" +#~ msgid "Add mod:" +#~ msgstr "Добавить мод:" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Невозможно настроить мир: ничего не выбрано" +#~ msgid "Local install" +#~ msgstr "Локальная установка" -#~ msgid "Failed to delete all world files" -#~ msgstr "Ошибка при удалении файлов мира" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Предупреждение: Некоторые моды еще не настроены.\n" +#~ "Их стандартные настройки будут установлены, когда вы сохраните " +#~ "конфигурацию. " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Предупреждение: Некоторые моды не найдены.\n" +#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. " #~ msgid "" #~ "Default Controls:\n" @@ -1071,147 +1297,63 @@ msgstr "Неправильная конфигурация игры." #~ "- ESC: это меню\n" #~ "- T: чат\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Предупреждение: Некоторые моды не найдены.\n" -#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Ошибка при удалении файлов мира" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Предупреждение: Некоторые моды еще не настроены.\n" -#~ "Их стандартные настройки будут установлены, когда вы сохраните " -#~ "конфигурацию. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Невозможно настроить мир: ничего не выбрано" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Управление по умолчанию:\n" -#~ "- WASD: движение\n" -#~ "- Пробел: прыжок/вверх\n" -#~ "- Shift: красться/вниз\n" -#~ "- Q: бросить предмет\n" -#~ "- I: инвентарь\n" -#~ "- Мышка: поворот\n" -#~ "- ЛКМ: копать/удар\n" -#~ "- ПКМ: поставить/использовать\n" -#~ "- Колесико мыши: выбор предмета\n" -#~ "- T: чат\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Невозможно создать мир: Ни одной игры не найдено" -#~ msgid "Exit to OS" -#~ msgstr "Выход в ОС" +#~ msgid "Files to be deleted" +#~ msgstr "Следующие файлы будут удалены" -#~ msgid "Exit to Menu" -#~ msgstr "Выход в меню" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Невозможно удалить мир: Ничего не выбрано" -#~ msgid "Sound Volume" -#~ msgstr "Громкость звука" +#~ msgid "Address required." +#~ msgstr "Нужно ввести адрес." -#~ msgid "Change Password" -#~ msgstr "Изменить пароль" +#~ msgid "Create world" +#~ msgstr "Создать мир" -#~ msgid "Continue" -#~ msgstr "Продолжить" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Оставьте адрес пустым для запуска локального сервера." -#~ msgid "You died." -#~ msgstr "Вы умерли." +#~ msgid "Show Favorites" +#~ msgstr "Избранные" -#~ msgid "Shutting down stuff..." -#~ msgstr "Завершение работы..." +#~ msgid "Show Public" +#~ msgstr "Публичные" -#~ msgid "Connecting to server..." -#~ msgstr "Подключение к серверу..." +#~ msgid "Advanced" +#~ msgstr "Дополнительно" -#~ msgid "Resolving address..." -#~ msgstr "Получение адреса..." +#~ msgid "Multiplayer" +#~ msgstr "Сетевая игра" -#~ msgid "Creating client..." -#~ msgstr "Создание клиента..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы" -#~ msgid "Creating server...." -#~ msgstr "Создание сервера..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Предупреждение: Неверная конфигурация. " -#~ msgid "Loading..." -#~ msgstr "Загрузка..." +#~ msgid "Configuration saved. " +#~ msgstr "Настройки сохранены. " -#~ msgid "Local install" -#~ msgstr "Локальная установка" +#~ msgid "is required by:" +#~ msgstr "требуется для:" -#~ msgid "Add mod:" -#~ msgstr "Добавить мод:" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет" -#~ msgid "MODS" -#~ msgstr "МОДЫ" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Анизотропная фильтрация" -#~ msgid "TEXTURE PACKS" -#~ msgstr "ПАКЕТЫ ТЕКСТУР" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-текстурирование" -#~ msgid "SINGLE PLAYER" -#~ msgstr "ОДИНОЧНАЯ ИГРА" - -#~ msgid "Finite Liquid" -#~ msgstr "Конечные жидкости" - -#~ msgid "Preload item visuals" -#~ msgstr "Предзагрузка изображений" - -#~ msgid "SETTINGS" -#~ msgstr "НАСТРОЙКИ" - -#~ msgid "Password" -#~ msgstr "Пароль" - -#~ msgid "Name" -#~ msgstr "Имя" - -#~ msgid "START SERVER" -#~ msgstr "СЕРВЕР" - -#~ msgid "Favorites:" -#~ msgstr "Избранное:" - -#~ msgid "CLIENT" -#~ msgstr "КЛИЕНТ" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Добавить мод" - -#~ msgid "Remove selected mod" -#~ msgstr "Удалить мод" - -#~ msgid "EDIT GAME" -#~ msgstr "РЕДАКТИРОВАНИЕ" - -#~ msgid "new game" -#~ msgstr "Создать игру" - -#~ msgid "edit game" -#~ msgstr "Редактировать" - -#~ msgid "Mods:" -#~ msgstr "Моды:" - -#~ msgid "Games" -#~ msgstr "Игры" - -#~ msgid "GAMES" -#~ msgstr "ИГРЫ" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Название" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Загрузить" diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 6a683f4d3..2fdb5b6bb 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -2,16 +2,15 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR mahmutelmas06@gmail.com, 2015. -#, approved msgid "" msgstr "" "Project-Id-Version: 0.1.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-04 14:450200\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-07-14 16:48+0200\n" "Last-Translator: Michal Čihař \n" -"Language-Team: Turkish " -"\n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,760 +20,624 @@ msgstr "" "X-Poedit-Language: Turkish\n" "X-Poedit-Basepath: \n" -#: builtin/fstk/ui.lua:67 -#, approved +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "Tamam" -#: builtin/mainmenu/dlg_config_world.lua:26 -#, approved -#| msgid "World:" +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Yükleniyor..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "Dünya:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, approved -#| msgid "Hide Game" +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "Oyunu Gizle" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -#, approved +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "Detayları gizle" -#: builtin/mainmenu/dlg_config_world.lua:46 -#, approved -#| msgid "Mod:" +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "Eklnt:" -#: builtin/mainmenu/dlg_config_world.lua:48 -#, approved -#| msgid "Depends:" +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "Bağımlılıklar :" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -#, approved +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Kaydet" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -#, approved -#| msgid "Cancel" +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Vazgeç" -#: builtin/mainmenu/dlg_config_world.lua:68 -#, approved +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "Paketi Aç" -#: builtin/mainmenu/dlg_config_world.lua:70 -#, approved -#| msgid "Disable MP" +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "Paketi Kapat" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -#, approved -#| msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "Etkinleştirildi" -#: builtin/mainmenu/dlg_config_world.lua:82 -#, approved -#| msgid "Enable all" +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "Hepsini etkinleştir" #: builtin/mainmenu/dlg_create_world.lua:50 -#, approved msgid "World name" msgstr "Dünya adı" #: builtin/mainmenu/dlg_create_world.lua:53 -#, approved -#| msgid "Seed" msgid "Seed" msgstr "Çekirdek" #: builtin/mainmenu/dlg_create_world.lua:56 -#, approved -#| msgid "Mapgen" msgid "Mapgen" msgstr "Mapgen" #: builtin/mainmenu/dlg_create_world.lua:59 -#, approved msgid "Game" msgstr "Oyun" #: builtin/mainmenu/dlg_create_world.lua:63 -#, approved msgid "Create" msgstr "Oluştur" #: builtin/mainmenu/dlg_create_world.lua:68 -#, approved -#| msgid "You have no subgames installed." msgid "You have no subgames installed." msgstr "Ek bir oyun modu yüklü değil." #: builtin/mainmenu/dlg_create_world.lua:69 -#, approved -#| msgid "Download one from minetest.net" msgid "Download one from minetest.net" msgstr "Minetest.net adresinden indirin" #: builtin/mainmenu/dlg_create_world.lua:72 -#, approved -msgid "" -"Warning: The minimal development test is meant for " -"developers." +msgid "Warning: The minimal development test is meant for developers." msgstr "Uyarı : Minimal Development Test geliştiriciler içindir." #: builtin/mainmenu/dlg_create_world.lua:73 -#, approved -msgid "" -"Download a subgame, such as minetest_game, from " -"minetest.net" +msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "Minetest.net adresinden bir oyun modu indirin" -#: builtin/mainmenu/dlg_create_world.lua:97 -#, approved +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr " \"$1\" isimli dünya zaten var" #: builtin/mainmenu/dlg_create_world.lua:116 -#, approved msgid "No worldname given or no game selected" msgstr "Dünya seçilmedi ya da adlandırılmadı" #: builtin/mainmenu/dlg_delete_mod.lua:26 -#, approved msgid "Are you sure you want to delete \"$1\"?" -msgstr "" -" \"$1\" 'i silmek istediğinizden emin misiniz " -"?" +msgstr " \"$1\" 'i silmek istediğinizden emin misiniz ?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -#, approved +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Evet" #: builtin/mainmenu/dlg_delete_mod.lua:28 -#, approved msgid "No of course not!" msgstr "Elbette hayır!" #: builtin/mainmenu/dlg_delete_mod.lua:41 -#, approved msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr:\"$1\" dosyası silerken hata" #: builtin/mainmenu/dlg_delete_mod.lua:45 -#, approved msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: \"$1\" eklenti konumu yanlış" #: builtin/mainmenu/dlg_delete_world.lua:24 -#, approved msgid "Delete World \"$1\"?" msgstr " \"$1\" dünyasını sil ?" #: builtin/mainmenu/dlg_delete_world.lua:26 -#, approved msgid "No" msgstr "Hayır" #: builtin/mainmenu/dlg_rename_modpack.lua:26 -#, approved msgid "Rename Modpack:" msgstr "Eklenti paketini yeniden adlandır :" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 -#, approved +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "Kabul et" -#: builtin/mainmenu/modmgr.lua:342 -#, approved +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "Eklenti yükle: Dosya: \"$1\"" -#: builtin/mainmenu/modmgr.lua:343 -#, approved +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" -"Install Mod: unsupported filetype \"$1\" or broken " -"archive" +"Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Eklenti yükle: Desteklenmeyen dosya uzantısı \"$1\" veya bozuk " -"dosya" +"Eklenti yükle: Desteklenmeyen dosya uzantısı \"$1\" veya bozuk dosya" -#: builtin/mainmenu/modmgr.lua:363 -#, approved +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr " $1 arası $2 yükleme başarısız" -#: builtin/mainmenu/modmgr.lua:366 -#, approved -msgid "" -"Install Mod: unable to find suitable foldername for modpack " -"$1" +#: builtin/mainmenu/modmgr.lua:368 +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "Eklenti yükle:$1 eklenti paketi için uygun bir klasör adı bulunamadı" -#: builtin/mainmenu/modmgr.lua:386 -#, approved -msgid "" -"Install Mod: unable to find real modname for: " -"$1" +#: builtin/mainmenu/modmgr.lua:388 +msgid "Install Mod: unable to find real modname for: $1" msgstr "Eklenti yükle: $1 için eklenti adı bulunamadı" #: builtin/mainmenu/store.lua:88 -#, approved msgid "Unsorted" msgstr "Sıralanmamış" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -#, approved +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "Ara" -#: builtin/mainmenu/store.lua:125 -#, approved -msgid "Downloading" -msgstr "İndiriliyor" - -#: builtin/mainmenu/store.lua:127 -#, approved -msgid "please wait..." -msgstr "lütfen bekleyin..." - -#, approved +#: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." msgstr " $1, indiriliyor, lütfen bekleyin" -#: builtin/mainmenu/store.lua:159 -#, approved +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "Yükleme başarılı :" -#: builtin/mainmenu/store.lua:163 -#, approved +#: builtin/mainmenu/store.lua:162 msgid "Shortname:" msgstr "Takma ad :" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -#, approved -msgid "ok" -msgstr "tamam" - -#: builtin/mainmenu/store.lua:476 -#, approved +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "Oylama" -#: builtin/mainmenu/store.lua:501 -#, approved +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "yeniden yükle" -#: builtin/mainmenu/store.lua:503 -#, approved +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "Yükle" -#: builtin/mainmenu/store.lua:522 -#, approved +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "Mağazayı kapat" -#: builtin/mainmenu/store.lua:530 -#, approved +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "$2 sayfadan $1 'cisi" #: builtin/mainmenu/tab_credits.lua:22 -#, approved msgid "Credits" msgstr "Hakkında" -#: builtin/mainmenu/tab_credits.lua:29 -#, approved +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "Ana geliştiriciler" -#: builtin/mainmenu/tab_credits.lua:43 -#, approved +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Aktif katkı sağlayanlar" -#: builtin/mainmenu/tab_credits.lua:48 -#, approved +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "Ana geliştiriciler" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "Katkı sağlayanlar" #: builtin/mainmenu/tab_mods.lua:30 -#, approved msgid "Installed Mods:" msgstr "Yüklenen eklentiler :" #: builtin/mainmenu/tab_mods.lua:39 -#, approved msgid "Online mod repository" msgstr "Çevirimiçi eklenti deposu" #: builtin/mainmenu/tab_mods.lua:78 -#, approved msgid "No mod description available" msgstr "Eklenti bilgisi yok" #: builtin/mainmenu/tab_mods.lua:82 -#, approved msgid "Mod information:" msgstr "Eklenti bilgileri:" #: builtin/mainmenu/tab_mods.lua:93 -#, approved msgid "Rename" msgstr "Adlandır" #: builtin/mainmenu/tab_mods.lua:95 -#, approved msgid "Uninstall selected modpack" msgstr "Seçilen eklenti paketini sil" #: builtin/mainmenu/tab_mods.lua:106 -#, approved msgid "Uninstall selected mod" msgstr "Seçili eklentiyi sil" #: builtin/mainmenu/tab_mods.lua:121 -#, approved msgid "Select Mod File:" msgstr "Eklenti seç :" #: builtin/mainmenu/tab_mods.lua:165 -#, approved msgid "Mods" msgstr "Eklentiler" #: builtin/mainmenu/tab_multiplayer.lua:23 -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -#, approved -msgid "Name/Password" -msgstr "Kullanıcı adı/Şifre" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, approved -msgid "Public Serverlist" -msgstr "Çevirimiçi Oyun Listesi" - -#, approved msgid "Address / Port :" msgstr "Adres / Port :" -#, approved +#: builtin/mainmenu/tab_multiplayer.lua:24 msgid "Name / Password :" msgstr "Kullanıcı Adı / Şifre :" +#: builtin/mainmenu/tab_multiplayer.lua:29 +#: builtin/mainmenu/tab_simple_main.lua:30 +msgid "Public Serverlist" +msgstr "Çevirimiçi Oyun Listesi" + #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -#, approved +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Sil" #: builtin/mainmenu/tab_multiplayer.lua:38 #: builtin/mainmenu/tab_simple_main.lua:34 -#, approved msgid "Connect" msgstr "Bağlan" -#: builtin/mainmenu/tab_multiplayer.lua:252 -#, approved +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 msgid "Creative mode" msgstr "Yaratıcı mod" -#, approved +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 msgid "Damage enabled" msgstr "Hasar alma etkin" -#, approved +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 msgid "PvP enabled" msgstr "Mücadele modu" -#, approved +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "Çevirimiçi Oyna" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -#, approved +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Yeni" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -#, approved +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Ayarla" #: builtin/mainmenu/tab_server.lua:29 -#, approved msgid "Start Game" msgstr "Oyunu Başlat" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -#, approved +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Dünya seç :" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -#, approved +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Yaratıcı Mod" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -#, approved +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Hasarı etkinleştir" #: builtin/mainmenu/tab_server.lua:35 -#, approved msgid "Public" msgstr "Herkese Açık" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Kullanıcı adı/Şifre" + #: builtin/mainmenu/tab_server.lua:45 -#, approved msgid "Bind Address" msgstr "Adresi doğrula" #: builtin/mainmenu/tab_server.lua:47 -#, approved msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_server.lua:51 -#, approved msgid "Server Port" msgstr "Sunucu portu" -#: builtin/mainmenu/tab_server.lua:174 -#, approved +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "Dünya seçilmedi ya da adlandırılmadı" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Sunucu Kur" -#: builtin/mainmenu/tab_settings.lua:23 -#, approved -msgid "" -"Are you sure to reset your singleplayer " -"world?" -msgstr "" -"Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz " -"?" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Şeffaf su" -#, approved +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "Dalgalanan Yapraklar" + +#: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Şık ağaçlar" + +#: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" msgstr "Süzme yok" -#, approved +#: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" msgstr "İki yönlü süzme" -#, approved +#: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" msgstr "Üç yönlü süzme" -#, approved +#: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" msgstr "Mipmap kapalı" -#, approved +#: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" msgstr "Mipmap" -#, approved -msgid "Mipmap Aniso. Filter" +#: builtin/mainmenu/tab_settings.lua:45 +#, fuzzy +msgid "Mipmap + Aniso. Filter" msgstr "Mipmap Aniso. Süzgeci" -#: builtin/mainmenu/tab_settings.lua:27 -#, approved +#: builtin/mainmenu/tab_settings.lua:98 +msgid "Are you sure to reset your singleplayer world?" +msgstr "Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz ?" + +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "Hayır!!!" -#: builtin/mainmenu/tab_settings.lua:134 -#, approved +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Pürüzsüz ışıklandırma" -#: builtin/mainmenu/tab_settings.lua:136 -#, approved +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Parçacıkları etkinleştir" -#: builtin/mainmenu/tab_settings.lua:138 -#, approved +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3 boyutlu bulutlar" -#, approved -msgid "Fancy Trees" -msgstr "Şık ağaçlar" - -#: builtin/mainmenu/tab_settings.lua:142 -#, approved +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "Şeffaf su" -#, approved +#: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" msgstr "İçiçe geçmiş cam" -#: builtin/mainmenu/tab_settings.lua:149 -#, approved -msgid "" -"Restart minetest for driver change to take " -"effect" -msgstr "" -"Değişikliklerin etkin olabilmesi için minetesti yeniden " -"başlatın" - -#: builtin/mainmenu/tab_settings.lua:151 -#, approved -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -#, approved -msgid "Anisotropic Filtering" -msgstr "Eşyönsüz süzme" - -#: builtin/mainmenu/tab_settings.lua:155 -#, approved -msgid "Bi-Linear Filtering" -msgstr "Çift yönlü süzme" - -#, approved +#: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "Nesne seçme göstergesi" -#, approved +#: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "Doku:" -#, approved +#: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "Kaplama:" -#: builtin/mainmenu/tab_settings.lua:157 -#, approved -msgid "Tri-Linear Filtering" -msgstr "Üç yönlü süzme" +#: builtin/mainmenu/tab_settings.lua:226 +msgid "Restart minetest for driver change to take effect" +msgstr "Değişikliklerin etkin olabilmesi için minetesti yeniden başlatın" -#: builtin/mainmenu/tab_settings.lua:160 -#, approved +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Shaders" -#: builtin/mainmenu/tab_settings.lua:164 -#, approved +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Tuşları değiştir" -#: builtin/mainmenu/tab_settings.lua:167 -#, approved +#: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" msgstr "Tek kişilik oyunu sıfırlayın" -#: builtin/mainmenu/tab_settings.lua:171 -#, approved +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "Menü boyutları" -#: builtin/mainmenu/tab_settings.lua:175 -#, approved +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "Ölçeklendirme menülere işlendi:" -#: builtin/mainmenu/tab_settings.lua:181 -#, approved +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "Touch free target" -#: builtin/mainmenu/tab_settings.lua:187 -#, approved +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "Touchthreshold (px)" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -#, approved +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" msgstr "Engebeler" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -#, approved +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "Normal haritalar oluştur" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -#, approved +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -#, approved +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "Dalgalanan Su" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -#, approved +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "Dalgalanan Yapraklar" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -#, approved +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "Dalgalanan Bitkiler" -#: builtin/mainmenu/tab_settings.lua:255 -#, approved -msgid "" -"To enable shaders the OpenGL driver needs to be " -"used." +#: builtin/mainmenu/tab_settings.lua:308 +msgid "To enable shaders the OpenGL driver needs to be used." msgstr "OpenGL sürücüleri seçilmeden Shader etkinleştirilemez." -#: builtin/mainmenu/tab_settings.lua:330 -#, approved +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Ayarlar" -#: builtin/mainmenu/tab_simple_main.lua:67 -#, approved -msgid "Fly mode" -msgstr "Uçuş modu" - -#: builtin/mainmenu/tab_simple_main.lua:71 -#, approved +#: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" msgstr "Tek kişilik oyunu başlat" -#, approved +#: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" msgstr "Eklentileri ayarla" -#: builtin/mainmenu/tab_simple_main.lua:191 -#, approved +#: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" msgstr "Ana" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 -#, approved +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Oyna" -#: builtin/mainmenu/tab_singleplayer.lua:224 -#, approved +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Tek Kişilik" #: builtin/mainmenu/tab_texturepacks.lua:49 -#, approved msgid "Select texture pack:" msgstr "Doku paketi seç :" #: builtin/mainmenu/tab_texturepacks.lua:69 -#, approved msgid "No information available" msgstr "Bilgi yok" #: builtin/mainmenu/tab_texturepacks.lua:114 -#, approved msgid "Texturepacks" msgstr "Doku paketi" -#: src/client.cpp:2726 -#, approved +#: src/client.cpp:1721 msgid "Loading textures..." msgstr "Dokular yükleniyor..." -#, approved +#: src/client.cpp:1736 msgid "Rebuilding shaders..." msgstr "Shader inşa ediliyor..." -#, approved +#: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "Nesneler yükleniyor..." -#, approved +#: src/client.cpp:1760 +#, fuzzy +msgid "Initializing nodes" +msgstr "Nesneler yükleniyor..." + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Nesne dokuları ..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 -#, approved +#: src/client.cpp:1793 msgid "Done!" msgstr "Tamam!" -#, approved +#: src/client/clientlauncher.cpp:185 msgid "Main Menu" msgstr "Ana menu" -#, approved +#: src/client/clientlauncher.cpp:223 msgid "Player name too long." msgstr "Kullanıcı adı çok uzun." -#, approved +#: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" msgstr "Bağlantı hatası ( Zaman aşımı ? )" -#, approved +#: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." msgstr "Dünya veya adres seçilmedi." -#, approved +#: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " msgstr "Belirtilen dünya konumu yok:" -#, approved +#: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" msgstr "Oyun yüklenemiyor \"" -#, approved +#: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "Geçersiz oyun özellikleri." -#, approved +#: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -#, approved +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "Uygula" -#, approved +#: src/game.cpp:1072 msgid "You died." msgstr "Geberdin." -#, approved +#: src/game.cpp:1073 msgid "Respawn" msgstr "Yeniden Canlan" -#: src/game.cpp:2250 -#, approved +#: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" @@ -802,7 +665,7 @@ msgstr "" "- tut&bırak, iki parmağı kullan\n" " --> slotuna bir item bırak\n" -#, approved +#: src/game.cpp:1106 msgid "" "Default Controls:\n" "- WASD: move\n" @@ -828,80 +691,71 @@ msgstr "" "- Fare tekerleği: Araç seç\n" "- T: Sohbet\n" -#, approved +#: src/game.cpp:1125 msgid "Continue" msgstr "Devam et" -#, approved +#: src/game.cpp:1129 msgid "Change Password" msgstr "Şifre değiştir" -#, approved +#: src/game.cpp:1134 msgid "Sound Volume" msgstr "Ses yüksekliği :" -#, approved +#: src/game.cpp:1136 msgid "Change Keys" msgstr "Tuşları değiştir" -#, approved +#: src/game.cpp:1139 msgid "Exit to Menu" msgstr "Menüye dön" -#, approved +#: src/game.cpp:1141 msgid "Exit to OS" msgstr "Oyundan Çık" -#, approved +#: src/game.cpp:1841 msgid "Shutting down..." msgstr "Kapatılıyor..." -#, approved -msgid "Loading..." -msgstr "Yükleniyor..." - -#, approved +#: src/game.cpp:1948 msgid "Creating server..." msgstr "Sunucu oluşturuluyor..." -#, approved +#: src/game.cpp:1984 msgid "Creating client..." msgstr "İstemci oluşturuluyor..." -#, approved +#: src/game.cpp:2159 msgid "Resolving address..." msgstr "Adres çözümleniyor..." -#, approved +#: src/game.cpp:2261 msgid "Connecting to server..." msgstr "Sunucuya bağlanılıyor..." -#, approved +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "Nesne tanımlamaları..." -#: src/game.cpp:2255 -#, approved +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "Blok tanımlamaları..." -#: src/game.cpp:2262 -#, approved +#: src/game.cpp:2329 msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -#, approved -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2271 -#, approved -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4220 -#, approved +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -909,516 +763,449 @@ msgstr "" "\n" "Hata ayrıntıları için debug.txt dosyasını inceleyin." -#: src/guiFormSpecMenu.cpp:2055 -#: src/guiFormSpecMenu.cpp:2846 -#, approved +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "Entrer " +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "tamam" + #: src/guiKeyChangeMenu.cpp:125 -#, approved -msgid "" -"Keybindings. (If this menu screws up, remove stuff from " -"minetest.conf)" +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )" #: src/guiKeyChangeMenu.cpp:165 -#, approved msgid "\"Use\" = climb down" msgstr "\"Kullan Tuşu\" = Aşağı in" #: src/guiKeyChangeMenu.cpp:180 -#, approved msgid "Double tap \"jump\" to toggle fly" msgstr "Çift zıplayarak uçma modunu aç/kapa" -#: src/guiKeyChangeMenu.cpp:296 -#, approved +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Tuş zaten kullanımda" -#: src/guiKeyChangeMenu.cpp:371 -#, approved +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "tuşa bas" -#: src/guiKeyChangeMenu.cpp:397 -#, approved +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "İleri" -#: src/guiKeyChangeMenu.cpp:398 -#, approved +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Geri" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -#, approved +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Sol" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -#, approved +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Sağ" -#: src/guiKeyChangeMenu.cpp:401 -#, approved +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Kullan" -#: src/guiKeyChangeMenu.cpp:402 -#, approved +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Zıpla" -#: src/guiKeyChangeMenu.cpp:403 -#, approved +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Sessiz Yürü" -#: src/guiKeyChangeMenu.cpp:404 -#, approved +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Bırak" -#: src/guiKeyChangeMenu.cpp:405 -#, approved +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Envanter" -#: src/guiKeyChangeMenu.cpp:406 -#, approved +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Konuşma" -#: src/guiKeyChangeMenu.cpp:407 -#, approved +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Komut" -#: src/guiKeyChangeMenu.cpp:408 -#, approved +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Konsol" -#: src/guiKeyChangeMenu.cpp:409 -#, approved +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Uçuş modu aç/kapa" -#: src/guiKeyChangeMenu.cpp:410 -#, approved +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Hız modu aç/kapa" -#: src/guiKeyChangeMenu.cpp:411 -#, approved +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Hız modu aç/kapa" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Noclip aç/kapa" -#: src/guiKeyChangeMenu.cpp:412 -#, approved +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Uzaklık seçimi" -#: src/guiKeyChangeMenu.cpp:413 -#, approved +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Yazdırma yığınları" -#: src/guiPasswordChange.cpp:106 -#, approved +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Eski şifre" -#: src/guiPasswordChange.cpp:122 -#, approved +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Yeni şifre" -#: src/guiPasswordChange.cpp:137 -#, approved +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Şifreyi doğrulayın" -#: src/guiPasswordChange.cpp:153 -#, approved +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Değiştir" -#: src/guiPasswordChange.cpp:162 -#, approved +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Şifreler uyuşmuyor !" -#: src/guiVolumeChange.cpp:106 -#, approved +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Ses yüksekliği :" -#: src/guiVolumeChange.cpp:120 -#, approved +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Çıkış" -#: src/keycode.cpp:224 -#, approved +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Sol tuşu" -#: src/keycode.cpp:224 -#, approved +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Orta Tuş" -#: src/keycode.cpp:224 -#, approved +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Sağ tuş" -#: src/keycode.cpp:224 -#, approved +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X Button 1" -#: src/keycode.cpp:225 -#, approved +#: src/keycode.cpp:224 msgid "Back" msgstr "Geri" -#: src/keycode.cpp:225 -#, approved +#: src/keycode.cpp:224 msgid "Clear" msgstr "Temizle" -#: src/keycode.cpp:225 -#, approved +#: src/keycode.cpp:224 msgid "Return" msgstr "Return" -#: src/keycode.cpp:225 -#, approved +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 -#, approved +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X Button 2" -#: src/keycode.cpp:226 -#, approved +#: src/keycode.cpp:225 msgid "Capital" msgstr "Büyük" -#: src/keycode.cpp:226 -#, approved +#: src/keycode.cpp:225 msgid "Control" msgstr "Kontroller" -#: src/keycode.cpp:226 -#, approved +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 -#, approved +#: src/keycode.cpp:225 msgid "Menu" msgstr "Menü" -#: src/keycode.cpp:226 -#, approved +#: src/keycode.cpp:225 msgid "Pause" msgstr "Beklet" -#: src/keycode.cpp:226 -#, approved +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 -#, approved +#: src/keycode.cpp:226 msgid "Convert" msgstr "Dönüştür" -#: src/keycode.cpp:227 -#, approved +#: src/keycode.cpp:226 msgid "Escape" msgstr "Çıkış" -#: src/keycode.cpp:227 -#, approved +#: src/keycode.cpp:226 msgid "Final" msgstr "Bitiş" -#: src/keycode.cpp:227 -#, approved +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 -#, approved +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 -#, approved +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "Dönüştürme" -#: src/keycode.cpp:228 -#, approved +#: src/keycode.cpp:227 msgid "End" msgstr "Son" -#: src/keycode.cpp:228 -#, approved +#: src/keycode.cpp:227 msgid "Home" msgstr "Ev" -#: src/keycode.cpp:228 -#, approved +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "Mod değiştir" -#: src/keycode.cpp:228 -#, approved +#: src/keycode.cpp:227 msgid "Next" msgstr "İleri" -#: src/keycode.cpp:228 -#, approved +#: src/keycode.cpp:227 msgid "Prior" msgstr "Öncelikli" -#: src/keycode.cpp:228 -#, approved +#: src/keycode.cpp:227 msgid "Space" msgstr "Boşluk" -#: src/keycode.cpp:229 -#, approved +#: src/keycode.cpp:228 msgid "Down" msgstr "Aşağı" -#: src/keycode.cpp:229 -#, approved +#: src/keycode.cpp:228 msgid "Execute" msgstr "Çalıştır" -#: src/keycode.cpp:229 -#, approved +#: src/keycode.cpp:228 msgid "Print" msgstr "Yazdır" -#: src/keycode.cpp:229 -#, approved +#: src/keycode.cpp:228 msgid "Select" msgstr "Seç" -#: src/keycode.cpp:229 -#, approved +#: src/keycode.cpp:228 msgid "Up" msgstr "Yukarı" -#: src/keycode.cpp:230 -#, approved +#: src/keycode.cpp:229 msgid "Help" msgstr "Yardım" -#: src/keycode.cpp:230 -#, approved +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 -#, approved +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "Ekran Resmi" -#: src/keycode.cpp:233 -#, approved +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Sol Windows tuşu" -#: src/keycode.cpp:234 -#, approved +#: src/keycode.cpp:233 msgid "Apps" msgstr "Uygulamalar" -#: src/keycode.cpp:234 -#, approved +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Numpad 0" -#: src/keycode.cpp:234 -#, approved +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Numpad 1" -#: src/keycode.cpp:234 -#, approved +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Sağ Windows tuşu" -#: src/keycode.cpp:234 -#, approved +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Uyu" -#: src/keycode.cpp:235 -#, approved +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Numpad 2" -#: src/keycode.cpp:235 -#, approved +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Numpad 3" -#: src/keycode.cpp:235 -#, approved +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Numpad 4" -#: src/keycode.cpp:235 -#, approved +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Numpad 5" -#: src/keycode.cpp:235 -#, approved +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Numpad 6" -#: src/keycode.cpp:235 -#, approved +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Numpad 7" -#: src/keycode.cpp:236 -#, approved +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Numpad *" +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Numpad +" -#: src/keycode.cpp:236 -#, approved -msgid "Numpad " -msgstr "Numpad " - +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Numpad -" -#: src/keycode.cpp:236 -#, approved +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Numpad /" -#: src/keycode.cpp:236 -#, approved +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Numpad 8" -#: src/keycode.cpp:236 -#, approved +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Numpad 9" -#: src/keycode.cpp:240 -#, approved +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 -#, approved +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 -#, approved +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Sol Shift" -#: src/keycode.cpp:241 -#, approved +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Sağ Shift" -#: src/keycode.cpp:242 -#, approved +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Sol CTRL" -#: src/keycode.cpp:242 -#, approved +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Sol Menu" -#: src/keycode.cpp:242 -#, approved +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Sağ CTRL" -#: src/keycode.cpp:242 -#, approved +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Sağ Menu" -#: src/keycode.cpp:244 -#, approved +#: src/keycode.cpp:243 msgid "Comma" msgstr "Virgul" -#: src/keycode.cpp:244 -#, approved +#: src/keycode.cpp:243 msgid "Minus" msgstr "Eksi" -#: src/keycode.cpp:244 -#, approved +#: src/keycode.cpp:243 msgid "Period" msgstr "Dönem" -#: src/keycode.cpp:244 -#, approved +#: src/keycode.cpp:243 msgid "Plus" msgstr "Artı" -#: src/keycode.cpp:248 -#, approved +#: src/keycode.cpp:247 msgid "Attn" msgstr "Dikkat" -#: src/keycode.cpp:248 -#, approved +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "l'OEF 'i sil" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Temizle" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp:248 msgid "Zoom" msgstr "Yakınlaştır" + +#~ msgid "Numpad " +#~ msgstr "Numpad " + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Fly mode" +#~ msgstr "Uçuş modu" + +#~ msgid "Tri-Linear Filtering" +#~ msgstr "Üç yönlü süzme" + +#~ msgid "Bi-Linear Filtering" +#~ msgstr "Çift yönlü süzme" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Eşyönsüz süzme" + +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" + +#~ msgid "please wait..." +#~ msgstr "lütfen bekleyin..." + +#~ msgid "Downloading" +#~ msgstr "İndiriliyor" diff --git a/po/uk/minetest.po b/po/uk/minetest.po index f503948e7..697214e08 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2013-06-27 01:22+0200\n" "Last-Translator: Vladimir a \n" "Language-Team: LANGUAGE \n" @@ -19,62 +19,78 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "Завантаження..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 #, fuzzy msgid "World:" msgstr "Виберіть світ:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 #, fuzzy msgid "Hide Game" msgstr "Гра" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 #, fuzzy msgid "Depends:" msgstr "залежить від:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "Зберегти" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "Відміна" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 #, fuzzy msgid "Enable MP" msgstr "Увімкнути Все" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 #, fuzzy msgid "Disable MP" msgstr "Вимкнути Усе" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "Увімкнено" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 #, fuzzy msgid "Enable all" msgstr "Увімкнути Все" @@ -115,7 +131,7 @@ msgstr "" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Неможливо створити світ: Світ з таким ім'ям вже існує" @@ -130,7 +146,7 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "Так" @@ -159,31 +175,31 @@ msgstr "Ні" msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 #, fuzzy msgid "Accept" msgstr "Підтвердити" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 #, fuzzy msgid "Failed to install $1 to $2" msgstr "Не вдалося ініціалізувати світ" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" @@ -191,49 +207,40 @@ msgstr "" msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Вниз" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Назва Світу" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" @@ -241,15 +248,19 @@ msgstr "" msgid "Credits" msgstr "Подяка" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" @@ -291,12 +302,13 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "Адреса/Порт" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "Ім'я/Пароль" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -306,7 +318,7 @@ msgid "Public Serverlist" msgstr "Список публічних серверів:" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Видалити" @@ -315,15 +327,33 @@ msgstr "Видалити" msgid "Connect" msgstr "Підключитися" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "Режим Створення" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "Увімкнено" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "Увімкнено" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Новий" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Налаштувати" @@ -332,17 +362,18 @@ msgstr "Налаштувати" msgid "Start Game" msgstr "Почати гру / Підключитися" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Виберіть світ:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Режим Створення" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Ввімкнути урон" @@ -350,6 +381,10 @@ msgstr "Ввімкнути урон" msgid "Public" msgstr "Публичний" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "Ім'я/Пароль" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" @@ -362,151 +397,183 @@ msgstr "" msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "Непрозора вода" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "Гарні дерева" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "Білінійна фільтрація" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "Трилінійна фільтрація" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Рівне освітлення" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Ввімкнути частки" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D Хмари" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Гарні дерева" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 #, fuzzy msgid "Opaque Water" msgstr "Непрозора вода" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Підключитися" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "MIP-текстурування" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Анізотропна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Білінійна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Трилінійна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Шейдери" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Змінити клавіши" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Одиночна гра" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "MIP-текстурування" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Налаштування" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Одиночна гра" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Налаштувати" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Головне Меню" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Грати" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Одиночна гра" @@ -522,39 +589,186 @@ msgstr "" msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "Завантаження..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Отримання адреси..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "Текстура предметів..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "Головне Меню" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "Помилка з'єднання (час вийшов?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "Жоден світ не вибрано та не надано адреси. Нічого не робити." + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "Неможливо знайти, або завантажити гру \"" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "Помилкова конфігурація гри." + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "Далі" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "Ви загинули." + +#: src/game.cpp:1073 msgid "Respawn" msgstr "Народитися" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +#, fuzzy +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Управління за замовчанню:\n" +"- WASD: рух\n" +"- Space: стрибок/лізти в гору\n" +"- Shift: крастися/лізти в низ\n" +"- Q: кинути предмет\n" +"- I: інвентар\n" +"- Мишка: поворот/дивитися\n" +"- Ліва клавіша миші: копати/удар\n" +"- Права клавіша миші: поставити/використовувати\n" +"- Колесо миші: вибір предмета\n" +"- T: чат\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "Продовжити" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "Змінити Пароль" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "Гучність звуку" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "Змінити клавіши" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "Вихід в меню" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "Вихід з гри" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "Створення сервера..." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "Створення клієнта..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "Отримання адреси..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "Підключення до сервера..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "" -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "" -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "" -#: src/game.cpp:2267 -msgid " KB/s" +#: src/game.cpp:2334 +msgid "KiB/s" msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" +#: src/game.cpp:2338 +msgid "MiB/s" msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -562,14 +776,14 @@ msgstr "" "\n" "Деталі у файлі debug.txt." -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "Далі" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" @@ -585,573 +799,501 @@ msgstr "\"Використовувати\" = підніматися в гору" msgid "Double tap \"jump\" to toggle fly" msgstr "Подвійний \"Стрибок\" щоб полетіти" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Клавіша вже використовується" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "Натисніть клавішу" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Уперед" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Назад" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Ліворуч" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Праворуч" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Використовувати" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Стрибок" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Крастися" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Викинути" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Інвентар" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Чат" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Комманда" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Консоль" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Переключити режим польоту" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Переключити швидкий режим" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Переключити швидкий режим" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Переключити режим проходження скрізь стін" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Вибір діапазону" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Надрукувати стек" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Старий Пароль" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Новий Пароль" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Підтвердження нового пароля" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Змінити" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Паролі не збігаються!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Гучність Звуку: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "Вихід" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "Ліва кнопка" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "Середня кнопка" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "Права кнопка" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "Додаткова кнопка 1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 #, fuzzy msgid "Back" msgstr "Назад" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 #, fuzzy msgid "Clear" msgstr "Clear" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 #, fuzzy msgid "Return" msgstr "Enter" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "Додаткова кнопка 2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "Caps Lock" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Ctrl" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "Kana" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "Меню" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "Пауза" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 #, fuzzy msgid "Convert" msgstr "Конвертувати" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Esc" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 #, fuzzy msgid "Final" msgstr "Кинець" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 #, fuzzy msgid "Nonconvert" msgstr "Не конвертуванно" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 #, fuzzy msgid "Home" msgstr "Home" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 #, fuzzy msgid "Mode Change" msgstr "Mode" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "Page Up" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Page Down" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 #, fuzzy msgid "Space" msgstr "Space" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "Вниз" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 #, fuzzy msgid "Execute" msgstr "Виконати" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "Print Screen" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "Select" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "Вгору" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "Допомога" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 #, fuzzy msgid "Snapshot" msgstr "Знімок" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "Ліва клавіша Win (Command)" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "Додатки" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "Num 0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "Num 1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "Права клавіша Win (Command)" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "Сон" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "Num 2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "Num 3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "Num 4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "Num 5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "Num 6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "Num 7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "Num *" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "Num +" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "Num -" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "Num /" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "Num 8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "Num 9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "Num Lock" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "Ліва клавіша Shift" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "Права клавіша Shift" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "Ліва клавіша Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "Ліва клавіша Menu" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "Права клавіша Control" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "Права клавіша Menu" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "Кома" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "Мінус" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 #, fuzzy msgid "Period" msgstr "Період" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "Плюс" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 #, fuzzy msgid "Attn" msgstr "Увага" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 #, fuzzy msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 #, fuzzy msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 #, fuzzy msgid "OEM Clear" msgstr "OEM Очистити" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 #, fuzzy msgid "Zoom" msgstr "Збільшити" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Головне Меню" +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Гра" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "" +#, fuzzy +#~ msgid "Games" +#~ msgstr "Гра" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Помилка з'єднання (час вийшов?)" +#~ msgid "Favorites:" +#~ msgstr "Улюблені:" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Жоден світ не вибрано та не надано адреси. Нічого не робити." +#, fuzzy +#~ msgid "Password" +#~ msgstr "Старий Пароль" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" +#~ msgid "Preload item visuals" +#~ msgstr "Попереднє завантаження зображень" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Неможливо знайти, або завантажити гру \"" +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Кінцеві рідини" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Помилкова конфігурація гри." +#~ msgid "Failed to delete all world files" +#~ msgstr "Помилка при видаленні файлів світу" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Неможливо створити світ: Не знайдено жодної гри" + +#~ msgid "Files to be deleted" +#~ msgstr "Файлів, що підлягають видаленню" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Неможливо видалити світ: Нічого не вибрано" + +#~ msgid "Address required." +#~ msgstr "Адреса необхідна." + +#~ msgid "Create world" +#~ msgstr "Створити світ" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Залишіть адресу незаповненою для створення локального серверу." + +#~ msgid "Show Favorites" +#~ msgstr "Показати Улюблені" + +#~ msgid "Show Public" +#~ msgstr "Показати Публічні" + +#~ msgid "Advanced" +#~ msgstr "Додатково" + +#~ msgid "Multiplayer" +#~ msgstr "Мережева гра" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Попередження: Помилкова конфігурація. " + +#~ msgid "Configuration saved. " +#~ msgstr "Налаштування Збережено. " + +#~ msgid "is required by:" +#~ msgstr "необхідний для:" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Ліва кнопка миші: Перемістити усі предмети, Права кнопка миші: " #~ "Перемістити один предмет" -#~ msgid "is required by:" -#~ msgstr "необхідний для:" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Анізотропна фільтрація" -#~ msgid "Configuration saved. " -#~ msgstr "Налаштування Збережено. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Попередження: Помилкова конфігурація. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи" - -#~ msgid "Multiplayer" -#~ msgstr "Мережева гра" - -#~ msgid "Advanced" -#~ msgstr "Додатково" - -#~ msgid "Show Public" -#~ msgstr "Показати Публічні" - -#~ msgid "Show Favorites" -#~ msgstr "Показати Улюблені" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Залишіть адресу незаповненою для створення локального серверу." - -#~ msgid "Create world" -#~ msgstr "Створити світ" - -#~ msgid "Address required." -#~ msgstr "Адреса необхідна." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Неможливо видалити світ: Нічого не вибрано" - -#~ msgid "Files to be deleted" -#~ msgstr "Файлів, що підлягають видаленню" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Неможливо створити світ: Не знайдено жодної гри" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Помилка при видаленні файлів світу" +#~ msgid "Mip-Mapping" +#~ msgstr "MIP-текстурування" #, fuzzy -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Управління за замовчанню:\n" -#~ "- WASD: рух\n" -#~ "- Space: стрибок/лізти в гору\n" -#~ "- Shift: крастися/лізти в низ\n" -#~ "- Q: кинути предмет\n" -#~ "- I: інвентар\n" -#~ "- Мишка: поворот/дивитися\n" -#~ "- Ліва клавіша миші: копати/удар\n" -#~ "- Права клавіша миші: поставити/використовувати\n" -#~ "- Колесо миші: вибір предмета\n" -#~ "- T: чат\n" - -#~ msgid "Exit to OS" -#~ msgstr "Вихід з гри" - -#~ msgid "Exit to Menu" -#~ msgstr "Вихід в меню" - -#~ msgid "Sound Volume" -#~ msgstr "Гучність звуку" - -#~ msgid "Change Password" -#~ msgstr "Змінити Пароль" - -#~ msgid "Continue" -#~ msgstr "Продовжити" - -#~ msgid "You died." -#~ msgstr "Ви загинули." - -#~ msgid "Connecting to server..." -#~ msgstr "Підключення до сервера..." - -#~ msgid "Resolving address..." -#~ msgstr "Отримання адреси..." - -#~ msgid "Creating client..." -#~ msgstr "Створення клієнта..." - -#~ msgid "Creating server...." -#~ msgstr "Створення сервера..." - -#~ msgid "Loading..." -#~ msgstr "Завантаження..." - -#, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Кінцеві рідини" - -#~ msgid "Preload item visuals" -#~ msgstr "Попереднє завантаження зображень" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Старий Пароль" - -#~ msgid "Favorites:" -#~ msgstr "Улюблені:" - -#, fuzzy -#~ msgid "Games" -#~ msgstr "Гра" - -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Гра" +#~ msgid "Downloading" +#~ msgstr "Вниз" diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index efc5b7f6f..bda9dc6e7 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-04-19 02:00+0800\n" "Last-Translator: Ang Weijie \n" "Language-Team: LANGUAGE \n" @@ -18,57 +18,73 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" msgstr "确定" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "载入中..." + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" msgstr "世界:" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" msgstr "隐藏游戏" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" msgstr "隐藏MOD包内容" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" msgstr "MOD:" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" msgstr "依赖于:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" msgstr "保存" -#: builtin/mainmenu/dlg_config_world.lua:52 +#: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/dlg_config_world.lua:68 +#: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" msgstr "启用MOD包" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" msgstr "禁用MOD包" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" msgstr "启用" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" msgstr "全部启用" @@ -108,7 +124,7 @@ msgstr "警告: 最小化开发测试为开发人员所使用。" msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "从minetest.net下载一个游戏,例如:minetest_game" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" msgstr "名为 \"$1\" 的世界已经存在" @@ -122,7 +138,7 @@ msgstr "你确认要删除\"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" msgstr "是" @@ -150,15 +166,15 @@ msgstr "否" msgid "Rename Modpack:" msgstr "重命名MOD包:" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" msgstr "接受" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" msgstr "安装MOD:文件:”$1“" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua:345 #, fuzzy msgid "" "\n" @@ -167,15 +183,15 @@ msgstr "" "\n" "安装MOD:不支持的文件类型“$1“" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" msgstr "无法安装$1到$2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "安装MOD:找不到MOD包$1的合适文件夹名" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "安装MOD:找不到$1的真正MOD名" @@ -183,49 +199,41 @@ msgstr "安装MOD:找不到$1的真正MOD名" msgid "Unsorted" msgstr "未分类" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "搜索" -#: builtin/mainmenu/store.lua:125 +#: builtin/mainmenu/store.lua:126 #, fuzzy -msgid "Downloading" -msgstr "下载中" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." +msgid "Downloading $1, please wait..." msgstr "请稍候..." -#: builtin/mainmenu/store.lua:159 +#: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "成功的安装:" -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "短名称" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "确定" - -#: builtin/mainmenu/store.lua:476 +#: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "评级" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "重新安装" -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "安装" -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "关闭商店" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "第$1页,共$2页" @@ -233,15 +241,20 @@ msgstr "第$1页,共$2页" msgid "Credits" msgstr "归功" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "内部开发人员" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "积极贡献者" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua:54 +#, fuzzy +msgid "Previous Core Developers" +msgstr "内部开发人员" + +#: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "前贡献者" @@ -282,12 +295,13 @@ msgid "Mods" msgstr "MODS" #: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#, fuzzy +msgid "Address / Port :" msgstr "地址/端口" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua:24 +#, fuzzy +msgid "Name / Password :" msgstr "名字/密码" #: builtin/mainmenu/tab_multiplayer.lua:29 @@ -296,7 +310,7 @@ msgid "Public Serverlist" msgstr "公共服务器列表" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "删除" @@ -305,15 +319,33 @@ msgstr "删除" msgid "Connect" msgstr "连接" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +#, fuzzy +msgid "Creative mode" +msgstr "创造模式" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +#, fuzzy +msgid "Damage enabled" +msgstr "启用" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +#, fuzzy +msgid "PvP enabled" +msgstr "启用" + +#: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "客户端" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "新建" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "配置" @@ -321,17 +353,18 @@ msgstr "配置" msgid "Start Game" msgstr "启动游戏" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua:30 +#: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "选择世界:" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "创造模式" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "开启伤害风险" @@ -339,6 +372,10 @@ msgstr "开启伤害风险" msgid "Public" msgstr "公共服务器" +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "名字/密码" + #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "绑定地址" @@ -351,150 +388,184 @@ msgstr "端口" msgid "Server Port" msgstr "服务器端口" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +#, fuzzy +msgid "No world created or selected!" +msgstr "未给定世界名或未选择游戏" + +#: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "服务器" +#: builtin/mainmenu/tab_settings.lua:21 +#, fuzzy +msgid "Opaque Leaves" +msgstr "不透明的水" + +#: builtin/mainmenu/tab_settings.lua:22 +#, fuzzy +msgid "Simple Leaves" +msgstr "摇动的叶子" + #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy +msgid "Fancy Leaves" +msgstr "花式树" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +#, fuzzy +msgid "Bilinear Filter" +msgstr "双线性过滤" + +#: builtin/mainmenu/tab_settings.lua:34 +#, fuzzy +msgid "Trilinear Filter" +msgstr "三线性过滤" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "你确定要重置您的单人世界吗?" -#: builtin/mainmenu/tab_settings.lua:27 +#: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "不!!!" -#: builtin/mainmenu/tab_settings.lua:134 +#: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "平滑光照" -#: builtin/mainmenu/tab_settings.lua:136 +#: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "启用粒子效果" -#: builtin/mainmenu/tab_settings.lua:138 +#: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "三维云彩" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "花式树" - -#: builtin/mainmenu/tab_settings.lua:142 +#: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" msgstr "不透明的水" -#: builtin/mainmenu/tab_settings.lua:144 +#: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "连接的玻璃" -#: builtin/mainmenu/tab_settings.lua:149 +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "重启minetest让驱动变化生效" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "贴图处理" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "各向异性过滤" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "双线性过滤" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "三线性过滤" - -#: builtin/mainmenu/tab_settings.lua:160 +#: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "着色器" -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "改变键位设置" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "重置单人游戏" -#: builtin/mainmenu/tab_settings.lua:171 +#: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "GUI缩放因子" -#: builtin/mainmenu/tab_settings.lua:175 +#: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "菜单元素应用缩放因子" -#: builtin/mainmenu/tab_settings.lua:181 +#: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "自由触摸目标" -#: builtin/mainmenu/tab_settings.lua:187 +#: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "触控阈值(像素)" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "贴图处理" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "产生法线贴图" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "视差贴图" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "摇动的水" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "摇动的叶子" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "摇动的植物" -#: builtin/mainmenu/tab_settings.lua:255 +#: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "启用着色器需要使用OpenGL驱动。" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "设置" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "飞行模式" - -#: builtin/mainmenu/tab_simple_main.lua:71 +#: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "单人游戏" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "配置MOD" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "主菜单" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "开始游戏" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "单人游戏" @@ -511,39 +582,186 @@ msgstr "无资料可得" msgid "Texturepacks" msgstr "材质包" -#: src/client.cpp:2726 +#: src/client.cpp:1721 +#, fuzzy +msgid "Loading textures..." +msgstr "载入中..." + +#: src/client.cpp:1736 +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "正在解析地址..." + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 msgid "Item textures..." msgstr "物品材质..." +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "主菜单" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "玩家的名字太长了" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "连接出错(超时?)" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "没有选择世界或提供地址。未执行操作。" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "提供世界地址不存在" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "无法找到或载入游戏模式" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "非法游戏模式规格。" + #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1063 +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "继续" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "你死了。" + +#: src/game.cpp:1073 msgid "Respawn" msgstr "重生" -#: src/game.cpp:2250 +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"默认控制:\n" +"W/A/S/D: 移动\n" +"空格: 跳/爬\n" +"Shift: 潜行/向下\n" +"Q: 丢物品\n" +"I: 物品栏\n" +"鼠标:转身/环顾\n" +"鼠标左键: 挖\n" +"鼠标右键: 放/使用\n" +"鼠标滚轮: 选择物品\n" +"T: 聊天\n" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "继续" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "更改密码" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "音量" + +#: src/game.cpp:1136 +#, fuzzy +msgid "Change Keys" +msgstr "改变键位设置" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "退出至菜单" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "退出至操作系统" + +#: src/game.cpp:1841 +#, fuzzy +msgid "Shutting down..." +msgstr "关闭中......" + +#: src/game.cpp:1948 +#, fuzzy +msgid "Creating server..." +msgstr "正在建立服务器...." + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "正在建立客户端..." + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "正在解析地址..." + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "正在连接服务器..." + +#: src/game.cpp:2317 msgid "Item definitions..." msgstr "物品定义..." -#: src/game.cpp:2255 +#: src/game.cpp:2322 msgid "Node definitions..." msgstr "方块定义..." -#: src/game.cpp:2262 +#: src/game.cpp:2329 msgid "Media..." msgstr "媒体..." -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "千字节/秒" +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "兆字节/秒" +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" -#: src/game.cpp:4220 +#: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." @@ -551,14 +769,14 @@ msgstr "" "\n" "查看 debug.txt 以获得详细信息。" -#: src/guiFormSpecMenu.cpp:2055 -msgid "Proceed" -msgstr "继续" - -#: src/guiFormSpecMenu.cpp:2846 +#: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "输入" +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "确定" + #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "键位配置。(如果这个菜单被弄乱,从minetest.conf中删掉点东西)" @@ -571,476 +789,485 @@ msgstr "“使用” = 向下爬" msgid "Double tap \"jump\" to toggle fly" msgstr "连按两次“跳”切换飞行模式" -#: src/guiKeyChangeMenu.cpp:296 +#: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "按键已被占用" -#: src/guiKeyChangeMenu.cpp:371 +#: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "按键" -#: src/guiKeyChangeMenu.cpp:397 +#: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "向前" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "向后" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "向左" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "向右" -#: src/guiKeyChangeMenu.cpp:401 +#: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "使用" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "跳" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "潜行" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "丢出" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "物品栏" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "聊天" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "命令" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "控制台" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "切换飞行模式" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "切换快速移动模式" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp:413 +#, fuzzy +msgid "Toggle Cinematic" +msgstr "切换快速移动模式" + +#: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "切换穿墙模式" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "选择范围" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "打印栈" -#: src/guiPasswordChange.cpp:106 +#: src/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "旧密码" -#: src/guiPasswordChange.cpp:122 +#: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "新密码" -#: src/guiPasswordChange.cpp:137 +#: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "确认密码" -#: src/guiPasswordChange.cpp:153 +#: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "更改" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "密码不匹配!" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "音量: " -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp:119 msgid "Exit" msgstr "退出" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Left Button" msgstr "左键" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Middle Button" msgstr "中键" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "Right Button" msgstr "右键" -#: src/keycode.cpp:224 +#: src/keycode.cpp:223 msgid "X Button 1" msgstr "X键1" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Back" msgstr "退格" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Clear" msgstr "Clear键" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Return" msgstr "回车" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "Tab" msgstr "Tab键" -#: src/keycode.cpp:225 +#: src/keycode.cpp:224 msgid "X Button 2" msgstr "X键2" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Capital" msgstr "大写" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Control" msgstr "Ctrl键" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Kana" msgstr "假名" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Menu" msgstr "菜单" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Pause" msgstr "暂停" -#: src/keycode.cpp:226 +#: src/keycode.cpp:225 msgid "Shift" msgstr "Shift键" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Convert" msgstr "转换" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Escape" msgstr "Escape键" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Final" msgstr "Final键" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Junja" msgstr "Junja键" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Kanji" msgstr "Kanji键" -#: src/keycode.cpp:227 +#: src/keycode.cpp:226 msgid "Nonconvert" msgstr "无变换" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "End" msgstr "End键" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Home" msgstr "Home键" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Mode Change" msgstr "改变模式" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Next" msgstr "下一个" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Prior" msgstr "Prior键" -#: src/keycode.cpp:228 +#: src/keycode.cpp:227 msgid "Space" msgstr "空格" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Down" msgstr "向下" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Execute" msgstr "执行" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Print" msgstr "打印" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Select" msgstr "选择" -#: src/keycode.cpp:229 +#: src/keycode.cpp:228 msgid "Up" msgstr "向上" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Help" msgstr "帮助" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Insert" msgstr "插入" -#: src/keycode.cpp:230 +#: src/keycode.cpp:229 msgid "Snapshot" msgstr "快照" -#: src/keycode.cpp:233 +#: src/keycode.cpp:232 msgid "Left Windows" msgstr "左窗口" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Apps" msgstr "应用" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 0" msgstr "小键盘0" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Numpad 1" msgstr "小键盘1" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Right Windows" msgstr "右窗口" -#: src/keycode.cpp:234 +#: src/keycode.cpp:233 msgid "Sleep" msgstr "睡眠" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 2" msgstr "小键盘2" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 3" msgstr "小键盘3" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 4" msgstr "小键盘4" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 5" msgstr "小键盘5" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 6" msgstr "小键盘6" -#: src/keycode.cpp:235 +#: src/keycode.cpp:234 msgid "Numpad 7" msgstr "小键盘7" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad *" msgstr "小键盘*" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad +" msgstr "小键盘+" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad -" msgstr "小键盘-" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad /" msgstr "小键盘/" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 8" msgstr "小键盘8" -#: src/keycode.cpp:236 +#: src/keycode.cpp:235 msgid "Numpad 9" msgstr "小键盘9" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Num Lock" msgstr "小键盘锁" -#: src/keycode.cpp:240 +#: src/keycode.cpp:239 msgid "Scroll Lock" msgstr "Scroll Lock键" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Left Shift" msgstr "左Shift键" -#: src/keycode.cpp:241 +#: src/keycode.cpp:240 msgid "Right Shift" msgstr "右Shift键" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Control" msgstr "左Control键" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Left Menu" msgstr "左菜单" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Control" msgstr "右Control键" -#: src/keycode.cpp:242 +#: src/keycode.cpp:241 msgid "Right Menu" msgstr "右菜单" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Comma" msgstr "逗号" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Minus" msgstr "减号" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Period" msgstr "句号" -#: src/keycode.cpp:244 +#: src/keycode.cpp:243 msgid "Plus" msgstr "加号" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "Attn" msgstr "Attn键" -#: src/keycode.cpp:248 +#: src/keycode.cpp:247 msgid "CrSel" msgstr "CrSel键" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Erase OEF" msgstr "Erase OEF键" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "ExSel" msgstr "ExSel键" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "OEM Clear" msgstr "OEM Clear键" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "PA1" msgstr "PA1键" -#: src/keycode.cpp:249 +#: src/keycode.cpp:248 msgid "Zoom" msgstr "缩放" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "主菜单" +#~ msgid "Game Name" +#~ msgstr "游戏名" -#: src/main.cpp:1719 -msgid "Player name too long." -msgstr "玩家的名字太长了" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "游戏管理: 无法复制MOD“$1”到游戏“$2”" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "连接出错(超时?)" +#~ msgid "GAMES" +#~ msgstr "游戏" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "没有选择世界或提供地址。未执行操作。" +#~ msgid "Games" +#~ msgstr "游戏" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "提供世界地址不存在" +#~ msgid "Mods:" +#~ msgstr "MODS:" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "无法找到或载入游戏模式" +#~ msgid "edit game" +#~ msgstr "编辑游戏" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "非法游戏模式规格。" +#~ msgid "new game" +#~ msgstr "新建游戏" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "左键:移动所有物品,右键:移动单个物品" +#~ msgid "EDIT GAME" +#~ msgstr "编辑游戏" -#~ msgid "is required by:" -#~ msgstr "被需要:" +#~ msgid "Remove selected mod" +#~ msgstr "删除选中MOD" -#~ msgid "Configuration saved. " -#~ msgstr "配置已保存。 " +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- 添加MOD" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "警告:配置不一致。 " +#~ msgid "CLIENT" +#~ msgstr "客户端" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "无法创建世界:名字包含非法字符" +#~ msgid "Favorites:" +#~ msgstr "最爱的服务器:" -#~ msgid "Multiplayer" -#~ msgstr "多人游戏" +#~ msgid "START SERVER" +#~ msgstr "启动服务器" -#~ msgid "Advanced" -#~ msgstr "高级联机设置" +#~ msgid "Name" +#~ msgstr "名字" -#~ msgid "Show Public" -#~ msgstr "显示公共" +#~ msgid "Password" +#~ msgstr "密码" -#~ msgid "Show Favorites" -#~ msgstr "显示最爱" +#~ msgid "SETTINGS" +#~ msgstr "设置" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "地址栏留空可启动本地服务器。" +#~ msgid "Preload item visuals" +#~ msgstr "预先加载物品图像" -#~ msgid "Create world" -#~ msgstr "创造世界" +#~ msgid "Finite Liquid" +#~ msgstr "液体有限延伸" -#~ msgid "Address required." -#~ msgstr "需要地址。" +#~ msgid "SINGLE PLAYER" +#~ msgstr "单人游戏" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "无法删除世界:没有选择世界" +#~ msgid "TEXTURE PACKS" +#~ msgstr "材质包" -#~ msgid "Files to be deleted" -#~ msgstr "将被删除的文件" +#~ msgid "MODS" +#~ msgstr "MODS" -#~ msgid "Cannot create world: No games found" -#~ msgstr "无法创造世界:未找到游戏模式" +#~ msgid "Add mod:" +#~ msgstr "添加MOD:" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "无法配置世界:没有选择世界" +#~ msgid "Local install" +#~ msgstr "本地安装" -#~ msgid "Failed to delete all world files" -#~ msgstr "无法删除所有该世界的文件" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "警告:一些MOD仍未设定。\n" +#~ "它们会在你保存配置的时候自动启用。 " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "警告:缺少一些设定了的MOD。\n" +#~ "它们的设置会在你保存配置的时候被移除。 " #~ msgid "" #~ "Default Controls:\n" @@ -1068,146 +1295,72 @@ msgstr "非法游戏模式规格。" #~ "ESC:菜单\n" #~ "T:聊天\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "警告:缺少一些设定了的MOD。\n" -#~ "它们的设置会在你保存配置的时候被移除。 " +#~ msgid "Failed to delete all world files" +#~ msgstr "无法删除所有该世界的文件" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "警告:一些MOD仍未设定。\n" -#~ "它们会在你保存配置的时候自动启用。 " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "无法配置世界:没有选择世界" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "默认控制:\n" -#~ "W/A/S/D: 移动\n" -#~ "空格: 跳/爬\n" -#~ "Shift: 潜行/向下\n" -#~ "Q: 丢物品\n" -#~ "I: 物品栏\n" -#~ "鼠标:转身/环顾\n" -#~ "鼠标左键: 挖\n" -#~ "鼠标右键: 放/使用\n" -#~ "鼠标滚轮: 选择物品\n" -#~ "T: 聊天\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "无法创造世界:未找到游戏模式" -#~ msgid "Exit to OS" -#~ msgstr "退出至操作系统" +#~ msgid "Files to be deleted" +#~ msgstr "将被删除的文件" -#~ msgid "Exit to Menu" -#~ msgstr "退出至菜单" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "无法删除世界:没有选择世界" -#~ msgid "Sound Volume" -#~ msgstr "音量" +#~ msgid "Address required." +#~ msgstr "需要地址。" -#~ msgid "Change Password" -#~ msgstr "更改密码" +#~ msgid "Create world" +#~ msgstr "创造世界" -#~ msgid "Continue" -#~ msgstr "继续" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "地址栏留空可启动本地服务器。" -#~ msgid "You died." -#~ msgstr "你死了。" +#~ msgid "Show Favorites" +#~ msgstr "显示最爱" -#~ msgid "Shutting down stuff..." -#~ msgstr "关闭中......" +#~ msgid "Show Public" +#~ msgstr "显示公共" -#~ msgid "Connecting to server..." -#~ msgstr "正在连接服务器..." +#~ msgid "Advanced" +#~ msgstr "高级联机设置" -#~ msgid "Resolving address..." -#~ msgstr "正在解析地址..." +#~ msgid "Multiplayer" +#~ msgstr "多人游戏" -#~ msgid "Creating client..." -#~ msgstr "正在建立客户端..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "无法创建世界:名字包含非法字符" -#~ msgid "Creating server...." -#~ msgstr "正在建立服务器...." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "警告:配置不一致。 " -#~ msgid "Loading..." -#~ msgstr "载入中..." +#~ msgid "Configuration saved. " +#~ msgstr "配置已保存。 " -#~ msgid "Local install" -#~ msgstr "本地安装" +#~ msgid "is required by:" +#~ msgstr "被需要:" -#~ msgid "Add mod:" -#~ msgstr "添加MOD:" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "左键:移动所有物品,右键:移动单个物品" -#~ msgid "MODS" -#~ msgstr "MODS" +#~ msgid " MB/s" +#~ msgstr "兆字节/秒" -#~ msgid "TEXTURE PACKS" -#~ msgstr "材质包" +#~ msgid " KB/s" +#~ msgstr "千字节/秒" -#~ msgid "SINGLE PLAYER" -#~ msgstr "单人游戏" +#~ msgid "Fly mode" +#~ msgstr "飞行模式" -#~ msgid "Finite Liquid" -#~ msgstr "液体有限延伸" +#~ msgid "Anisotropic Filtering" +#~ msgstr "各向异性过滤" -#~ msgid "Preload item visuals" -#~ msgstr "预先加载物品图像" +#~ msgid "Mip-Mapping" +#~ msgstr "贴图处理" -#~ msgid "SETTINGS" -#~ msgstr "设置" - -#~ msgid "Password" -#~ msgstr "密码" - -#~ msgid "Name" -#~ msgstr "名字" - -#~ msgid "START SERVER" -#~ msgstr "启动服务器" - -#~ msgid "Favorites:" -#~ msgstr "最爱的服务器:" - -#~ msgid "CLIENT" -#~ msgstr "客户端" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- 添加MOD" - -#~ msgid "Remove selected mod" -#~ msgstr "删除选中MOD" - -#~ msgid "EDIT GAME" -#~ msgstr "编辑游戏" - -#~ msgid "new game" -#~ msgstr "新建游戏" - -#~ msgid "edit game" -#~ msgstr "编辑游戏" - -#~ msgid "Mods:" -#~ msgstr "MODS:" - -#~ msgid "Games" -#~ msgstr "游戏" - -#~ msgid "GAMES" -#~ msgstr "游戏" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "游戏管理: 无法复制MOD“$1”到游戏“$2”" - -#~ msgid "Game Name" -#~ msgstr "游戏名" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "下载中" From 9c76f379acb12246fb1e282661e67b9da4cdcb62 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Fri, 17 Jul 2015 08:51:07 +0200 Subject: [PATCH 210/670] Display an access denied message when client detects a server timeout --- src/client.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 66aac6229..1bd8c39ae 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -743,14 +743,19 @@ bool Client::loadMedia(const std::string &data, const std::string &filename) // Virtual methods from con::PeerHandler void Client::peerAdded(con::Peer *peer) { - infostream<<"Client::peerAdded(): peer->id=" - <id<id=" + << peer->id << std::endl; } void Client::deletingPeer(con::Peer *peer, bool timeout) { - infostream<<"Client::deletingPeer(): " + infostream << "Client::deletingPeer(): " "Server Peer is getting deleted " - <<"(timeout="< Date: Fri, 3 Jul 2015 12:31:34 +0200 Subject: [PATCH 211/670] Fix invisible player when the attached entity is removed --- src/content_sao.cpp | 30 ++++++++++++++++ src/content_sao.h | 8 +++++ src/script/lua_api/l_object.cpp | 62 +++++++++++++++++++++++++++------ src/serverobject.h | 6 ++++ 4 files changed, 96 insertions(+), 10 deletions(-) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 386b7e070..eab1e6279 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -591,6 +591,21 @@ void LuaEntitySAO::getAttachment(int *parent_id, std::string *bone, v3f *positio *rotation = m_attachment_rotation; } +void LuaEntitySAO::addAttachmentChild(int child_id) +{ + m_attachment_child_ids.insert(child_id); +} + +void LuaEntitySAO::removeAttachmentChild(int child_id) +{ + m_attachment_child_ids.erase(child_id); +} + +std::set LuaEntitySAO::getAttachmentChildIds() +{ + return m_attachment_child_ids; +} + ObjectProperties* LuaEntitySAO::accessObjectProperties() { return &m_prop; @@ -1231,6 +1246,21 @@ void PlayerSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, *rotation = m_attachment_rotation; } +void PlayerSAO::addAttachmentChild(int child_id) +{ + m_attachment_child_ids.insert(child_id); +} + +void PlayerSAO::removeAttachmentChild(int child_id) +{ + m_attachment_child_ids.erase(child_id); +} + +std::set PlayerSAO::getAttachmentChildIds() +{ + return m_attachment_child_ids; +} + ObjectProperties* PlayerSAO::accessObjectProperties() { return &m_prop; diff --git a/src/content_sao.h b/src/content_sao.h index f61566665..1f0a68cd8 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -65,6 +65,9 @@ public: 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); + void addAttachmentChild(int child_id); + void removeAttachmentChild(int child_id); + std::set getAttachmentChildIds(); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); /* LuaEntitySAO-specific */ @@ -113,6 +116,7 @@ private: bool m_bone_position_sent; int m_attachment_parent_id; + std::set m_attachment_child_ids; std::string m_attachment_bone; v3f m_attachment_position; v3f m_attachment_rotation; @@ -204,6 +208,9 @@ public: 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); + void addAttachmentChild(int child_id); + void removeAttachmentChild(int child_id); + std::set getAttachmentChildIds(); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); void setNametagColor(video::SColor color); @@ -320,6 +327,7 @@ private: bool m_bone_position_sent; int m_attachment_parent_id; + std::set m_attachment_child_ids; std::string m_attachment_bone; v3f m_attachment_position; v3f m_attachment_rotation; diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index e407ef162..96fb0c579 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -132,10 +132,22 @@ int ObjectRef::gc_object(lua_State *L) { int ObjectRef::l_remove(lua_State *L) { NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; - if(co->getType() == ACTIVEOBJECT_TYPE_PLAYER) return 0; + if (co == NULL) + return 0; + if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) + return 0; + + std::set child_ids = co->getAttachmentChildIds(); + std::set::iterator it; + for (it = child_ids.begin(); it != child_ids.end(); ++it) { + ServerActiveObject *child = env->getActiveObject(*it); + child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0)); + } + verbosestream<<"ObjectRef::l_remove(): id="<getId()<m_removed = true; return 0; @@ -630,23 +642,38 @@ int ObjectRef::l_get_bone_position(lua_State *L) int ObjectRef::l_set_attach(lua_State *L) { NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + ObjectRef *ref = checkobject(L, 1); ObjectRef *parent_ref = checkobject(L, 2); ServerActiveObject *co = getobject(ref); ServerActiveObject *parent = getobject(parent_ref); - if(co == NULL) return 0; - if(parent == NULL) return 0; + if (co == NULL) + return 0; + if (parent == NULL) + return 0; // Do it + int parent_id = 0; std::string bone = ""; - if(!lua_isnil(L, 3)) - bone = lua_tostring(L, 3); v3f position = v3f(0, 0, 0); - if(!lua_isnil(L, 4)) - position = read_v3f(L, 4); v3f rotation = v3f(0, 0, 0); - if(!lua_isnil(L, 5)) + co->getAttachment(&parent_id, &bone, &position, &rotation); + if (parent_id) { + ServerActiveObject *old_parent = env->getActiveObject(parent_id); + old_parent->removeAttachmentChild(co->getId()); + } + + bone = ""; + if (!lua_isnil(L, 3)) + bone = lua_tostring(L, 3); + position = v3f(0, 0, 0); + if (!lua_isnil(L, 4)) + position = read_v3f(L, 4); + rotation = v3f(0, 0, 0); + if (!lua_isnil(L, 5)) rotation = read_v3f(L, 5); co->setAttachment(parent->getId(), bone, position, rotation); + parent->addAttachmentChild(co->getId()); return 0; } @@ -682,11 +709,26 @@ int ObjectRef::l_get_attach(lua_State *L) int ObjectRef::l_set_detach(lua_State *L) { NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) + return 0; + + int parent_id = 0; + std::string bone = ""; + v3f position; + v3f rotation; + co->getAttachment(&parent_id, &bone, &position, &rotation); + ServerActiveObject *parent = NULL; + if (parent_id) + parent = env->getActiveObject(parent_id); + // Do it co->setAttachment(0, "", v3f(0,0,0), v3f(0,0,0)); + if (parent != NULL) + parent->removeAttachmentChild(co->getId()); return 0; } diff --git a/src/serverobject.h b/src/serverobject.h index 7204fe3ae..597eb63a8 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -163,6 +163,12 @@ public: {} virtual void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation) {} + virtual void addAttachmentChild(int child_id) + {} + virtual void removeAttachmentChild(int child_id) + {} + virtual std::set getAttachmentChildIds() + { return std::set(); } virtual ObjectProperties* accessObjectProperties() { return NULL; } virtual void notifyObjectPropertiesModified() From 5b9c8dfbd26851268ae2cdaecafb255cc57d05cd Mon Sep 17 00:00:00 2001 From: ExcaliburZero Date: Wed, 15 Jul 2015 13:21:27 -0400 Subject: [PATCH 212/670] Change texture pack description file name Change the name for texture pack description files from "info.txt" to "description.txt" in order to keep the naming consistent between description files for both mods and texture packs. Also add backwards compatibility for texture packs that use "info.txt", and note in the log that "info.txt" is depreciated. --- builtin/mainmenu/tab_texturepacks.lua | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index 9417b94e0..3fb7b8598 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -45,7 +45,7 @@ end -------------------------------------------------------------------------------- local function get_formspec(tabview, name, tabdata) - + local retval = "label[4,-0.25;".. fgettext("Select texture pack:") .. "]".. "textlist[4,0.25;7.5,5.0;TPs;" @@ -62,10 +62,18 @@ local function get_formspec(tabview, name, tabdata) return retval end - local infofile = current_texture_path ..DIR_DELIM.."info.txt" + local infofile = current_texture_path ..DIR_DELIM.."description.txt" + -- This adds backwards compatibility for old texture pack description files named + -- "info.txt", and should be removed once all such texture packs have been updated + if not file_exists(infofile) then + infofile = current_texture_path ..DIR_DELIM.."info.txt" + if file_exists(infofile) then + minetest.log("info.txt is depreciated. description.txt should be used instead."); + end + end local infotext = "" local f = io.open(infofile, "r") - if f==nil then + if not f then infotext = fgettext("No information available") else infotext = f:read("*all") From 162af5fe32f694d598ee36b3e5e96c946a8a1ad7 Mon Sep 17 00:00:00 2001 From: D Laboratory Date: Thu, 16 Jul 2015 15:15:29 +0800 Subject: [PATCH 213/670] Fix a typo in comment of CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1353e16c..82073c7f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") -# This is done here so that relative search paths are more reasnable +# This is done here so that relative search paths are more reasonable find_package(Irrlicht) From dd2e08e11764e045f4eb7a25475a8ecaa77b58de Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Mon, 22 Jun 2015 23:21:14 +0200 Subject: [PATCH 214/670] Make acc and vel deprecated in add_particle and search for acceleration and velocity instead The doc and the actual behaviour differed. --- src/script/lua_api/l_particles.cpp | 57 ++++++++++++++++++------------ 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp index 6769f5c23..adb682e72 100644 --- a/src/script/lua_api/l_particles.cpp +++ b/src/script/lua_api/l_particles.cpp @@ -34,17 +34,20 @@ int ModApiParticles::l_add_particle(lua_State *L) { // Get parameters v3f pos, vel, acc; - pos= vel= acc= v3f(0, 0, 0); + pos = vel = acc = v3f(0, 0, 0); + float expirationtime, size; - expirationtime= size= 1; + expirationtime = size = 1; + bool collisiondetection, vertical; - collisiondetection= vertical= false; + collisiondetection = vertical = false; + std::string texture = ""; const char *playername = ""; if (lua_gettop(L) > 1) // deprecated { - log_deprecated(L,"Deprecated add_particle call with individual parameters instead of definition"); + 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); @@ -62,29 +65,37 @@ int ModApiParticles::l_add_particle(lua_State *L) while (lua_next(L, table) != 0) { const char *key = lua_tostring(L, -2); - if(strcmp(key,"pos")==0){ - pos=check_v3f(L, -1); - }else if(strcmp(key,"vel")==0){ - vel=check_v3f(L, -1); - }else if(strcmp(key,"acc")==0){ - acc=check_v3f(L, -1); - }else if(strcmp(key,"expirationtime")==0){ - expirationtime=luaL_checknumber(L, -1); - }else if(strcmp(key,"size")==0){ - size=luaL_checknumber(L, -1); - }else if(strcmp(key,"collisiondetection")==0){ - collisiondetection=lua_toboolean(L, -1); - }else if(strcmp(key,"vertical")==0){ - vertical=lua_toboolean(L, -1); - }else if(strcmp(key,"texture")==0){ - texture=luaL_checkstring(L, -1); - }else if(strcmp(key,"playername")==0){ - playername=luaL_checkstring(L, -1); + if (strcmp(key, "pos") == 0) { + pos = check_v3f(L, -1); + } else if (strcmp(key,"vel") == 0) { + vel = check_v3f(L, -1); + log_deprecated(L, "The use of vel is deprecated. " + "Use velocity instead"); + } else if (strcmp(key,"velocity") == 0) { + vel = check_v3f(L, -1); + } else if (strcmp(key,"acc") == 0) { + acc = check_v3f(L, -1); + log_deprecated(L, "The use of acc is deprecated. " + "Use acceleration instead"); + } else if (strcmp(key,"acceleration") == 0) { + acc = check_v3f(L, -1); + } else if (strcmp(key,"expirationtime") == 0) { + expirationtime = luaL_checknumber(L, -1); + } else if (strcmp(key,"size") == 0) { + size = luaL_checknumber(L, -1); + } else if (strcmp(key,"collisiondetection") == 0) { + collisiondetection = lua_toboolean(L, -1); + } else if (strcmp(key,"vertical") == 0) { + vertical = lua_toboolean(L, -1); + } else if (strcmp(key,"texture") == 0) { + texture = luaL_checkstring(L, -1); + } else if (strcmp(key,"playername") == 0) { + playername = luaL_checkstring(L, -1); } lua_pop(L, 1); } } - if (strcmp(playername, "")==0) // spawn for all players + if (strcmp(playername, "") == 0) // spawn for all players { getServer(L)->spawnParticleAll(pos, vel, acc, expirationtime, size, collisiondetection, vertical, texture); From c5c609ce3d0ff7b959adc72c26486c14b2219046 Mon Sep 17 00:00:00 2001 From: Marcin Date: Thu, 25 Jun 2015 18:14:01 +0200 Subject: [PATCH 215/670] Add ability to specify coordinates for /spawnentity --- builtin/game/chatcommands.lua | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index d656f1c91..6c8ca8699 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -530,22 +530,29 @@ core.register_chatcommand("giveme", { }) core.register_chatcommand("spawnentity", { - params = "", - description = "Spawn entity at your position", + params = " [,,]", + description = "Spawn entity at given (or your) position", privs = {give=true, interact=true}, func = function(name, param) - local entityname = string.match(param, "(.+)$") + local entityname, p = string.match(param, "^([^ ]+) *(.*)$") if not entityname then return false, "EntityName required" end - core.log("action", ("/spawnentity invoked, entityname=%q") - :format(entityname)) + core.log("action", ("%s invokes /spawnentity, entityname=%q") + :format(name, entityname)) local player = core.get_player_by_name(name) if player == nil then core.log("error", "Unable to spawn entity, player is nil") return false, "Unable to spawn entity, player is nil" end - local p = player:getpos() + if p == "" then + p = player:getpos() + else + p = core.string_to_pos(p) + if p == nil then + return false, "Invalid parameters ('" .. param .. "')" + end + end p.y = p.y + 1 core.add_entity(p, entityname) return true, ("%q spawned."):format(entityname) From 74d8fdbd95e1e26d51b48bcf9585ab2890633d8b Mon Sep 17 00:00:00 2001 From: Mark Schreiber Date: Sun, 28 Jun 2015 01:25:38 -0700 Subject: [PATCH 216/670] Add antialiasing UI setting The Irrlicht engine supports antialiasing, and Minetest already supports saving an antialiasing setting in its configuration file. However, Minetest lacked UI elements to set this setting, and previously the only way to enable the feature was by hand-editing the configuration file. Add a drop-down menu that can enable antialiasing. --- builtin/mainmenu/tab_settings.lua | 43 +++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index 169f60a67..58ef4c540 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -60,6 +60,19 @@ local function getLeavesStyleSettingIndex() return 1 end +local dd_antialiasing_labels = { + fgettext("None"), + fgettext("2x"), + fgettext("4x"), + fgettext("8x"), +} + +local antialiasing = { + {dd_antialiasing_labels[1]..","..dd_antialiasing_labels[2]..",".. + dd_antialiasing_labels[3]..","..dd_antialiasing_labels[4]}, + {"0", "2", "4", "8"} +} + local function getFilterSettingIndex() if (core.setting_get(filters[2][3]) == "true") then return 3 @@ -80,6 +93,26 @@ local function getMipmapSettingIndex() return 1 end +local function getAntialiasingSettingIndex() + local antialiasing_setting = core.setting_get("fsaa") + for i=1, #(antialiasing[2]) do + if antialiasing_setting == antialiasing[2][i] then + return i + end + end + return 1 +end + +local function antialiasing_fname_to_name(fname) + for i=1, #(dd_antialiasing_labels) do + if fname == dd_antialiasing_labels[i] then + return antialiasing[2][i] + end + end + + return "0" +end + local function video_driver_fname_to_name(selected_driver) local video_drivers = core.get_video_drivers() @@ -214,13 +247,17 @@ local function formspec(tabview, name, tabdata) "dropdown[0.25,3.2;3.3;dd_leaves_style;" .. leaves_style[1][1] .. ";" .. getLeavesStyleSettingIndex() .. "]" .. "box[3.75,0;3.75,3.45;#999999]" .. + "box[3.75,0;3.75,4.7;#999999]" .. "label[3.85,0.1;".. fgettext("Texturing:") .. "]".. "dropdown[3.85,0.55;3.85;dd_filters;" .. filters[1][1] .. ";" .. getFilterSettingIndex() .. "]" .. "dropdown[3.85,1.35;3.85;dd_mipmap;" .. mipmap[1][1] .. ";" .. getMipmapSettingIndex() .. "]" .. - "label[3.85,2.15;".. fgettext("Rendering:") .. "]".. - "dropdown[3.85,2.6;3.85;dd_video_driver;" + "label[3.85,2.15;".. fgettext("Antialiasing:") .. "]".. + "dropdown[3.85,2.6;3.85;dd_antialiasing;" .. antialiasing[1][1] .. ";" + .. getAntialiasingSettingIndex() .. "]" .. + "label[3.85,3.4;".. fgettext("Rendering:") .. "]".. + "dropdown[3.85,3.85;3.85;dd_video_driver;" .. driver_formspec_string .. ";" .. driver_current_idx .. "]" .. "tooltip[dd_video_driver;" .. fgettext("Restart minetest for driver change to take effect") .. "]" .. @@ -421,6 +458,8 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("anisotropic_filter", "true") ddhandled = true end + core.setting_set("fsaa", + antialiasing_fname_to_name(fields["dd_antialiasing"])) return ddhandled end From 1076bbd03ed1d6997d50101fad0fd6ad6c0cfb48 Mon Sep 17 00:00:00 2001 From: Rui Date: Sat, 11 Jul 2015 15:58:13 +0900 Subject: [PATCH 217/670] Update toolchain_mingw64.cmake --- util/buildbot/toolchain_mingw64.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/buildbot/toolchain_mingw64.cmake b/util/buildbot/toolchain_mingw64.cmake index 52d06cdc3..9a7ed82d8 100644 --- a/util/buildbot/toolchain_mingw64.cmake +++ b/util/buildbot/toolchain_mingw64.cmake @@ -2,12 +2,12 @@ SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ -SET(CMAKE_C_COMPILER x86_64-mingw32-gcc) -SET(CMAKE_CXX_COMPILER x86_64-mingw32-g++) -SET(CMAKE_RC_COMPILER x86_64-mingw32-windres) +SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) +SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) # here is the target environment located -SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-mingw32) +SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search From e47f390e0d37d7906bbbe6a082cc69e10235a3ba Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Sat, 18 Jul 2015 11:52:39 +0200 Subject: [PATCH 218/670] Refactor particle code to remove the while loops Replaces while loops with proper getfield calls --- src/script/lua_api/l_particles.cpp | 165 ++++++++++++++--------------- 1 file changed, 78 insertions(+), 87 deletions(-) diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp index adb682e72..d99d8f6a9 100644 --- a/src/script/lua_api/l_particles.cpp +++ b/src/script/lua_api/l_particles.cpp @@ -43,7 +43,7 @@ int ModApiParticles::l_add_particle(lua_State *L) collisiondetection = vertical = false; std::string texture = ""; - const char *playername = ""; + std::string playername = ""; if (lua_gettop(L) > 1) // deprecated { @@ -60,49 +60,47 @@ int ModApiParticles::l_add_particle(lua_State *L) } else if (lua_istable(L, 1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table) != 0) - { - const char *key = lua_tostring(L, -2); - if (strcmp(key, "pos") == 0) { - pos = check_v3f(L, -1); - } else if (strcmp(key,"vel") == 0) { - vel = check_v3f(L, -1); - log_deprecated(L, "The use of vel is deprecated. " - "Use velocity instead"); - } else if (strcmp(key,"velocity") == 0) { - vel = check_v3f(L, -1); - } else if (strcmp(key,"acc") == 0) { - acc = check_v3f(L, -1); - log_deprecated(L, "The use of acc is deprecated. " - "Use acceleration instead"); - } else if (strcmp(key,"acceleration") == 0) { - acc = check_v3f(L, -1); - } else if (strcmp(key,"expirationtime") == 0) { - expirationtime = luaL_checknumber(L, -1); - } else if (strcmp(key,"size") == 0) { - size = luaL_checknumber(L, -1); - } else if (strcmp(key,"collisiondetection") == 0) { - collisiondetection = lua_toboolean(L, -1); - } else if (strcmp(key,"vertical") == 0) { - vertical = lua_toboolean(L, -1); - } else if (strcmp(key,"texture") == 0) { - texture = luaL_checkstring(L, -1); - } else if (strcmp(key,"playername") == 0) { - playername = luaL_checkstring(L, -1); - } - lua_pop(L, 1); + lua_getfield(L, 1, "pos"); + pos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(); + lua_pop(L, 1); + + lua_getfield(L, 1, "vel"); + if (lua_istable(L, -1)) { + 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; + lua_pop(L, 1); + + lua_getfield(L, 1, "acc"); + if (lua_istable(L, -1)) { + 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; + 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); + vertical = getboolfield_default(L, 1, "vertical", vertical); + texture = getstringfield_default(L, 1, "texture", ""); + playername = getstringfield_default(L, 1, "playername", ""); } - if (strcmp(playername, "") == 0) // spawn for all players - { + if (playername == "") { // spawn for all players getServer(L)->spawnParticleAll(pos, vel, acc, expirationtime, size, collisiondetection, vertical, texture); - } - else - { - getServer(L)->spawnParticle(playername, + } else { + getServer(L)->spawnParticle(playername.c_str(), pos, vel, acc, expirationtime, size, collisiondetection, vertical, texture); } @@ -136,7 +134,7 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) bool collisiondetection, vertical; collisiondetection= vertical= false; std::string texture = ""; - const char *playername = ""; + std::string playername = ""; if (lua_gettop(L) > 1) //deprecated { @@ -160,49 +158,44 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) } else if (lua_istable(L, 1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table) != 0) - { - const char *key = lua_tostring(L, -2); - if(strcmp(key,"amount")==0){ - amount=luaL_checknumber(L, -1); - }else if(strcmp(key,"time")==0){ - time=luaL_checknumber(L, -1); - }else if(strcmp(key,"minpos")==0){ - minpos=check_v3f(L, -1); - }else if(strcmp(key,"maxpos")==0){ - maxpos=check_v3f(L, -1); - }else if(strcmp(key,"minvel")==0){ - minvel=check_v3f(L, -1); - }else if(strcmp(key,"maxvel")==0){ - maxvel=check_v3f(L, -1); - }else if(strcmp(key,"minacc")==0){ - minacc=check_v3f(L, -1); - }else if(strcmp(key,"maxacc")==0){ - maxacc=check_v3f(L, -1); - }else if(strcmp(key,"minexptime")==0){ - minexptime=luaL_checknumber(L, -1); - }else if(strcmp(key,"maxexptime")==0){ - maxexptime=luaL_checknumber(L, -1); - }else if(strcmp(key,"minsize")==0){ - minsize=luaL_checknumber(L, -1); - }else if(strcmp(key,"maxsize")==0){ - maxsize=luaL_checknumber(L, -1); - }else if(strcmp(key,"collisiondetection")==0){ - collisiondetection=lua_toboolean(L, -1); - }else if(strcmp(key,"vertical")==0){ - vertical=lua_toboolean(L, -1); - }else if(strcmp(key,"texture")==0){ - texture=luaL_checkstring(L, -1); - }else if(strcmp(key,"playername")==0){ - playername=luaL_checkstring(L, -1); - } - lua_pop(L, 1); - } + amount = getintfield_default(L, 1, "amount", amount); + time = getfloatfield_default(L, 1, "time", time); + + lua_getfield(L, 1, "minpos"); + minpos = lua_istable(L, -1) ? check_v3f(L, -1) : minpos; + lua_pop(L, 1); + + lua_getfield(L, 1, "maxpos"); + maxpos = lua_istable(L, -1) ? check_v3f(L, -1) : maxpos; + lua_pop(L, 1); + + lua_getfield(L, 1, "minvel"); + minvel = lua_istable(L, -1) ? check_v3f(L, -1) : minvel; + lua_pop(L, 1); + + lua_getfield(L, 1, "maxvel"); + maxvel = lua_istable(L, -1) ? check_v3f(L, -1) : maxvel; + lua_pop(L, 1); + + lua_getfield(L, 1, "minacc"); + minacc = lua_istable(L, -1) ? check_v3f(L, -1) : minacc; + lua_pop(L, 1); + + lua_getfield(L, 1, "maxacc"); + maxacc = lua_istable(L, -1) ? check_v3f(L, -1) : maxacc; + 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); + vertical = getboolfield_default(L, 1, "vertical", vertical); + texture = getstringfield_default(L, 1, "texture", ""); + playername = getstringfield_default(L, 1, "playername", ""); } - if (strcmp(playername, "")==0) //spawn for all players - { + if (playername == "") { //spawn for all players u32 id = getServer(L)->addParticleSpawnerAll( amount, time, minpos, maxpos, minvel, maxvel, @@ -213,10 +206,8 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) vertical, texture); lua_pushnumber(L, id); - } - else - { - u32 id = getServer(L)->addParticleSpawner(playername, + } else { + u32 id = getServer(L)->addParticleSpawner(playername.c_str(), amount, time, minpos, maxpos, minvel, maxvel, From 4046f3e302a3394bf376caf543cb643e1562bc5e Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 18 Jul 2015 20:37:04 +0100 Subject: [PATCH 219/670] Cavegen: Mgv6: No small caves entirely above ground Mgv5/mgv7: Remove 'should make cave hole' feature Remove ravine code --- src/cavegen.cpp | 104 ++++++++++++++++-------------------------------- src/cavegen.h | 4 +- 2 files changed, 36 insertions(+), 72 deletions(-) diff --git a/src/cavegen.cpp b/src/cavegen.cpp index 8bb8b847a..0c14375ee 100644 --- a/src/cavegen.cpp +++ b/src/cavegen.cpp @@ -138,7 +138,7 @@ void CaveV5::makeTunnel(bool dirswitch) { (float)(ps->next() % maxlen.Z) - (float)maxlen.Z / 2 ); - // Do not make large caves that are above ground. + // Do not make caves that are above ground. // It is only necessary to check the startpoint and endpoint. v3s16 orpi(orp.X, orp.Y, orp.Z); v3s16 veci(vec.X, vec.Y, vec.Z); @@ -193,20 +193,15 @@ void CaveV5::makeTunnel(bool dirswitch) { // Every second section is rough bool randomize_xz = (ps->range(1, 2) == 1); - // Make a ravine every once in a while if it's long enough - //float xylen = vec.X * vec.X + vec.Z * vec.Z; - //disable ravines for now - bool is_ravine = false; //(xylen > 500.0) && !large_cave && (ps->range(1, 8) == 1); - // Carve routes for (float f = 0; f < 1.0; f += 1.0 / veclen) - carveRoute(vec, f, randomize_xz, is_ravine); + carveRoute(vec, f, randomize_xz); orp = rp; } -void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { +void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz) { MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -230,15 +225,12 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { d1 += ps->range(-1, 1); } - bool should_make_cave_hole = ps->range(1, 10) == 1; - for (s16 z0 = d0; z0 <= d1; z0++) { s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { s16 maxabsxz = MYMAX(abs(x0), abs(z0)); - s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) : - rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { if (large_cave_is_flat) { @@ -250,15 +242,6 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0); p += of; - if (!is_ravine && mg->heightmap && should_make_cave_hole && - p.X <= node_max.X && p.Z <= node_max.Z) { - int maplen = node_max.X - node_min.X + 1; - int idx = (p.Z - node_min.Z) * maplen + - (p.X - node_min.X); - if (p.Y >= mg->heightmap[idx] - 2) - continue; - } - if (vm->m_area.contains(p) == false) continue; @@ -431,38 +414,36 @@ void CaveV6::makeTunnel(bool dirswitch) { ); } - // Do not make large caves that are entirely above ground. + // Do not make caves that are entirely above ground. // It is only necessary to check the startpoint and endpoint. - if (large_cave) { - v3s16 orpi(orp.X, orp.Y, orp.Z); - v3s16 veci(vec.X, vec.Y, vec.Z); - s16 h1; - s16 h2; + v3s16 orpi(orp.X, orp.Y, orp.Z); + v3s16 veci(vec.X, vec.Y, vec.Z); + s16 h1; + s16 h2; - v3s16 p1 = orpi + veci + of + rs / 2; - if (p1.Z >= node_min.Z && p1.Z <= node_max.Z && - p1.X >= node_min.X && p1.X <= node_max.X) { - u32 index1 = (p1.Z - node_min.Z) * mg->ystride + - (p1.X - node_min.X); - h1 = mg->heightmap[index1]; - } else { - h1 = water_level; // If not in heightmap - } - - v3s16 p2 = orpi + of + rs / 2; - if (p2.Z >= node_min.Z && p2.Z <= node_max.Z && - p2.X >= node_min.X && p2.X <= node_max.X) { - u32 index2 = (p2.Z - node_min.Z) * mg->ystride + - (p2.X - node_min.X); - h2 = mg->heightmap[index2]; - } else { - h2 = water_level; - } - - if (p1.Y > h1 && p2.Y > h2) // If startpoint and endpoint are above ground - return; + v3s16 p1 = orpi + veci + of + rs / 2; + if (p1.Z >= node_min.Z && p1.Z <= node_max.Z && + p1.X >= node_min.X && p1.X <= node_max.X) { + u32 index1 = (p1.Z - node_min.Z) * mg->ystride + + (p1.X - node_min.X); + h1 = mg->heightmap[index1]; + } else { + h1 = water_level; // If not in heightmap } + v3s16 p2 = orpi + of + rs / 2; + if (p2.Z >= node_min.Z && p2.Z <= node_max.Z && + p2.X >= node_min.X && p2.X <= node_max.X) { + u32 index2 = (p2.Z - node_min.Z) * mg->ystride + + (p2.X - node_min.X); + h2 = mg->heightmap[index2]; + } else { + h2 = water_level; + } + + if (p1.Y > h1 && p2.Y > h2) // If startpoint and endpoint are above ground + return; + vec += main_direction; v3f rp = orp + vec; @@ -680,7 +661,7 @@ void CaveV7::makeTunnel(bool dirswitch) { (float)(ps->next() % maxlen.Z) - (float)maxlen.Z / 2 ); - // Do not make large caves that are above ground. + // Do not make caves that are above ground. // It is only necessary to check the startpoint and endpoint. v3s16 orpi(orp.X, orp.Y, orp.Z); v3s16 veci(vec.X, vec.Y, vec.Z); @@ -735,20 +716,15 @@ void CaveV7::makeTunnel(bool dirswitch) { // Every second section is rough bool randomize_xz = (ps->range(1, 2) == 1); - // Make a ravine every once in a while if it's long enough - //float xylen = vec.X * vec.X + vec.Z * vec.Z; - //disable ravines for now - bool is_ravine = false; //(xylen > 500.0) && !large_cave && (ps->range(1, 8) == 1); - // Carve routes for (float f = 0; f < 1.0; f += 1.0 / veclen) - carveRoute(vec, f, randomize_xz, is_ravine); + carveRoute(vec, f, randomize_xz); orp = rp; } -void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { +void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz) { MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -773,15 +749,12 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { d1 += ps->range(-1, 1); } - bool should_make_cave_hole = ps->range(1, 10) == 1; - for (s16 z0 = d0; z0 <= d1; z0++) { s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { s16 maxabsxz = MYMAX(abs(x0), abs(z0)); - s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) : - rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { if (large_cave_is_flat) { @@ -793,15 +766,6 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0); p += of; - if (!is_ravine && mg->heightmap && should_make_cave_hole && - p.X <= node_max.X && p.Z <= node_max.Z) { - int maplen = node_max.X - node_min.X + 1; - int idx = (p.Z - node_min.Z) * maplen + - (p.X - node_min.X); - if (p.Y >= mg->heightmap[idx] - 2) - continue; - } - if (vm->m_area.contains(p) == false) continue; diff --git a/src/cavegen.h b/src/cavegen.h index 38ef57c5a..5d150802a 100644 --- a/src/cavegen.h +++ b/src/cavegen.h @@ -69,7 +69,7 @@ public: CaveV5(MapgenV5 *mg, PseudoRandom *ps); void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); void makeTunnel(bool dirswitch); - void carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine); + void carveRoute(v3f vec, float f, bool randomize_xz); }; class CaveV6 { @@ -158,7 +158,7 @@ public: CaveV7(MapgenV7 *mg, PseudoRandom *ps); void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); void makeTunnel(bool dirswitch); - void carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine); + void carveRoute(v3f vec, float f, bool randomize_xz); }; #endif From 7bbb9b066a8cc079512ddd3e6b32475309f49fca Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 19 Jul 2015 02:27:12 +0200 Subject: [PATCH 220/670] MoveItemSomewhere double bugfix -> Fix bug where MoveSomewhere from an infinite source would fill the destination inventory with copies of itself. -> Fix bug where MoveSomewhere would needlessly call callbacks. -> Remove trailing whitespaces --- src/inventorymanager.cpp | 64 ++++++++++++++++++++++++---------------- src/inventorymanager.h | 16 +++++----- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index d23d1529d..bf5a7dd9d 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -171,7 +171,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame { Inventory *inv_from = mgr->getInventory(from_inv); Inventory *inv_to = mgr->getInventory(to_inv); - + if (!inv_from) { infostream << "IMoveAction::apply(): FAIL: source inventory not found: " << "from_inv=\""< src_can_take_count) @@ -348,7 +348,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame /* Limit according to source item count */ if(count > list_from->getItem(from_i).count) count = list_from->getItem(from_i).count; - + /* If no items will be moved, don't go further */ if(count == 0) { @@ -379,21 +379,28 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame list_to, to_i, count, !caused_by_move_somewhere); // If source is infinite, reset it's stack - if(src_can_take_count == -1){ - // If destination stack is of different type and there are leftover - // items, attempt to put the leftover items to a different place in the - // destination inventory. - // The client-side GUI will try to guess if this happens. - if(from_stack_was.name != to_stack_was.name){ - for(u32 i=0; igetSize(); i++){ - if(list_to->getItem(i).empty()){ - list_to->changeItem(i, to_stack_was); - break; + if (src_can_take_count == -1) { + // For the caused_by_move_somewhere == true case we didn't force-put the item, + // which guarantees there is no leftover, and code below would duplicate the + // (not replaced) to_stack_was item. + if (!caused_by_move_somewhere) { + // If destination stack is of different type and there are leftover + // items, attempt to put the leftover items to a different place in the + // destination inventory. + // The client-side GUI will try to guess if this happens. + if (from_stack_was.name != to_stack_was.name) { + for (u32 i = 0; i < list_to->getSize(); i++) { + if (list_to->getItem(i).empty()) { + list_to->changeItem(i, to_stack_was); + break; + } } } } - list_from->deleteItem(from_i); - list_from->addItem(from_i, from_stack_was); + if (move_count > 0) { + list_from->deleteItem(from_i); + list_from->addItem(from_i, from_stack_was); + } } // If destination is infinite, reset it's stack and take count from source if(dst_can_put_count == -1){ @@ -416,6 +423,13 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame << " i=" << to_i << std::endl; + // If we are inside the move somewhere loop, we don't need to report + // anything if nothing happened (perhaps we don't need to report + // anything for caused_by_move_somewhere == true, but this way its safer) + if (caused_by_move_somewhere && move_count == 0) { + return; + } + /* Record rollback information */ @@ -454,7 +468,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame /* Report move to endpoints */ - + /* Detached inventories */ // Both endpoints are same detached @@ -507,7 +521,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame from_inv.p, from_list, from_i, src_item, player); } } - + mgr->setInventoryModified(from_inv, false); if(inv_from != inv_to) mgr->setInventoryModified(to_inv, false); @@ -567,7 +581,7 @@ IDropAction::IDropAction(std::istream &is) void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) { Inventory *inv_from = mgr->getInventory(from_inv); - + if(!inv_from){ infostream<<"IDropAction::apply(): FAIL: source inventory not found: " <<"from_inv=\""<getItem(from_i); @@ -644,7 +658,7 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame infostream<<"Actually dropped no items"< Date: Thu, 25 Jun 2015 14:57:10 +0200 Subject: [PATCH 221/670] Added get_player_velocity() method. Fixes #1176 --- doc/lua_api.txt | 1 + src/script/lua_api/l_object.cpp | 160 ++++++++++++++++++-------------- src/script/lua_api/l_object.h | 3 + 3 files changed, 92 insertions(+), 72 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 34d22cdb8..e156d75e4 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2470,6 +2470,7 @@ This is basically a reference to a C++ `ServerActiveObject` ##### Player-only (no-op for other objects) * `get_player_name()`: returns `""` if is not a player +* `get_player_velocity()`: returns `nil` if is not a player otherwise a table {x, y, z} representing the player's instantaneous velocity in nodes/s * `get_look_dir()`: get camera direction as a unit vector * `get_look_pitch()`: pitch in radians * `get_look_yaw()`: yaw in radians (wraps around pretty randomly as of now) diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 96fb0c579..fca69b996 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -80,7 +80,7 @@ ObjectRef* ObjectRef::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); + if (!ud) luaL_typerror(L, narg, className); return *(ObjectRef**)ud; // unbox pointer } @@ -93,9 +93,9 @@ ServerActiveObject* ObjectRef::getobject(ObjectRef *ref) LuaEntitySAO* ObjectRef::getluaobject(ObjectRef *ref) { ServerActiveObject *obj = getobject(ref); - if(obj == NULL) + if (obj == NULL) return NULL; - if(obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY) + if (obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY) return NULL; return (LuaEntitySAO*)obj; } @@ -103,9 +103,9 @@ LuaEntitySAO* ObjectRef::getluaobject(ObjectRef *ref) PlayerSAO* ObjectRef::getplayersao(ObjectRef *ref) { ServerActiveObject *obj = getobject(ref); - if(obj == NULL) + if (obj == NULL) return NULL; - if(obj->getType() != ACTIVEOBJECT_TYPE_PLAYER) + if (obj->getType() != ACTIVEOBJECT_TYPE_PLAYER) return NULL; return (PlayerSAO*)obj; } @@ -113,7 +113,7 @@ PlayerSAO* ObjectRef::getplayersao(ObjectRef *ref) Player* ObjectRef::getplayer(ObjectRef *ref) { PlayerSAO *playersao = getplayersao(ref); - if(playersao == NULL) + if (playersao == NULL) return NULL; return playersao->getPlayer(); } @@ -160,7 +160,7 @@ int ObjectRef::l_getpos(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; v3f pos = co->getBasePosition() / BS; lua_newtable(L); lua_pushnumber(L, pos.X); @@ -179,7 +179,7 @@ int ObjectRef::l_setpos(lua_State *L) ObjectRef *ref = checkobject(L, 1); //LuaEntitySAO *co = getluaobject(ref); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // pos v3f pos = checkFloatPos(L, 2); // Do it @@ -194,7 +194,7 @@ int ObjectRef::l_moveto(lua_State *L) ObjectRef *ref = checkobject(L, 1); //LuaEntitySAO *co = getluaobject(ref); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // pos v3f pos = checkFloatPos(L, 2); // continuous @@ -212,15 +212,15 @@ int ObjectRef::l_punch(lua_State *L) ObjectRef *puncher_ref = checkobject(L, 2); ServerActiveObject *co = getobject(ref); ServerActiveObject *puncher = getobject(puncher_ref); - if(co == NULL) return 0; - if(puncher == NULL) return 0; + if (co == NULL) return 0; + if (puncher == NULL) return 0; v3f dir; - if(lua_type(L, 5) != LUA_TTABLE) + if (lua_type(L, 5) != LUA_TTABLE) dir = co->getBasePosition() - puncher->getBasePosition(); else dir = read_v3f(L, 5); float time_from_last_punch = 1000000; - if(lua_isnumber(L, 3)) + if (lua_isnumber(L, 3)) time_from_last_punch = lua_tonumber(L, 3); ToolCapabilities toolcap = read_tool_capabilities(L, 4); dir.normalize(); @@ -253,8 +253,8 @@ int ObjectRef::l_right_click(lua_State *L) ObjectRef *ref2 = checkobject(L, 2); ServerActiveObject *co = getobject(ref); ServerActiveObject *co2 = getobject(ref2); - if(co == NULL) return 0; - if(co2 == NULL) return 0; + if (co == NULL) return 0; + if (co2 == NULL) return 0; // Do it co->rightClick(co2); return 0; @@ -269,7 +269,7 @@ int ObjectRef::l_set_hp(lua_State *L) ObjectRef *ref = checkobject(L, 1); luaL_checknumber(L, 2); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; int hp = lua_tonumber(L, 2); /*infostream<<"ObjectRef::l_set_hp(): id="<getId() <<" hp="<getInventoryLocation(); - if(getServer(L)->getInventory(loc) != NULL) + if (getServer(L)->getInventory(loc) != NULL) InvRef::create(L, loc); else lua_pushnil(L); // An object may have no inventory (nil) @@ -325,7 +325,7 @@ int ObjectRef::l_get_wield_list(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it lua_pushstring(L, co->getWieldList().c_str()); return 1; @@ -337,7 +337,7 @@ int ObjectRef::l_get_wield_index(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it lua_pushinteger(L, co->getWieldIndex() + 1); return 1; @@ -349,7 +349,7 @@ int ObjectRef::l_get_wielded_item(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL){ + if (co == NULL) { // Empty ItemStack LuaItemStack::create(L, ItemStack()); return 1; @@ -365,7 +365,7 @@ int ObjectRef::l_set_wielded_item(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it ItemStack item = read_item(L, 2, getServer(L)); bool success = co->setWieldedItem(item); @@ -382,7 +382,7 @@ int ObjectRef::l_set_armor_groups(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it ItemGroupList groups; read_groups(L, 2, groups); @@ -410,7 +410,7 @@ int ObjectRef::l_set_physics_override(lua_State *L) { ObjectRef *ref = checkobject(L, 1); PlayerSAO *co = (PlayerSAO *) getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it if (lua_istable(L, 2)) { co->m_physics_override_speed = getfloatfield_default(L, 2, "speed", co->m_physics_override_speed); @@ -421,15 +421,15 @@ int ObjectRef::l_set_physics_override(lua_State *L) co->m_physics_override_sent = false; } else { // old, non-table format - if(!lua_isnil(L, 2)){ + if (!lua_isnil(L, 2)) { co->m_physics_override_speed = lua_tonumber(L, 2); co->m_physics_override_sent = false; } - if(!lua_isnil(L, 3)){ + if (!lua_isnil(L, 3)) { co->m_physics_override_jump = lua_tonumber(L, 3); co->m_physics_override_sent = false; } - if(!lua_isnil(L, 4)){ + if (!lua_isnil(L, 4)) { co->m_physics_override_gravity = lua_tonumber(L, 4); co->m_physics_override_sent = false; } @@ -465,19 +465,19 @@ int ObjectRef::l_set_animation(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v2f frames = v2f(1, 1); - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) frames = read_v2f(L, 2); float frame_speed = 15; - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) frame_speed = lua_tonumber(L, 3); float frame_blend = 0; - if(!lua_isnil(L, 4)) + if (!lua_isnil(L, 4)) frame_blend = lua_tonumber(L, 4); bool frame_loop = true; - if(lua_isboolean(L, 5)) + if (lua_isboolean(L, 5)) frame_loop = lua_toboolean(L, 5); co->setAnimation(frames, frame_speed, frame_blend, frame_loop); return 0; @@ -516,11 +516,11 @@ int ObjectRef::l_set_local_animation(lua_State *L) // Do it v2s32 frames[4]; for (int i=0;i<4;i++) { - if(!lua_isnil(L, 2+1)) + if (!lua_isnil(L, 2+1)) frames[i] = read_v2s32(L, 2+i); } float frame_speed = 30; - if(!lua_isnil(L, 6)) + if (!lua_isnil(L, 6)) frame_speed = lua_tonumber(L, 6); if (!getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed)) @@ -563,9 +563,9 @@ int ObjectRef::l_set_eye_offset(lua_State *L) v3f offset_first = v3f(0, 0, 0); v3f offset_third = v3f(0, 0, 0); - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) offset_first = read_v3f(L, 2); - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) offset_third = read_v3f(L, 3); // Prevent abuse of offset values (keep player always visible) @@ -601,16 +601,16 @@ int ObjectRef::l_set_bone_position(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it std::string bone = ""; - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) bone = lua_tostring(L, 2); v3f position = v3f(0, 0, 0); - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) position = read_v3f(L, 3); v3f rotation = v3f(0, 0, 0); - if(!lua_isnil(L, 4)) + if (!lua_isnil(L, 4)) rotation = read_v3f(L, 4); co->setBonePosition(bone, position, rotation); return 0; @@ -626,7 +626,7 @@ int ObjectRef::l_get_bone_position(lua_State *L) return 0; // Do it std::string bone = ""; - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) bone = lua_tostring(L, 2); v3f position = v3f(0, 0, 0); @@ -738,9 +738,9 @@ int ObjectRef::l_set_properties(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; ObjectProperties *prop = co->accessObjectProperties(); - if(!prop) + if (!prop) return 0; read_object_properties(L, 2, prop); co->notifyObjectPropertiesModified(); @@ -780,7 +780,7 @@ int ObjectRef::l_setvelocity(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; v3f pos = checkFloatPos(L, 2); // Do it co->setVelocity(pos); @@ -793,7 +793,7 @@ int ObjectRef::l_getvelocity(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v3f v = co->getVelocity(); pushFloatPos(L, v); @@ -806,7 +806,7 @@ int ObjectRef::l_setacceleration(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // pos v3f pos = checkFloatPos(L, 2); // Do it @@ -820,7 +820,7 @@ int ObjectRef::l_getacceleration(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v3f v = co->getAcceleration(); pushFloatPos(L, v); @@ -833,7 +833,7 @@ int ObjectRef::l_setyaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; float yaw = luaL_checknumber(L, 2) * core::RADTODEG; // Do it co->setYaw(yaw); @@ -846,7 +846,7 @@ int ObjectRef::l_getyaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it float yaw = co->getYaw() * core::DEGTORAD; lua_pushnumber(L, yaw); @@ -859,7 +859,7 @@ int ObjectRef::l_settexturemod(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it std::string mod = luaL_checkstring(L, 2); co->setTextureMod(mod); @@ -873,19 +873,19 @@ int ObjectRef::l_setsprite(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v2s16 p(0,0); - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) p = read_v2s16(L, 2); int num_frames = 1; - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) num_frames = lua_tonumber(L, 3); float framelength = 0.2; - if(!lua_isnil(L, 4)) + if (!lua_isnil(L, 4)) framelength = lua_tonumber(L, 4); bool select_horiz_by_yawpitch = false; - if(!lua_isnil(L, 5)) + if (!lua_isnil(L, 5)) select_horiz_by_yawpitch = lua_toboolean(L, 5); co->setSprite(p, num_frames, framelength, select_horiz_by_yawpitch); return 0; @@ -899,7 +899,7 @@ int ObjectRef::l_get_entity_name(lua_State *L) ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); log_deprecated(L,"Deprecated call to \"get_entity_name"); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it std::string name = co->getName(); lua_pushstring(L, name.c_str()); @@ -912,7 +912,7 @@ int ObjectRef::l_get_luaentity(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it luaentity_get(L, co->getId()); return 1; @@ -936,7 +936,7 @@ int ObjectRef::l_get_player_name(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL){ + if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } @@ -945,13 +945,28 @@ int ObjectRef::l_get_player_name(lua_State *L) return 1; } +// get_player_velocity(self) +int ObjectRef::l_get_player_velocity(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) { + lua_pushnil(L); + return 1; + } + // Do it + push_v3f(L, player->getSpeed() / BS); + return 1; +} + // get_look_dir(self) int ObjectRef::l_get_look_dir(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; // Do it float pitch = player->getRadPitch(); float yaw = player->getRadYaw(); @@ -966,7 +981,7 @@ int ObjectRef::l_get_look_pitch(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; // Do it lua_pushnumber(L, player->getRadPitch()); return 1; @@ -978,7 +993,7 @@ int ObjectRef::l_get_look_yaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; // Do it lua_pushnumber(L, player->getRadYaw()); return 1; @@ -990,7 +1005,7 @@ int ObjectRef::l_set_look_pitch(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; float pitch = luaL_checknumber(L, 2) * core::RADTODEG; // Do it co->setPitch(pitch); @@ -1003,7 +1018,7 @@ int ObjectRef::l_set_look_yaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; float yaw = luaL_checknumber(L, 2) * core::RADTODEG; // Do it co->setYaw(yaw); @@ -1016,7 +1031,7 @@ int ObjectRef::l_set_breath(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; u16 breath = luaL_checknumber(L, 2); // Do it co->setBreath(breath); @@ -1034,7 +1049,7 @@ int ObjectRef::l_get_breath(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it u16 breath = co->getBreath(); lua_pushinteger (L, breath); @@ -1047,7 +1062,7 @@ int ObjectRef::l_set_inventory_formspec(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; std::string formspec = luaL_checkstring(L, 2); player->inventory_formspec = formspec; @@ -1062,7 +1077,7 @@ int ObjectRef::l_get_inventory_formspec(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; std::string formspec = player->inventory_formspec; lua_pushlstring(L, formspec.c_str(), formspec.size()); @@ -1075,7 +1090,7 @@ int ObjectRef::l_get_player_control(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL){ + if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } @@ -1109,7 +1124,7 @@ int ObjectRef::l_get_player_control_bits(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL){ + if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } @@ -1533,7 +1548,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L) bool do_override = false; float ratio = 0.0f; - if (!lua_isnil(L, 2)){ + if (!lua_isnil(L, 2)) { do_override = true; ratio = luaL_checknumber(L, 2); } @@ -1612,7 +1627,7 @@ ObjectRef::ObjectRef(ServerActiveObject *object): ObjectRef::~ObjectRef() { - /*if(m_object) + /*if (m_object) infostream<<"ObjectRef destructing for id=" <getId()< Date: Mon, 20 Jul 2015 23:30:43 +0200 Subject: [PATCH 222/670] Remove profiler.h include where it's not needed. Remove some unreachable and very old code --- src/camera.cpp | 42 +++++++--------------- src/collision.cpp | 75 +-------------------------------------- src/collision.h | 9 ----- src/content_sao.cpp | 1 - src/main.cpp | 1 - src/mapgen_singlenode.cpp | 1 - src/mapgen_v5.cpp | 1 - src/mapgen_v6.cpp | 1 - src/mapgen_v7.cpp | 1 - src/player.cpp | 31 +--------------- 10 files changed, 14 insertions(+), 149 deletions(-) diff --git a/src/camera.cpp b/src/camera.cpp index ca28555d2..46df0575c 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -162,55 +162,37 @@ void Camera::step(f32 dtime) { //f32 offset = dtime * m_view_bobbing_speed * 0.035; f32 offset = dtime * m_view_bobbing_speed * 0.030; - if (m_view_bobbing_state == 2) - { -#if 0 + if (m_view_bobbing_state == 2) { // Animation is getting turned off - if (m_view_bobbing_anim < 0.5) + if (m_view_bobbing_anim < 0.25) { m_view_bobbing_anim -= offset; - else - m_view_bobbing_anim += offset; - if (m_view_bobbing_anim <= 0 || m_view_bobbing_anim >= 1) - { - m_view_bobbing_anim = 0; - m_view_bobbing_state = 0; - } -#endif -#if 1 - // Animation is getting turned off - if(m_view_bobbing_anim < 0.25) - { - m_view_bobbing_anim -= offset; - } else if(m_view_bobbing_anim > 0.75) { + } else if (m_view_bobbing_anim > 0.75) { m_view_bobbing_anim += offset; } - if(m_view_bobbing_anim < 0.5) - { + + if (m_view_bobbing_anim < 0.5) { m_view_bobbing_anim += offset; - if(m_view_bobbing_anim > 0.5) + if (m_view_bobbing_anim > 0.5) m_view_bobbing_anim = 0.5; } else { m_view_bobbing_anim -= offset; - if(m_view_bobbing_anim < 0.5) + if (m_view_bobbing_anim < 0.5) m_view_bobbing_anim = 0.5; } - if(m_view_bobbing_anim <= 0 || m_view_bobbing_anim >= 1 || - fabs(m_view_bobbing_anim - 0.5) < 0.01) - { + + if (m_view_bobbing_anim <= 0 || m_view_bobbing_anim >= 1 || + fabs(m_view_bobbing_anim - 0.5) < 0.01) { m_view_bobbing_anim = 0; m_view_bobbing_state = 0; } -#endif } - else - { + else { float was = m_view_bobbing_anim; m_view_bobbing_anim = my_modf(m_view_bobbing_anim + offset); bool step = (was == 0 || (was < 0.5f && m_view_bobbing_anim >= 0.5f) || (was > 0.5f && m_view_bobbing_anim <= 0.5f)); - if(step) - { + if(step) { MtEvent *e = new SimpleTriggerEvent("ViewBobbingStep"); m_gamedef->event()->put(e); } diff --git a/src/collision.cpp b/src/collision.cpp index 27e3b5e94..6afc79ab7 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -458,7 +458,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, pos_f += speed_f * nearest_dtime; dtime -= nearest_dtime; } - + bool is_collision = true; if(is_unloaded[nearest_boxindex]) is_collision = false; @@ -561,76 +561,3 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, return result; } - -#if 0 -// This doesn't seem to work and isn't used -collisionMoveResult collisionMovePrecise(Map *map, IGameDef *gamedef, - f32 pos_max_d, const aabb3f &box_0, - f32 stepheight, f32 dtime, - v3f &pos_f, v3f &speed_f, v3f &accel_f) -{ - //TimeTaker tt("collisionMovePrecise"); - ScopeProfiler sp(g_profiler, "collisionMovePrecise avg", SPT_AVG); - - collisionMoveResult final_result; - - // If there is no speed, there are no collisions - if(speed_f.getLength() == 0) - return final_result; - - // Don't allow overly huge dtime - if(dtime > 2.0) - dtime = 2.0; - - f32 dtime_downcount = dtime; - - u32 loopcount = 0; - do - { - loopcount++; - - // Maximum time increment (for collision detection etc) - // time = distance / speed - f32 dtime_max_increment = 1.0; - if(speed_f.getLength() != 0) - dtime_max_increment = pos_max_d / speed_f.getLength(); - - // Maximum time increment is 10ms or lower - if(dtime_max_increment > 0.01) - dtime_max_increment = 0.01; - - f32 dtime_part; - if(dtime_downcount > dtime_max_increment) - { - dtime_part = dtime_max_increment; - dtime_downcount -= dtime_part; - } - else - { - dtime_part = dtime_downcount; - /* - Setting this to 0 (no -=dtime_part) disables an infinite loop - when dtime_part is so small that dtime_downcount -= dtime_part - does nothing - */ - dtime_downcount = 0; - } - - collisionMoveResult result = collisionMoveSimple(map, gamedef, - pos_max_d, box_0, stepheight, dtime_part, - pos_f, speed_f, accel_f); - - if(result.touching_ground) - final_result.touching_ground = true; - if(result.collides) - final_result.collides = true; - if(result.collides_xz) - final_result.collides_xz = true; - if(result.standing_on_unloaded) - final_result.standing_on_unloaded = true; - } - while(dtime_downcount > 0.001); - - return final_result; -} -#endif diff --git a/src/collision.h b/src/collision.h index 32086aae3..fc4187eda 100644 --- a/src/collision.h +++ b/src/collision.h @@ -75,15 +75,6 @@ collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef, v3f &accel_f,ActiveObject* self=0, bool collideWithObjects=true); -#if 0 -// This doesn't seem to work and isn't used -// Moves using as many iterations as needed -collisionMoveResult collisionMovePrecise(Map *map, IGameDef *gamedef, - f32 pos_max_d, const aabb3f &box_0, - f32 stepheight, f32 dtime, - v3f &pos_f, v3f &speed_f, v3f &accel_f); -#endif - // Helper function: // Checks for collision of a moving aabbox with a static aabbox // Returns -1 if no collision, 0 if X collision, 1 if Y collision, 2 if Z collision diff --git a/src/content_sao.cpp b/src/content_sao.cpp index eab1e6279..add1726fc 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "collision.h" #include "environment.h" #include "settings.h" -#include "profiler.h" #include "serialization.h" // For compressZlib #include "tool.h" // For ToolCapabilities #include "gamedef.h" diff --git a/src/main.cpp b/src/main.cpp index 79daa7b8c..1d73b4025 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "game.h" #include "defaultsettings.h" #include "gettext.h" -#include "profiler.h" #include "log.h" #include "quicktune.h" #include "httpfetch.h" diff --git a/src/mapgen_singlenode.cpp b/src/mapgen_singlenode.cpp index a40020ab3..a8b84e849 100644 --- a/src/mapgen_singlenode.cpp +++ b/src/mapgen_singlenode.cpp @@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "map.h" #include "nodedef.h" #include "voxelalgorithms.h" -#include "profiler.h" #include "emerge.h" diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 00a1b915d..f23dad4ec 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" -#include "profiler.h" #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 86e2f89ae..09acec783 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -28,7 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" -#include "profiler.h" #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 4eb305dc5..a46bf8f17 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" -#include "profiler.h" #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" diff --git a/src/player.cpp b/src/player.cpp index 26496259c..668d490cc 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -119,31 +119,12 @@ void Player::accelerateHorizontal(v3f target_speed, f32 max_increase) f32 dl = d_wanted.getLength(); if(dl > max_increase) dl = max_increase; - + v3f d = d_wanted.normalize() * dl; m_speed.X += d.X; m_speed.Z += d.Z; -#if 0 // old code - if(m_speed.X < target_speed.X - max_increase) - m_speed.X += max_increase; - else if(m_speed.X > target_speed.X + max_increase) - m_speed.X -= max_increase; - else if(m_speed.X < target_speed.X) - m_speed.X = target_speed.X; - else if(m_speed.X > target_speed.X) - m_speed.X = target_speed.X; - - if(m_speed.Z < target_speed.Z - max_increase) - m_speed.Z += max_increase; - else if(m_speed.Z > target_speed.Z + max_increase) - m_speed.Z -= max_increase; - else if(m_speed.Z < target_speed.Z) - m_speed.Z = target_speed.Z; - else if(m_speed.Z > target_speed.Z) - m_speed.Z = target_speed.Z; -#endif } // Vertical acceleration (Y), X and Z directions are ignored @@ -160,16 +141,6 @@ void Player::accelerateVertical(v3f target_speed, f32 max_increase) m_speed.Y += d_wanted; -#if 0 // old code - if(m_speed.Y < target_speed.Y - max_increase) - m_speed.Y += max_increase; - else if(m_speed.Y > target_speed.Y + max_increase) - m_speed.Y -= max_increase; - else if(m_speed.Y < target_speed.Y) - m_speed.Y = target_speed.Y; - else if(m_speed.Y > target_speed.Y) - m_speed.Y = target_speed.Y; -#endif } v3s16 Player::getLightPosition() const From 899491325938d0b1e5bf701d33d24bb4283affaa Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 18 Jul 2015 14:31:34 +0200 Subject: [PATCH 223/670] Allow random menu images for subgames --- builtin/common/misc_helpers.lua | 16 +++++++++++++++- builtin/mainmenu/textures.lua | 30 ++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 1c9f2a48f..bf672e6da 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -159,6 +159,7 @@ function dump(o, indent, nested, level) return "{"..table.concat(t, ", ").."}" end +-------------------------------------------------------------------------------- function string.split(str, delim, include_empty, max_splits, sep_is_pattern) delim = delim or "," max_splits = max_splits or -1 @@ -183,10 +184,23 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern) return items end +-------------------------------------------------------------------------------- +function table.indexof(list, val) + for i = 1, #list do + if list[i] == val then + return i + end + end + return -1 +end + +assert(table.indexof({"foo", "bar"}, "foo") == 1) +assert(table.indexof({"foo", "bar"}, "baz") == -1) + -------------------------------------------------------------------------------- function file_exists(filename) local f = io.open(filename, "r") - if f==nil then + if f == nil then return false else f:close() diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua index 56992c0c5..700bdb5cc 100644 --- a/builtin/mainmenu/textures.lua +++ b/builtin/mainmenu/textures.lua @@ -129,7 +129,7 @@ function mm_texture.set_generic(identifier) end -------------------------------------------------------------------------------- -function mm_texture.set_game(identifier,gamedetails) +function mm_texture.set_game(identifier, gamedetails) if gamedetails == nil then return false @@ -137,15 +137,33 @@ function mm_texture.set_game(identifier,gamedetails) if mm_texture.texturepack ~= nil then local path = mm_texture.texturepack .. DIR_DELIM .. - gamedetails.id .. "_menu_" .. identifier .. ".png" - if core.set_background(identifier,path) then + gamedetails.id .. "_menu_" .. identifier .. ".png" + if core.set_background(identifier, path) then return true end end - local path = gamedetails.path .. DIR_DELIM .."menu" .. - DIR_DELIM .. identifier .. ".png" - if core.set_background(identifier,path) then + -- Find out how many randomized textures the subgame provides + local n, filename + local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false) + for i = 1, #menu_files do + local filename = identifier .. "." .. i .. ".png" + if table.indexof(menu_files, filename) == -1 then + n = i - 1 + break + end + end + -- Select random texture, 0 means standard texture + n = math.random(0, n) + if n == 0 then + filename = identifier .. ".png" + else + filename = identifier .. "." .. n .. ".png" + end + + local path = gamedetails.path .. DIR_DELIM .. "menu" .. + DIR_DELIM .. filename + if core.set_background(identifier, path) then return true end From 403e6e6c9cf6be5e16e3f1f9bd7805fe9b3006cd Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 21 Jul 2015 17:17:46 +0200 Subject: [PATCH 224/670] Document game main menu image system --- doc/lua_api.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index e156d75e4..318c23a76 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -65,6 +65,15 @@ e.g. The game directory can contain the file minetest.conf, which will be used to set default settings when running the particular game. +### Menu images + +Games can provide custom main menu images. They are put inside a `menu` directory inside the game directory. + +The images are named `$identifier.png`, where `$identifier` is one of `overlay,background,footer,header`. +If you want to specify multiple images for one identifier, add additional images named like `$identifier.$n.png`, with an ascending number $n starting with 1, +and a random image will be chosen from the provided ones. + + Mod load path ------------- Generic: @@ -1711,7 +1720,7 @@ Helper functions max_jitter = 0.5, -- maximum packet time jitter avg_jitter = 0.03, -- average packet time jitter connection_uptime = 200, -- seconds since client connected - + -- following information is available on debug build only!!! -- DO NOT USE IN MODS --ser_vers = 26, -- serialization version used by client From a57d83b46af03313355d83924cfb53f4987cc48f Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 21 Jul 2015 17:57:57 +0200 Subject: [PATCH 225/670] Ask auth handler to create auth when a default password is set -> Fix server crash with protocol >=25 if a default password is set. -> Remove some useless and possibly confusion causing code for the TOCLIENT_FIRST_SRP packet handler --- src/clientiface.h | 2 ++ src/network/serverpackethandler.cpp | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/clientiface.h b/src/clientiface.h index ec6ba9e9e..f6c4294e2 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -232,6 +232,7 @@ public: /* Authentication information */ std::string enc_pwd; + bool create_player_on_auth_success; AuthMechanism chosen_mech; void * auth_data; u32 allowed_auth_mechs; @@ -246,6 +247,7 @@ public: peer_id(PEER_ID_INEXISTENT), serialization_version(SER_FMT_VER_INVALID), net_proto_version(0), + create_player_on_auth_success(false), chosen_mech(AUTH_MECHANISM_NONE), auth_data(NULL), m_time_from_building(9999), diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 5493dfec1..f756d80ef 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -263,6 +263,8 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // Take care of default passwords. client->enc_pwd = getSRPVerifier(playerName, default_password); auth_mechs |= AUTH_MECHANISM_SRP; + // Create auth, but only on successful login + client->create_player_on_auth_success = true; } } @@ -1858,14 +1860,8 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt) } std::string initial_ver_key; - std::string raw_default_password = g_settings->get("default_password"); - // If default_password is empty, allow any initial password - if (raw_default_password.length() == 0) { - initial_ver_key = encodeSRPVerifier(verification_key, salt); - } else { - initial_ver_key = getSRPVerifier(playername, raw_default_password); - } + initial_ver_key = encodeSRPVerifier(verification_key, salt); m_script->createAuth(playername, initial_ver_key); acceptAuth(pkt->getPeerId(), false); @@ -2072,5 +2068,19 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt) } } + 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); + return; + } + client->create_player_on_auth_success = false; + } + acceptAuth(pkt->getPeerId(), wantSudo); } From 254dbe7abd255075b16db35b821566ed51fa850e Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 21 Jul 2015 18:03:59 +0200 Subject: [PATCH 226/670] Clarify docs for auth.cpp method --- src/util/auth.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util/auth.cpp b/src/util/auth.cpp index ac5139535..df8940e87 100644 --- a/src/util/auth.cpp +++ b/src/util/auth.cpp @@ -57,9 +57,9 @@ void getSRPVerifier(const std::string &name, } // Get a db-ready SRP verifier -// The salt param is only modifyable by this method so that you can free it -// if it was allocated. You shouldn't use it for other purposes, as you will -// need the contents of salt_len too. +// If the salt param is NULL, one is automatically generated. +// Please free() it afterwards. You shouldn't use it for other purposes, +// as you will need the contents of salt_len too. inline static std::string getSRPVerifier(const std::string &name, const std::string &password, char ** salt, size_t salt_len) { From 5b0c719171eb9ccb8f2829eb1cc8b3fe9f24cd05 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 21 Jul 2015 21:55:58 +0200 Subject: [PATCH 227/670] Fix crash in mainmenu when loaded subgame does not have a "menu" directory --- builtin/mainmenu/textures.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua index 700bdb5cc..075f38ee0 100644 --- a/builtin/mainmenu/textures.lua +++ b/builtin/mainmenu/textures.lua @@ -144,10 +144,11 @@ function mm_texture.set_game(identifier, gamedetails) end -- Find out how many randomized textures the subgame provides - local n, filename + local n = 0 + local filename local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false) for i = 1, #menu_files do - local filename = identifier .. "." .. i .. ".png" + filename = identifier .. "." .. i .. ".png" if table.indexof(menu_files, filename) == -1 then n = i - 1 break From 60350699c792b816b20704d59cfbda0894cdba39 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Tue, 21 Jul 2015 23:56:41 +0200 Subject: [PATCH 228/670] Add wielded (and CAOs) shader --- .../wielded_shader/opengl_fragment.glsl | 114 ++++++++++++++++++ .../shaders/wielded_shader/opengl_vertex.glsl | 35 ++++++ src/camera.cpp | 9 +- src/camera.h | 1 - src/client/tile.cpp | 17 +-- src/client/tile.h | 6 +- src/mesh.cpp | 36 ++++++ src/mesh.h | 6 + src/nodedef.cpp | 4 +- src/wieldmesh.cpp | 33 ++--- src/wieldmesh.h | 3 + 11 files changed, 224 insertions(+), 40 deletions(-) create mode 100644 client/shaders/wielded_shader/opengl_fragment.glsl create mode 100644 client/shaders/wielded_shader/opengl_vertex.glsl diff --git a/client/shaders/wielded_shader/opengl_fragment.glsl b/client/shaders/wielded_shader/opengl_fragment.glsl new file mode 100644 index 000000000..75dd1b674 --- /dev/null +++ b/client/shaders/wielded_shader/opengl_fragment.glsl @@ -0,0 +1,114 @@ +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; + +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 && 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; + } + + 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; + if (fogDistance != 0.0) { + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + col = mix(col, skyBgColor, d); + } + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/wielded_shader/opengl_vertex.glsl b/client/shaders/wielded_shader/opengl_vertex.glsl new file mode 100644 index 000000000..a2ab9fa5f --- /dev/null +++ b/client/shaders/wielded_shader/opengl_vertex.glsl @@ -0,0 +1,35 @@ +uniform mat4 mWorldViewProj; +uniform mat4 mInvWorld; +uniform mat4 mTransWorld; +uniform mat4 mWorld; + +uniform float dayNightRatio; +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 --git a/src/camera.cpp b/src/camera.cpp index 46df0575c..0c6d03e4e 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -92,10 +92,9 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control, // all other 3D scene nodes and before the GUI. m_wieldmgr = smgr->createNewSceneManager(); m_wieldmgr->addCameraSceneNode(); - m_wieldnode = new WieldMeshSceneNode(m_wieldmgr->getRootSceneNode(), m_wieldmgr, -1, true); + m_wieldnode = new WieldMeshSceneNode(m_wieldmgr->getRootSceneNode(), m_wieldmgr, -1, false); m_wieldnode->setItem(ItemStack(), m_gamedef); m_wieldnode->drop(); // m_wieldmgr grabbed it - m_wieldlightnode = m_wieldmgr->addLightSceneNode(NULL, v3f(0.0, 50.0, 0.0)); /* TODO: Add a callback function so these can be updated when a setting * changes. At this point in time it doesn't matter (e.g. /set @@ -451,11 +450,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, m_wieldnode->setPosition(wield_position); m_wieldnode->setRotation(wield_rotation); - // Shine light upon the wield mesh - video::SColor black(255,0,0,0); - m_wieldmgr->setAmbientLight(player->light_color.getInterpolated(black, 0.7)); - m_wieldlightnode->getLightData().DiffuseColor = player->light_color.getInterpolated(black, 0.3); - m_wieldlightnode->setPosition(v3f(30+5*sin(2*player->getYaw()*M_PI/180), -50, 0)); + m_wieldnode->setColor(player->light_color); // Render distance feedback loop updateViewingRange(frametime, busytime); diff --git a/src/camera.h b/src/camera.h index b0d190a3a..006f4b3ce 100644 --- a/src/camera.h +++ b/src/camera.h @@ -159,7 +159,6 @@ private: scene::ISceneManager* m_wieldmgr; WieldMeshSceneNode* m_wieldnode; - scene::ILightSceneNode* m_wieldlightnode; // draw control MapDrawControl& m_draw_control; diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 5ad564b65..03badd817 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -385,7 +385,8 @@ public: video::ITexture* getNormalTexture(const std::string &name); video::SColor getTextureAverageColor(const std::string &name); - video::ITexture *getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile); + video::ITexture *getShaderFlagsTexture( + bool normamap_present, bool tileable_vertical, bool tileable_horizontal); private: @@ -2050,14 +2051,14 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) return c; } -video::ITexture *TextureSource::getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile) + +video::ITexture *TextureSource::getShaderFlagsTexture( + bool normalmap_present, bool tileable_vertical, bool tileable_horizontal) { std::string tname = "__shaderFlagsTexture"; - - bool normalmap_present = tile->normal_texture ? true : false; tname += normalmap_present ? "1" : "0"; - tname += tiledef->tileable_horizontal ? "1" : "0"; - tname += tiledef->tileable_vertical ? "1" : "0"; + tname += tileable_horizontal ? "1" : "0"; + tname += tileable_vertical ? "1" : "0"; if (isKnownSourceImage(tname)) { return getTexture(tname); @@ -2069,8 +2070,8 @@ video::ITexture *TextureSource::getShaderFlagsTexture(TileDef *tiledef, TileSpec video::SColor c( 255, normalmap_present ? 255 : 0, - tiledef->tileable_horizontal ? 255 : 0, - tiledef->tileable_vertical ? 255 : 0); + tileable_horizontal ? 255 : 0, + tileable_vertical ? 255 : 0); flags_image->setPixel(0, 0, c); insertSourceImage(tname, flags_image); flags_image->drop(); diff --git a/src/client/tile.h b/src/client/tile.h index 13f1a8b34..744aa2c3d 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -113,7 +113,8 @@ public: const TextureFromMeshParams ¶ms)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normamap_present, + bool tileable_vertical, bool tileable_horizontal)=0; }; class IWritableTextureSource : public ITextureSource @@ -136,7 +137,8 @@ public: virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(TileDef *tiledef, TileSpec *tile)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normamap_present, + bool tileable_vertical, bool tileable_horizontal)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); diff --git a/src/mesh.cpp b/src/mesh.cpp index 4f70b7fa2..dab1575f3 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -33,6 +33,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #define MY_ETLM_READ_ONLY video::ETLM_READ_ONLY #endif +static void applyFacesShading(video::SColor& color, float factor) +{ + color.setRed(core::clamp(core::round32(color.getRed()*factor), 0, 255)); + color.setGreen(core::clamp(core::round32(color.getGreen()*factor), 0, 255)); + color.setBlue(core::clamp(core::round32(color.getBlue()*factor), 0, 255)); +} + scene::IAnimatedMesh* createCubeMesh(v3f scale) { video::SColor c(255,255,255,255); @@ -165,6 +172,35 @@ void setMeshColor(scene::IMesh *mesh, const video::SColor &color) } } +void shadeMeshFaces(scene::IMesh *mesh) +{ + if (mesh == NULL) + return; + + u32 mc = mesh->getMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { + scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); + const u32 stride = getVertexPitchFromType(buf->getVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) { + video::S3DVertex *vertex = (video::S3DVertex *)(vertices + i * stride); + video::SColor &vc = vertex->Color; + if (vertex->Normal.Y < -0.5) { + applyFacesShading (vc, 0.447213); + } else if (vertex->Normal.Z > 0.5) { + applyFacesShading (vc, 0.670820); + } else if (vertex->Normal.Z < -0.5) { + applyFacesShading (vc, 0.670820); + } else if (vertex->Normal.X > 0.5) { + applyFacesShading (vc, 0.836660); + } else if (vertex->Normal.X < -0.5) { + applyFacesShading (vc, 0.836660); + } + } + } +} + void setMeshColorByNormalXYZ(scene::IMesh *mesh, const video::SColor &colorX, const video::SColor &colorY, diff --git a/src/mesh.h b/src/mesh.h index 761842b0d..ec109e9e9 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -48,6 +48,12 @@ void translateMesh(scene::IMesh *mesh, v3f vec); */ void setMeshColor(scene::IMesh *mesh, const video::SColor &color); +/* + Shade mesh faces according to their normals +*/ + +void shadeMeshFaces(scene::IMesh *mesh); + /* Set the color of all vertices in the mesh. For each vertex, determine the largest absolute entry in diff --git a/src/nodedef.cpp b/src/nodedef.cpp index bb4f102da..c9c461b20 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1012,7 +1012,9 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, if (use_normal_texture) { tile->normal_texture = tsrc->getNormalTexture(tiledef->name); } - tile->flags_texture = tsrc->getShaderFlagsTexture(tiledef, tile); + tile->flags_texture = tsrc->getShaderFlagsTexture( + tile->normal_texture ? true : false, + tiledef->tileable_horizontal, tiledef->tileable_vertical); // Material flags tile->material_flags = 0; diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 036b25a90..56c84b959 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define WIELD_SCALE_FACTOR 30.0 #define WIELD_SCALE_FACTOR_EXTRUDED 40.0 -#define MIN_EXTRUSION_MESH_RESOLUTION 32 // not 16: causes too many "holes" +#define MIN_EXTRUSION_MESH_RESOLUTION 16 #define MAX_EXTRUSION_MESH_RESOLUTION 512 static scene::IMesh* createExtrusionMesh(int resolution_x, int resolution_y) @@ -114,6 +114,7 @@ static scene::IMesh* createExtrusionMesh(int resolution_x, int resolution_y) mesh->addMeshBuffer(buf); buf->drop(); scaleMesh(mesh, scale); // also recalculates bounding box + mesh = (scene::SMesh *)createForsythOptimizedMesh(mesh); return mesh; } @@ -281,7 +282,9 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, // Customize material video::SMaterial &material = m_meshnode->getMaterial(0); - material.setTexture(0, tsrc->getTextureForMesh(imagename)); + material.setTexture(0, tsrc->getTexture(imagename)); + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; material.MaterialType = m_material_type; material.setFlag(video::EMF_BACK_FACE_CULLING, true); // Enable bi/trilinear filtering only for high resolution textures @@ -297,31 +300,25 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, #if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2 material.setFlag(video::EMF_USE_MIP_MAPS, false); #endif - -#if 0 -//// TODO(RealBadAngel): Reactivate when shader is added for wield items - if (m_enable_shaders) - material.setTexture(2, tsrc->getTexture("disable_img.png")); -#endif + if (m_enable_shaders) { + material.setTexture(2, tsrc->getShaderFlagsTexture(false, true, true)); + } } void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) { ITextureSource *tsrc = gamedef->getTextureSource(); IItemDefManager *idef = gamedef->getItemDefManager(); - //IShaderSource *shdrsrc = gamedef->getShaderSource(); + IShaderSource *shdrsrc = gamedef->getShaderSource(); INodeDefManager *ndef = gamedef->getNodeDefManager(); const ItemDefinition &def = item.getDefinition(idef); const ContentFeatures &f = ndef->get(def.name); content_t id = ndef->getId(def.name); -#if 0 -//// TODO(RealBadAngel): Reactivate when shader is added for wield items if (m_enable_shaders) { - u32 shader_id = shdrsrc->getShader("nodes_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); + u32 shader_id = shdrsrc->getShader("wielded_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); m_material_type = shdrsrc->getShaderInfo(shader_id).material; } -#endif // If wield_image is defined, it overrides everything else if (def.wield_image != "") { @@ -345,8 +342,6 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) } else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) { setCube(f.tiles, def.wield_scale, tsrc); } else { - //// TODO: Change false in the following constructor args to - //// appropriate value when shader is added for wield items (if applicable) MeshMakeData mesh_make_data(gamedef, false); MapNode mesh_make_node(id, 255, 0); mesh_make_data.fillSingleNode(&mesh_make_node); @@ -376,8 +371,6 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) material.setTexture(0, f.tiles[i].texture); } material.MaterialType = m_material_type; -#if 0 -//// TODO(RealBadAngel): Reactivate when shader is added for wield items if (m_enable_shaders) { if (f.tiles[i].normal_texture) { if (animated) { @@ -386,12 +379,9 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) } else { material.setTexture(1, f.tiles[i].normal_texture); } - material.setTexture(2, tsrc->getTexture("enable_img.png")); - } else { - material.setTexture(2, tsrc->getTexture("disable_img.png")); } + material.setTexture(2, f.tiles[i].flags_texture); } -#endif } return; } @@ -408,6 +398,7 @@ void WieldMeshSceneNode::setColor(video::SColor color) { assert(!m_lighting); setMeshColor(m_meshnode->getMesh(), color); + shadeMeshFaces(m_meshnode->getMesh()); } void WieldMeshSceneNode::render() diff --git a/src/wieldmesh.h b/src/wieldmesh.h index 933b53763..3f4f4fc04 100644 --- a/src/wieldmesh.h +++ b/src/wieldmesh.h @@ -48,6 +48,9 @@ public: // Must only be used if the constructor was called with lighting = false void setColor(video::SColor color); + scene::IMesh *getMesh() + { return m_meshnode->getMesh(); } + virtual void render(); virtual const core::aabbox3d& getBoundingBox() const From d569c91f489d16decf270847688c4e42c1014679 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 15 Jul 2015 02:31:14 +0100 Subject: [PATCH 229/670] Mgv7: Use density noise + density gradient for mountain terrain Tune and optimise noise parameters --- src/mapgen_v7.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index a46bf8f17..e499ebb81 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -146,17 +146,17 @@ MapgenV7Params::MapgenV7Params() { spflags = MGV7_MOUNTAINS | MGV7_RIDGES; - np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 5, 0.6, 2.0); - np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); - np_terrain_persist = NoiseParams(0.6, 0.12, v3f(2000, 2000, 2000), 539, 3, 0.5, 2.0); - np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.69, 2.0); - np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 4, 0.7, 2.0); - np_mount_height = NoiseParams(184, 72, v3f(1000, 1000, 1000), 72449, 3, 0.5, 2.0); - np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0); - np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.68, 2.0); - np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); - np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); - np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); + np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 5, 0.6, 2.0); + np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); + np_terrain_persist = NoiseParams(0.6, 0.1, v3f(2000, 2000, 2000), 539, 3, 0.6, 2.0); + np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.7, 2.0); + np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0); + np_mount_height = NoiseParams(256, 112, v3f(1000, 1000, 1000), 72449, 3, 0.6, 2.0); + np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0); + np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.63, 2.0); + np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); + np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); + np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); } @@ -429,16 +429,20 @@ float MapgenV7::baseTerrainLevelFromMap(int index) bool MapgenV7::getMountainTerrainAtPoint(s16 x, s16 y, s16 z) { float mnt_h_n = NoisePerlin2D(&noise_mount_height->np, x, z, seed); + float density_gradient = -((float)y / mnt_h_n); float mnt_n = NoisePerlin3D(&noise_mountain->np, x, y, z, seed); - return mnt_n * mnt_h_n >= (float)y; + + return mnt_n + density_gradient >= 0.0; } bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y) { float mounthn = noise_mount_height->result[idx_xz]; + float density_gradient = -((float)y / mounthn); float mountn = noise_mountain->result[idx_xyz]; - return mountn * mounthn >= (float)y; + + return mountn + density_gradient >= 0.0; } From 8b472fdc05a40ddf80a2f055012fcc8059ba60a3 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 22 Jul 2015 02:20:05 +0100 Subject: [PATCH 230/670] Conf.example: Update mgv7 noise parameters --- minetest.conf.example | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 7029f591e..51660e333 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -585,12 +585,12 @@ #mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0 #mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 -#mgv7_np_terrain_persist = 0.6, 0.12, (2000, 2000, 2000), 539, 3, 0.5, 2.0 -#mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.69, 2.0 -#mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 4, 0.7, 2.0 -#mgv7_np_mount_height = 184, 72, (1000, 1000, 1000), 72449, 3, 0.5, 2.0 +#mgv7_np_terrain_persist = 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0 +#mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.7, 2.0 +#mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0 +#mgv7_np_mount_height = 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0 #mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 -#mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.68, 2.0 +#mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0 #mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 #mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 #mgv7_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0 From 4eacce5e2f89bd6864f9a231488b507ac33e4902 Mon Sep 17 00:00:00 2001 From: Robert Zenz Date: Tue, 21 Jul 2015 21:43:01 +0200 Subject: [PATCH 231/670] Add note that chat messages can be marked as handled. --- doc/lua_api.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 318c23a76..b11acb921 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1833,6 +1833,7 @@ Call these functions only at load time! * `dug_too_fast` * `minetest.register_on_chat_message(func(name, message))` * Called always when a player says something + * Return `true` to mark the message as handled, which means that it will not be sent to other players * `minetest.register_on_player_receive_fields(func(player, formname, fields))` * Called when a button is pressed in player's inventory form * Newest functions are called first From 1e0e85f82e030e761c36ba5a12427bec0fb4e4f2 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Thu, 23 Jul 2015 04:35:13 +0200 Subject: [PATCH 232/670] Fix issues with light of attached CAOs --- src/clientobject.h | 1 + src/content_cao.cpp | 30 ++++++++++++++++++++++++------ src/content_cao.h | 2 ++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/clientobject.h b/src/clientobject.h index 4a77139e2..be24e1388 100644 --- a/src/clientobject.h +++ b/src/clientobject.h @@ -54,6 +54,7 @@ public: 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 core::aabbox3d* getSelectionBox(){return NULL;} virtual bool getCollisionBox(aabb3f *toset){return false;} diff --git a/src/content_cao.cpp b/src/content_cao.cpp index a16bd4efa..0293b7983 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -984,20 +984,38 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, } 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 (std::vector::size_type i = 0; i < m_children.size(); i++) { + ClientActiveObject *obj = m_env->getActiveObject(m_children[i]); + if (obj) { + obj->updateLightNoCheck(light_at_pos); + } + } +} + +void GenericCAO::updateLightNoCheck(u8 light_at_pos) { u8 li = decode_light(light_at_pos); - if(li != m_last_light) - { + if (li != m_last_light) { m_last_light = li; video::SColor color(255,li,li,li); - if(m_meshnode) + if (m_meshnode) { setMeshColor(m_meshnode->getMesh(), color); - if(m_animated_meshnode) + } else if (m_animated_meshnode) { setMeshColor(m_animated_meshnode->getMesh(), color); - if(m_wield_meshnode) + } else if (m_wield_meshnode) { m_wield_meshnode->setColor(color); - if(m_spritenode) + } else if (m_spritenode) { m_spritenode->setColor(color); + } } } diff --git a/src/content_cao.h b/src/content_cao.h index 1e526d1cd..299d6c73e 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -178,6 +178,8 @@ public: void updateLight(u8 light_at_pos); + void updateLightNoCheck(u8 light_at_pos); + v3s16 getLightPosition(); void updateNodePos(); From 3b50b2766aeb09c9fc0ad0ea07426bb2187df3d7 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 17 Jul 2015 16:40:41 +0200 Subject: [PATCH 233/670] Optional reconnect functionality Enable the server to request the client to reconnect. This can be done with the now extended minetest.request_shutdown([reason], [reconnect]) setting. --- builtin/fstk/ui.lua | 65 +++++++++++++++++------------ doc/lua_api.txt | 3 +- minetest.conf.example | 3 ++ src/client.cpp | 1 + src/client.h | 3 ++ src/client/clientlauncher.cpp | 24 +++++++---- src/client/clientlauncher.h | 4 +- src/defaultsettings.cpp | 1 + src/environment.cpp | 8 ++-- src/environment.h | 4 +- src/game.cpp | 26 +++++++----- src/game.h | 1 + src/guiEngine.cpp | 11 ++--- src/guiMainMenu.h | 31 ++++++++------ src/network/clientpackethandler.cpp | 23 ++++++++-- src/network/networkprotocol.h | 9 +++- src/player.cpp | 1 + src/player.h | 1 + src/script/cpp_api/s_mainmenu.cpp | 10 ++++- src/script/cpp_api/s_mainmenu.h | 11 +++-- src/script/lua_api/l_mainmenu.cpp | 20 +++++---- src/script/lua_api/l_server.cpp | 4 +- src/script/lua_api/l_server.h | 2 +- src/server.cpp | 57 ++++++++++++++++++++----- src/server.h | 18 ++++++-- 25 files changed, 232 insertions(+), 109 deletions(-) diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 478a78ad5..de8ae4d2c 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -54,29 +54,42 @@ end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- +local function wordwrap_quickhack(str) + local res = "" + local ar = str:split("\n") + for i = 1, #ar do + local text = ar[i] + -- Hack to add word wrapping. + -- TODO: Add engine support for wrapping in formspecs + while #text > 80 do + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(string.sub(text, 1, 79)) + text = string.sub(text, 80, #text) + end + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(text) + end + return res +end + -------------------------------------------------------------------------------- function ui.update() local formspec = "" -- handle errors - if gamedata ~= nil and gamedata.errormessage ~= nil then - local ar = gamedata.errormessage:split("\n") - for i = 1, #ar do - local text = ar[i] - -- Hack to add word wrapping. - -- TODO: Add engine support for wrapping in formspecs - while #text > 80 do - if formspec ~= "" then - formspec = formspec .. "," - end - formspec = formspec .. core.formspec_escape(string.sub(text, 1, 79)) - text = string.sub(text, 80, #text) - end - if formspec ~= "" then - formspec = formspec .. "," - end - formspec = formspec .. core.formspec_escape(text) - end + if gamedata ~= nil and gamedata.reconnect_requested then + formspec = wordwrap_quickhack(gamedata.errormessage or "") + formspec = "size[12,5]" .. + "label[0.5,0;" .. fgettext("The server has requested a reconnect:") .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[6,4.6;3,0.5;btn_reconnect_no;" .. fgettext("Main menu") .. "]" .. + "button[3,4.6;3,0.5;btn_reconnect_yes;" .. fgettext("Reconnect") .. "]" + elseif gamedata ~= nil and gamedata.errormessage ~= nil then + formspec = wordwrap_quickhack(gamedata.errormessage) local error_title if string.find(gamedata.errormessage, "ModError") then error_title = fgettext("An error occured in a Lua script, such as a mod:") @@ -128,13 +141,6 @@ end -------------------------------------------------------------------------------- function ui.handle_buttons(fields) - - if fields["btn_error_confirm"] then - gamedata.errormessage = nil - update_menu() - return - end - for key,value in pairs(ui.childlist) do local retval = value:handle_buttons(fields) @@ -168,8 +174,15 @@ end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- core.button_handler = function(fields) - if fields["btn_error_confirm"] then + if fields["btn_reconnect_yes"] then + gamedata.reconnect_requested = false gamedata.errormessage = nil + gamedata.do_reconnect = true + core.start() + return + elseif fields["btn_reconnect_no"] or fields["btn_error_confirm"] then + gamedata.errormessage = nil + gamedata.reconnect_requested = false ui.update() return end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index b11acb921..75bbbdb07 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2174,7 +2174,8 @@ These functions return the leftover itemstack. * Optional: Variable number of arguments that are passed to `func` ### Server -* `minetest.request_shutdown()`: request for server shutdown +* `minetest.request_shutdown([message],[reconnect])`: request for server shutdown. Will display `message` to clients, + and `reconnect` == true displays a reconnect button. * `minetest.get_server_status()`: returns server status string ### Bans diff --git a/minetest.conf.example b/minetest.conf.example index 51660e333..b9e7d59e4 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -393,6 +393,9 @@ # A message to be displayed to all clients when the server shuts down #kick_msg_crash = This server has experienced an internal error. You will now be disconnected. # A message to be displayed to all clients when the server crashes +#ask_reconnect_on_crash = false +# Whether to ask clients to reconnect after a (lua) crash. +# Set this to true if your server is set up to restart automatically. # Mod profiler #mod_profiling = false diff --git a/src/client.cpp b/src/client.cpp index 1bd8c39ae..74072d9d7 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -244,6 +244,7 @@ Client::Client( m_chosen_auth_mech(AUTH_MECHANISM_NONE), m_auth_data(NULL), m_access_denied(false), + m_access_denied_reconnect(false), m_itemdef_received(false), m_nodedef_received(false), m_media_downloader(new ClientMediaDownloader()), diff --git a/src/client.h b/src/client.h index 7c1a19eed..547edfeab 100644 --- a/src/client.h +++ b/src/client.h @@ -489,6 +489,8 @@ public: bool accessDenied() { return m_access_denied; } + bool reconnectRequested() { return m_access_denied_reconnect; } + std::string accessDeniedReason() { return m_access_denied_reason; } @@ -636,6 +638,7 @@ private: bool m_access_denied; + bool m_access_denied_reconnect; std::string m_access_denied_reason; std::queue m_client_event_queue; bool m_itemdef_received; diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 50f0690d8..bad5c384c 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -168,8 +168,9 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) ChatBackend chat_backend; // If an error occurs, this is set to something by menu(). - // It is then displayed before the menu shows on the next call to menu() + // It is then displayed before the menu shows on the next call to menu() std::string error_message; + bool reconnect_requested = false; bool first_loop = true; @@ -197,7 +198,8 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) */ guiroot = guienv->addStaticText(L"", core::rect(0, 0, 10000, 10000)); - bool game_has_run = launch_game(error_message, game_params, cmd_args); + bool game_has_run = launch_game(error_message, reconnect_requested, + game_params, cmd_args); // If skip_main_menu, we only want to startup once if (skip_main_menu && !first_loop) @@ -233,6 +235,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) receiver->m_touchscreengui = new TouchScreenGUI(device, receiver); g_touchscreengui = receiver->m_touchscreengui; #endif + the_game( kill, random_input, @@ -245,6 +248,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) current_port, error_message, chat_backend, + &reconnect_requested, gamespec, simple_singleplayer_mode ); @@ -325,14 +329,16 @@ bool ClientLauncher::init_engine(int log_level) } bool ClientLauncher::launch_game(std::string &error_message, - GameParams &game_params, const Settings &cmd_args) + bool reconnect_requested, GameParams &game_params, + const Settings &cmd_args) { // Initialize menu data MainMenuData menudata; - menudata.address = address; - menudata.name = playername; - menudata.port = itos(game_params.socket_port); - menudata.errormessage = error_message; + menudata.address = address; + menudata.name = playername; + menudata.port = itos(game_params.socket_port); + menudata.script_data.errormessage = error_message; + menudata.script_data.reconnect_requested = reconnect_requested; error_message.clear(); @@ -379,11 +385,11 @@ bool ClientLauncher::launch_game(std::string &error_message, } } - if (!menudata.errormessage.empty()) { + if (!menudata.script_data.errormessage.empty()) { /* The calling function will pass this back into this function upon the * next iteration (if any) causing it to be displayed by the GUI */ - error_message = menudata.errormessage; + error_message = menudata.script_data.errormessage; return false; } diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h index 09f8c039a..49ceefc52 100644 --- a/src/client/clientlauncher.h +++ b/src/client/clientlauncher.h @@ -92,8 +92,8 @@ protected: void init_args(GameParams &game_params, const Settings &cmd_args); bool init_engine(int log_level); - bool launch_game(std::string &error_message, GameParams &game_params, - const Settings &cmd_args); + bool launch_game(std::string &error_message, bool reconnect_requested, + GameParams &game_params, const Settings &cmd_args); void main_menu(MainMenuData *menudata); bool create_engine_device(int log_level); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 8df0fbbd8..42c617513 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -254,6 +254,7 @@ void set_default_settings(Settings *settings) settings->setDefault("kick_msg_shutdown", "Server shutting down."); settings->setDefault("kick_msg_crash", "This server has experienced an internal error. You will now be disconnected."); + settings->setDefault("ask_reconnect_on_crash", "false"); settings->setDefault("profiler_print_interval", "0"); settings->setDefault("enable_mapgen_debug_info", "false"); diff --git a/src/environment.cpp b/src/environment.cpp index d22982b68..5d7321f60 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -426,13 +426,15 @@ bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, float stepsize, v3s16 return true; } -void ServerEnvironment::kickAllPlayers(const std::string &reason) +void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason, + const std::string &str_reason, bool reconnect) { - std::wstring wreason = utf8_to_wide(reason); for (std::vector::iterator it = m_players.begin(); it != m_players.end(); ++it) { - ((Server*)m_gamedef)->DenyAccess_Legacy((*it)->peer_id, wreason); + ((Server*)m_gamedef)->DenyAccessVerCompliant((*it)->peer_id, + (*it)->protocol_version, (AccessDeniedCode)reason, + str_reason, reconnect); } } diff --git a/src/environment.h b/src/environment.h index 794f1971c..2bc128f40 100644 --- a/src/environment.h +++ b/src/environment.h @@ -40,6 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapnode.h" #include "mapblock.h" #include "jthread/jmutex.h" +#include "network/networkprotocol.h" // for AccessDeniedCode class ServerEnvironment; class ActiveBlockModifier; @@ -221,7 +222,8 @@ public: float getSendRecommendedInterval() { return m_recommended_send_interval; } - void kickAllPlayers(const std::string &reason); + void kickAllPlayers(AccessDeniedCode reason, + const std::string &str_reason, bool reconnect); // Save players void saveLoadedPlayers(); void savePlayer(const std::string &playername); diff --git a/src/game.cpp b/src/game.cpp index e3d6b0bc6..09b8aab42 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1417,8 +1417,7 @@ struct VolatileRunFlags { * hides most of the stuff in this class (nothing in this class is required * by any other file) but exposes the public methods/data only. */ -class Game -{ +class Game { public: Game(); ~Game(); @@ -1434,6 +1433,7 @@ public: std::string *address, u16 port, std::string &error_message, + bool *reconnect, ChatBackend *chat_backend, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode); @@ -1588,6 +1588,7 @@ private: scene::ISceneManager *smgr; bool *kill; std::string *error_message; + bool *reconnect_requested; IGameDef *gamedef; // Convenience (same as *client) scene::ISceneNode *skybox; @@ -1716,17 +1717,19 @@ bool Game::startup(bool *kill, std::string *address, // can change if simple_singleplayer_mode u16 port, std::string &error_message, + bool *reconnect, ChatBackend *chat_backend, const SubgameSpec &gamespec, bool simple_singleplayer_mode) { // "cache" - this->device = device; - this->kill = kill; - this->error_message = &error_message; - this->random_input = random_input; - this->input = input; - this->chat_backend = chat_backend; + this->device = device; + this->kill = kill; + this->error_message = &error_message; + this->reconnect_requested = reconnect; + this->random_input = random_input; + this->input = input; + this->chat_backend = chat_backend; this->simple_singleplayer_mode = simple_singleplayer_mode; driver = device->getVideoDriver(); @@ -2239,6 +2242,7 @@ bool Game::connectToServer(const std::string &playername, if (client->accessDenied()) { *error_message = "Access denied. Reason: " + client->accessDeniedReason(); + *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; break; } @@ -2376,6 +2380,7 @@ inline bool Game::checkConnection() if (client->accessDenied()) { *error_message = "Access denied. Reason: " + client->accessDeniedReason(); + *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; return false; } @@ -4330,6 +4335,7 @@ void the_game(bool *kill, std::string &error_message, ChatBackend &chat_backend, + bool *reconnect_requested, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode) { @@ -4344,8 +4350,8 @@ void the_game(bool *kill, try { if (game.startup(kill, random_input, input, device, map_dir, - playername, password, &server_address, port, - error_message, &chat_backend, gamespec, + playername, password, &server_address, port, error_message, + reconnect_requested, &chat_backend, gamespec, simple_singleplayer_mode)) { game.run(); game.shutdown(); diff --git a/src/game.h b/src/game.h index 358b26c37..e1f4e9346 100644 --- a/src/game.h +++ b/src/game.h @@ -147,6 +147,7 @@ void the_game(bool *kill, u16 port, std::string &error_message, ChatBackend &chat_backend, + bool *reconnect_requested, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode); diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp index eac9db0c6..c616bc322 100644 --- a/src/guiEngine.cpp +++ b/src/guiEngine.cpp @@ -208,10 +208,8 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, m_script = new MainMenuScripting(this); try { - if (m_data->errormessage != "") { - m_script->setMainMenuErrorMessage(m_data->errormessage); - m_data->errormessage = ""; - } + m_script->setMainMenuData(&m_data->script_data); + m_data->script_data.errormessage = ""; if (!loadMainMenuScript()) { errorstream << "No future without mainmenu" << std::endl; @@ -219,10 +217,9 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, } run(); - } - catch(LuaError &e) { + } catch (LuaError &e) { errorstream << "MAINMENU ERROR: " << e.what() << std::endl; - m_data->errormessage = e.what(); + m_data->script_data.errormessage = e.what(); } m_menu->quitMenu(); diff --git a/src/guiMainMenu.h b/src/guiMainMenu.h index 34362dba6..711ad10f8 100644 --- a/src/guiMainMenu.h +++ b/src/guiMainMenu.h @@ -25,17 +25,19 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -enum -{ - TAB_SINGLEPLAYER=0, - TAB_MULTIPLAYER, - TAB_ADVANCED, - TAB_SETTINGS, - TAB_CREDITS +struct MainMenuDataForScript { + + MainMenuDataForScript() : + reconnect_requested(false) + {} + + // Whether the server has requested a reconnect + bool reconnect_requested; + + std::string errormessage; }; -struct MainMenuData -{ +struct MainMenuData { // Client options std::string servername; std::string serverdescription; @@ -43,19 +45,22 @@ struct MainMenuData std::string port; std::string name; std::string password; + // Whether to reconnect + bool do_reconnect; // Server options bool enable_public; int selected_world; bool simple_singleplayer_mode; - //error handling - std::string errormessage; + // Data to be passed to the script + MainMenuDataForScript script_data; + MainMenuData(): + do_reconnect(false), enable_public(false), selected_world(0), - simple_singleplayer_mode(false), - errormessage("") + simple_singleplayer_mode(false) {} }; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 15d5456fa..2133543d9 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -215,11 +215,28 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA; *pkt >> denyCode; - if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { + if (denyCode == SERVER_ACCESSDENIED_SHUTDOWN || + denyCode == SERVER_ACCESSDENIED_CRASH) { *pkt >> m_access_denied_reason; - } - else if (denyCode < SERVER_ACCESSDENIED_MAX) { + if (m_access_denied_reason == "") { + m_access_denied_reason = accessDeniedStrings[denyCode]; + } + u8 reconnect; + *pkt >> reconnect; + m_access_denied_reconnect = reconnect & 1; + } else if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { + *pkt >> m_access_denied_reason; + } else if (denyCode < SERVER_ACCESSDENIED_MAX) { m_access_denied_reason = accessDeniedStrings[denyCode]; + } else { + // Allow us to add new error messages to the + // protocol without raising the protocol version, if we want to. + // Until then (which may be never), this is outside + // of the defined protocol. + *pkt >> m_access_denied_reason; + if (m_access_denied_reason == "") { + m_access_denied_reason = "Unknown"; + } } } // 13/03/15 Legacy code from 0.4.12 and lesser. must stay 1 year diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index e4b566740..feb18e509 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -202,7 +202,8 @@ enum ToClientCommand TOCLIENT_ACCESS_DENIED = 0x0A, /* u8 reason - std::string custom reason (if reason == SERVER_ACCESSDENIED_CUSTOM_STRING) + std::string custom reason (if needed, otherwise "") + u8 (bool) reconnect */ TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks TOCLIENT_ADDNODE = 0x21, @@ -937,6 +938,8 @@ enum AccessDeniedCode { SERVER_ACCESSDENIED_ALREADY_CONNECTED, SERVER_ACCESSDENIED_SERVER_FAIL, SERVER_ACCESSDENIED_CUSTOM_STRING, + SERVER_ACCESSDENIED_SHUTDOWN, + SERVER_ACCESSDENIED_CRASH, SERVER_ACCESSDENIED_MAX, }; @@ -954,8 +957,10 @@ const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { "Too many users.", "Empty passwords are disallowed. Set a password and try again.", "Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", - "Server authention failed. This is likely a server error." + "Server authentication failed. This is likely a server error.", "", + "Server shutting down.", + "This server has experienced an internal error. You will now be disconnected." }; #endif diff --git a/src/player.cpp b/src/player.cpp index 668d490cc..0e8fd86d2 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -44,6 +44,7 @@ Player::Player(IGameDef *gamedef, const char *name): hp(PLAYER_MAX_HP), hurt_tilt_timer(0), hurt_tilt_strength(0), + protocol_version(0), peer_id(PEER_ID_INEXISTENT), keyPressed(0), // protected diff --git a/src/player.h b/src/player.h index c84cc1c92..3a336afc4 100644 --- a/src/player.h +++ b/src/player.h @@ -362,6 +362,7 @@ public: float hurt_tilt_timer; float hurt_tilt_strength; + u16 protocol_version; u16 peer_id; std::string inventory_formspec; diff --git a/src/script/cpp_api/s_mainmenu.cpp b/src/script/cpp_api/s_mainmenu.cpp index 0bb247fa0..7430b0f4f 100644 --- a/src/script/cpp_api/s_mainmenu.cpp +++ b/src/script/cpp_api/s_mainmenu.cpp @@ -21,15 +21,21 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_internal.h" #include "common/c_converter.h" -void ScriptApiMainMenu::setMainMenuErrorMessage(std::string errormessage) +void ScriptApiMainMenu::setMainMenuData(MainMenuDataForScript *data) { SCRIPTAPI_PRECHECKHEADER lua_getglobal(L, "gamedata"); int gamedata_idx = lua_gettop(L); lua_pushstring(L, "errormessage"); - lua_pushstring(L, errormessage.c_str()); + if (!data->errormessage.empty()) { + lua_pushstring(L, data->errormessage.c_str()); + } else { + lua_pushnil(L); + } lua_settable(L, gamedata_idx); + setboolfield(L, gamedata_idx, "reconnect_requested", + data->reconnect_requested); lua_pop(L, 1); } diff --git a/src/script/cpp_api/s_mainmenu.h b/src/script/cpp_api/s_mainmenu.h index 6994b578b..8d5895817 100644 --- a/src/script/cpp_api/s_mainmenu.h +++ b/src/script/cpp_api/s_mainmenu.h @@ -22,16 +22,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_base.h" #include "util/string.h" +#include "../guiMainMenu.h" -class ScriptApiMainMenu - : virtual public ScriptApiBase -{ +class ScriptApiMainMenu : virtual public ScriptApiBase { public: /** - * set gamedata.errormessage to inform lua of an error - * @param errormessage the error message + * Hand over MainMenuDataForScript to lua to inform lua of the content + * @param data the data */ - void setMainMenuErrorMessage(std::string errormessage); + void setMainMenuData(MainMenuDataForScript *data); /** * process events received from formspec diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index d209582e9..92311d6fc 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -114,15 +114,19 @@ int ModApiMainMenu::l_start(lua_State *L) bool valid = false; + MainMenuData *data = engine->m_data; - engine->m_data->selected_world = getIntegerData(L, "selected_world",valid) -1; - engine->m_data->simple_singleplayer_mode = getBoolData(L,"singleplayer",valid); - engine->m_data->name = getTextData(L,"playername"); - engine->m_data->password = getTextData(L,"password"); - engine->m_data->address = getTextData(L,"address"); - engine->m_data->port = getTextData(L,"port"); - engine->m_data->serverdescription = getTextData(L,"serverdescription"); - engine->m_data->servername = getTextData(L,"servername"); + data->selected_world = getIntegerData(L, "selected_world",valid) -1; + data->simple_singleplayer_mode = getBoolData(L,"singleplayer",valid); + data->do_reconnect = getBoolData(L, "do_reconnect", valid); + if (!data->do_reconnect) { + data->name = getTextData(L,"playername"); + data->password = getTextData(L,"password"); + data->address = getTextData(L,"address"); + data->port = getTextData(L,"port"); + } + data->serverdescription = getTextData(L,"serverdescription"); + data->servername = getTextData(L,"servername"); //close menu next time engine->m_startgame = true; diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 558cc0885..96c0327df 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -30,7 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc., // request_shutdown() int ModApiServer::l_request_shutdown(lua_State *L) { - getServer(L)->requestShutdown(); + const char *msg = lua_tolstring(L, 1, NULL); + bool reconnect = lua_toboolean(L, 2); + getServer(L)->requestShutdown(msg ? msg : "", reconnect); return 0; } diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index fd85a8975..e14bef043 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class ModApiServer : public ModApiBase { private: - // request_shutdown() + // request_shutdown([message], [reconnect]) static int l_request_shutdown(lua_State *L); // get_server_status() diff --git a/src/server.cpp b/src/server.cpp index 2d6de1c9d..cb7e35ecd 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -191,6 +191,7 @@ Server::Server( m_uptime(0), m_clients(&m_con), m_shutdown_requested(false), + m_shutdown_ask_reconnect(false), m_ignore_map_edit_events(false), m_ignore_map_edit_events_peer_id(0), m_next_sound_id(0) @@ -398,7 +399,17 @@ Server::~Server() m_env->saveLoadedPlayers(); infostream << "Server: Kicking players" << std::endl; - m_env->kickAllPlayers(g_settings->get("kick_msg_shutdown")); + std::string kick_msg; + bool reconnect = false; + if (getShutdownRequested()) { + reconnect = m_shutdown_ask_reconnect; + kick_msg = m_shutdown_msg; + } + if (kick_msg == "") { + kick_msg = g_settings->get("kick_msg_shutdown"); + } + m_env->kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN, + kick_msg, reconnect); infostream << "Server: Saving environment metadata" << std::endl; m_env->saveMeta(); @@ -502,7 +513,9 @@ void Server::step(float dtime) throw ServerError(async_err); } else { - m_env->kickAllPlayers(g_settings->get("kick_msg_crash")); + m_env->kickAllPlayers(SERVER_ACCESSDENIED_CRASH, + g_settings->get("kick_msg_crash"), + g_settings->getBool("ask_reconnect_on_crash")); errorstream << "UNRECOVERABLE error occurred. Stopping server. " << "Please fix the following error:" << std::endl << async_err << std::endl; @@ -1070,7 +1083,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone); if (client != NULL) { playername = client->getName(); - playersao = emergePlayer(playername.c_str(), peer_id); + playersao = emergePlayer(playername.c_str(), peer_id, client->net_proto_version); } } catch (std::exception &e) { m_clients.Unlock(); @@ -1523,16 +1536,18 @@ void Server::SendBreath(u16 peer_id, u16 breath) Send(&pkt); } -void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason) +void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, + const std::string &custom_reason, bool reconnect) { - DSTACK(__FUNCTION_NAME); + assert(reason < SERVER_ACCESSDENIED_MAX); NetworkPacket pkt(TOCLIENT_ACCESS_DENIED, 1, peer_id); - pkt << (u8) reason; - - if (reason == SERVER_ACCESSDENIED_CUSTOM_STRING) { + pkt << (u8)reason; + if (reason == SERVER_ACCESSDENIED_CUSTOM_STRING) pkt << custom_reason; - } + else if (reason == SERVER_ACCESSDENIED_SHUTDOWN || + reason == SERVER_ACCESSDENIED_CRASH) + pkt << custom_reason << (u8)reconnect; Send(&pkt); } @@ -2567,6 +2582,8 @@ void Server::RespawnPlayer(u16 peer_id) playersao->setPos(pos); } } + + void Server::DenySudoAccess(u16 peer_id) { DSTACK(__FUNCTION_NAME); @@ -2575,6 +2592,24 @@ void Server::DenySudoAccess(u16 peer_id) Send(&pkt); } + +void Server::DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode reason, + const std::string &str_reason, bool reconnect) +{ + if (proto_ver >= 25) { + SendAccessDenied(peer_id, reason, str_reason); + } else { + std::wstring wreason = utf8_to_wide( + reason == SERVER_ACCESSDENIED_CUSTOM_STRING ? str_reason : + accessDeniedStrings[(u8)reason]); + SendAccessDenied_Legacy(peer_id, wreason); + } + + m_clients.event(peer_id, CSE_SetDenied); + m_con.DisconnectPeer(peer_id); +} + + void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason) { DSTACK(__FUNCTION_NAME); @@ -3330,7 +3365,7 @@ v3f Server::findSpawnPos() return intToFloat(nodepos, BS); } -PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id) +PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version) { bool newplayer = false; @@ -3383,6 +3418,8 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id) getPlayerEffectivePrivs(player->getName()), isSingleplayer()); + player->protocol_version = proto_version; + /* Clean up old HUD elements from previous sessions */ player->clearHud(); diff --git a/src/server.h b/src/server.h index fbca05f26..5f3905005 100644 --- a/src/server.h +++ b/src/server.h @@ -244,8 +244,13 @@ public: { return m_shutdown_requested; } // request server to shutdown - inline void requestShutdown(void) - { m_shutdown_requested = true; } + inline void requestShutdown() { m_shutdown_requested = true; } + void requestShutdown(const std::string &msg, bool reconnect) + { + m_shutdown_requested = true; + m_shutdown_msg = msg; + m_shutdown_ask_reconnect = reconnect; + } // Returns -1 if failed, sound handle on success // Envlock @@ -366,6 +371,8 @@ public: void deletingPeer(con::Peer *peer, bool timeout); void DenySudoAccess(u16 peer_id); + void DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode reason, + const std::string &str_reason = "", bool reconnect = false); void DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason=""); void acceptAuth(u16 peer_id, bool forSudoMode); void DenyAccess_Legacy(u16 peer_id, const std::wstring &reason); @@ -390,7 +397,8 @@ private: void SendMovement(u16 peer_id); void SendHP(u16 peer_id, u8 hp); void SendBreath(u16 peer_id, u16 breath); - void SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason); + void SendAccessDenied(u16 peer_id, AccessDeniedCode reason, + const std::string &custom_reason, bool reconnect = false); void SendAccessDenied_Legacy(u16 peer_id, const std::wstring &reason); void SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target); void SendItemDef(u16 peer_id,IItemDefManager *itemdef, u16 protocol_version); @@ -490,7 +498,7 @@ private: Call with env and con locked. */ - PlayerSAO *emergePlayer(const char *name, u16 peer_id); + PlayerSAO *emergePlayer(const char *name, u16 peer_id, u16 proto_version); void handlePeerChanges(); @@ -596,6 +604,8 @@ private: */ bool m_shutdown_requested; + std::string m_shutdown_msg; + bool m_shutdown_ask_reconnect; /* Map edit event queue. Automatically receives all map edits. From 5dc9df8bbe3a3936489e1a9a66406ae0bead41c1 Mon Sep 17 00:00:00 2001 From: Novatux Date: Fri, 24 Jul 2015 12:03:56 +0200 Subject: [PATCH 234/670] Update my name --- builtin/mainmenu/tab_credits.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 1d758d58e..ff100dac7 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -37,7 +37,7 @@ tab_credits = { ",kahrl ,".. ",sapier,".. ",ShadowNinja ,".. - ",Nathanael Courant (Nore/Novatux) ,".. + ",Nathanael Courant (Nore/Ekdohibs) ,".. ",BlockMen,".. ",Craig Robbins (Zeno),".. ",Loic Blot (nerzhul/nrz),".. From 2eb329cc6362958537737c2a82ae593c7ba5d30a Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 24 Jul 2015 20:28:00 +0200 Subject: [PATCH 235/670] Bump protocol to 26 This was needed due to the TileDef serialisation changes. Originally it has been planned to also add utf-8 based chat to 26, but chat changes aren't final yet, so they are done in one change, after the release, and not two small ones, causing us having to be compliant to three versions of the packet. --- src/network/networkprotocol.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index feb18e509..82c82f79e 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -134,7 +134,7 @@ with this program; if not, write to the Free Software Foundation, Inc., Add TileDef tileable_horizontal, tileable_vertical flags */ -#define LATEST_PROTOCOL_VERSION 25 +#define LATEST_PROTOCOL_VERSION 26 // Server's supported network protocol range #define SERVER_PROTOCOL_VERSION_MIN 13 From aab7c83d0229c2c7aa3b60de3ca1b1a4eb326b55 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Fri, 24 Jul 2015 21:03:50 +0200 Subject: [PATCH 236/670] Remove some old dead code. Fix some Clang warnings in SRP (ng->N... will always evaluate to true. --- src/environment.cpp | 54 ----------------- src/noise.cpp | 47 --------------- src/util/srp.cpp | 4 +- src/voxel.cpp | 138 -------------------------------------------- 4 files changed, 2 insertions(+), 241 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 5d7321f60..cf0ebacfd 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1314,51 +1314,6 @@ u16 ServerEnvironment::addActiveObject(ServerActiveObject *object) return id; } -#if 0 -bool ServerEnvironment::addActiveObjectAsStatic(ServerActiveObject *obj) -{ - assert(obj); - - v3f objectpos = obj->getBasePosition(); - - // The block in which the object resides in - v3s16 blockpos_o = getNodeBlockPos(floatToInt(objectpos, BS)); - - /* - Update the static data - */ - - // Create new static object - std::string staticdata = obj->getStaticData(); - StaticObject s_obj(obj->getType(), objectpos, staticdata); - // Add to the block where the object is located in - v3s16 blockpos = getNodeBlockPos(floatToInt(objectpos, BS)); - // Get or generate the block - MapBlock *block = m_map->emergeBlock(blockpos); - - bool succeeded = false; - - if(block) - { - block->m_static_objects.insert(0, s_obj); - block->raiseModified(MOD_STATE_WRITE_AT_UNLOAD, - "addActiveObjectAsStatic"); - succeeded = true; - } - else{ - infostream<<"ServerEnvironment::addActiveObjectAsStatic: " - <<"Could not find or generate " - <<"a block for storing static object"<environmentDeletes()) - delete obj; - - return succeeded; -} -#endif - /* Finds out what new objects have been added to inside a radius around a position @@ -2182,15 +2137,6 @@ void ClientEnvironment::step(float dtime) v3f d = d_wanted.normalize() * dl; speed += d; - -#if 0 // old code - if(speed.X > lplayer->movement_liquid_fluidity + lplayer->movement_liquid_fluidity_smooth) speed.X -= lplayer->movement_liquid_fluidity_smooth; - if(speed.X < -lplayer->movement_liquid_fluidity - lplayer->movement_liquid_fluidity_smooth) speed.X += lplayer->movement_liquid_fluidity_smooth; - if(speed.Y > lplayer->movement_liquid_fluidity + lplayer->movement_liquid_fluidity_smooth) speed.Y -= lplayer->movement_liquid_fluidity_smooth; - if(speed.Y < -lplayer->movement_liquid_fluidity - lplayer->movement_liquid_fluidity_smooth) speed.Y += lplayer->movement_liquid_fluidity_smooth; - if(speed.Z > lplayer->movement_liquid_fluidity + lplayer->movement_liquid_fluidity_smooth) speed.Z -= lplayer->movement_liquid_fluidity_smooth; - if(speed.Z < -lplayer->movement_liquid_fluidity - lplayer->movement_liquid_fluidity_smooth) speed.Z += lplayer->movement_liquid_fluidity_smooth; -#endif } lplayer->setSpeed(speed); diff --git a/src/noise.cpp b/src/noise.cpp index 5b08eb942..443c405ce 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -192,14 +192,6 @@ inline float biLinearInterpolation( { float tx = easeCurve(x); float ty = easeCurve(y); -#if 0 - return ( - v00 * (1 - tx) * (1 - ty) + - v10 * tx * (1 - ty) + - v01 * (1 - tx) * ty + - v11 * tx * ty - ); -#endif float u = linearInterpolation(v00, v10, tx); float v = linearInterpolation(v01, v11, tx); return linearInterpolation(u, v, ty); @@ -225,18 +217,6 @@ float triLinearInterpolation( float tx = easeCurve(x); float ty = easeCurve(y); float tz = easeCurve(z); -#if 0 - return ( - v000 * (1 - tx) * (1 - ty) * (1 - tz) + - v100 * tx * (1 - ty) * (1 - tz) + - v010 * (1 - tx) * ty * (1 - tz) + - v110 * tx * ty * (1 - tz) + - v001 * (1 - tx) * (1 - ty) * tz + - v101 * tx * (1 - ty) * tz + - v011 * (1 - tx) * ty * tz + - v111 * tx * ty * tz - ); -#endif float u = biLinearInterpolationNoEase(v000, v100, v010, v110, tx, ty); float v = biLinearInterpolationNoEase(v001, v101, v011, v111, tx, ty); return linearInterpolation(u, v, tz); @@ -252,33 +232,6 @@ float triLinearInterpolationNoEase( return linearInterpolation(u, v, z); } - -#if 0 -float noise2d_gradient(float x, float y, int seed) -{ - // Calculate the integer coordinates - int x0 = (x > 0.0 ? (int)x : (int)x - 1); - int y0 = (y > 0.0 ? (int)y : (int)y - 1); - // Calculate the remaining part of the coordinates - float xl = x - (float)x0; - float yl = y - (float)y0; - // Calculate random cosine lookup table indices for the integer corners. - // They are looked up as unit vector gradients from the lookup table. - int n00 = (int)((noise2d(x0, y0, seed)+1)*8); - int n10 = (int)((noise2d(x0+1, y0, seed)+1)*8); - int n01 = (int)((noise2d(x0, y0+1, seed)+1)*8); - int n11 = (int)((noise2d(x0+1, y0+1, seed)+1)*8); - // Make a dot product for the gradients and the positions, to get the values - float s = dotProduct(cos_lookup[n00], cos_lookup[(n00+12)%16], xl, yl); - float u = dotProduct(-cos_lookup[n10], cos_lookup[(n10+12)%16], 1.-xl, yl); - float v = dotProduct(cos_lookup[n01], -cos_lookup[(n01+12)%16], xl, 1.-yl); - float w = dotProduct(-cos_lookup[n11], -cos_lookup[(n11+12)%16], 1.-xl, 1.-yl); - // Interpolate between the values - return biLinearInterpolation(s,u,v,w,xl,yl); -} -#endif - - float noise2d_gradient(float x, float y, int seed, bool eased) { // Calculate the integer coordinates diff --git a/src/util/srp.cpp b/src/util/srp.cpp index cc8bac6bb..6fafe8280 100644 --- a/src/util/srp.cpp +++ b/src/util/srp.cpp @@ -172,7 +172,7 @@ static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_ mpz_init(ng->N); mpz_init(ng->g); - if (!ng || !ng->N || !ng->g) + if (!ng) return 0; if (ng_type != SRP_NG_CUSTOM) { @@ -823,7 +823,7 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, mpz_init(usr->A); mpz_init(usr->S); - if (!usr->ng || !usr->a || !usr->A || !usr->S) + if (!usr->ng) goto err_exit; usr->username = (char*)malloc(ulen); diff --git a/src/voxel.cpp b/src/voxel.cpp index a5e0b09fe..87773b240 100644 --- a/src/voxel.cpp +++ b/src/voxel.cpp @@ -390,7 +390,6 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight, } } -#if 1 /* Goes recursively through the neighbours of the node. @@ -421,115 +420,6 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, unspreadLight(bank, j->first, j->second, light_sources, nodemgr); } } -#endif - -#if 0 -/* - Goes recursively through the neighbours of the node. - - Alters only transparent nodes. - - If the lighting of the neighbour is lower than the lighting of - the node was (before changing it to 0 at the step before), the - lighting of the neighbour is set to 0 and then the same stuff - repeats for the neighbour. - - The ending nodes of the routine are stored in light_sources. - This is useful when a light is removed. In such case, this - routine can be called for the light node and then again for - light_sources to re-light the area without the removed light. - - values of from_nodes are lighting values. -*/ -void VoxelManipulator::unspreadLight(enum LightBank bank, - core::map & from_nodes, - core::map & light_sources) -{ - v3s16 dirs[6] = { - v3s16(0,0,1), // back - v3s16(0,1,0), // top - v3s16(1,0,0), // right - v3s16(0,0,-1), // front - v3s16(0,-1,0), // bottom - v3s16(-1,0,0), // left - }; - - if(from_nodes.size() == 0) - return; - - core::map unlighted_nodes; - core::map::Iterator j; - j = from_nodes.getIterator(); - - for(; j.atEnd() == false; j++) - { - v3s16 pos = j.getNode()->getKey(); - - addArea(VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1))); - - //MapNode &n = m_data[m_area.index(pos)]; - - u8 oldlight = j.getNode()->getValue(); - - // Loop through 6 neighbors - for(u16 i=0; i<6; i++) - { - // Get the position of the neighbor node - v3s16 n2pos = pos + dirs[i]; - - u32 n2i = m_area.index(n2pos); - - if(m_flags[n2i] & VOXELFLAG_NO_DATA) - continue; - - MapNode &n2 = m_data[n2i]; - - /* - If the neighbor is dimmer than what was specified - as oldlight (the light of the previous node) - */ - if(n2.getLight(bank, nodemgr) < oldlight) - { - /* - And the neighbor is transparent and it has some light - */ - if(nodemgr->get(n2).light_propagates && n2.getLight(bank, nodemgr) != 0) - { - /* - Set light to 0 and add to queue - */ - - u8 current_light = n2.getLight(bank, nodemgr); - n2.setLight(bank, 0); - - unlighted_nodes.insert(n2pos, current_light); - - /* - Remove from light_sources if it is there - NOTE: This doesn't happen nearly at all - */ - /*if(light_sources.find(n2pos)) - { - std::cout<<"Removed from light_sources"< 0) - unspreadLight(bank, unlighted_nodes, light_sources); -} -#endif void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p, INodeDefManager *nodemgr) @@ -594,36 +484,9 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p, } } -#if 0 -/* - Lights neighbors of from_nodes, collects all them and then - goes on recursively. - - NOTE: This is faster on small areas but will overflow the - stack on large areas. Thus it is not used. -*/ -void VoxelManipulator::spreadLight(enum LightBank bank, - core::map & from_nodes) -{ - if(from_nodes.size() == 0) - return; - - core::map lighted_nodes; - core::map::Iterator j; - j = from_nodes.getIterator(); - - for(; j.atEnd() == false; j++) - { - v3s16 pos = j.getNode()->getKey(); - - spreadLight(bank, pos); - } -} -#endif const MapNode VoxelManipulator::ContentIgnoreNode = MapNode(CONTENT_IGNORE); -#if 1 /* Lights neighbors of from_nodes, collects all them and then goes on recursively. @@ -716,6 +579,5 @@ void VoxelManipulator::spreadLight(enum LightBank bank, if(!lighted_nodes.empty()) spreadLight(bank, lighted_nodes, nodemgr); } -#endif //END From 5bde7798e9c90904c0d38c75da1f2ce2d62922af Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 24 Jul 2015 21:38:40 +0200 Subject: [PATCH 237/670] Check output of mpz_set_str and fix leak on error condition Also add static identifier as upstream did --- src/util/sha256.c | 4 ++-- src/util/srp.cpp | 31 +++++++++++++++++++------------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/util/sha256.c b/src/util/sha256.c index 311aac4a8..4c2bb71a8 100644 --- a/src/util/sha256.c +++ b/src/util/sha256.c @@ -15,8 +15,8 @@ const char SHA256_version[] = "SHA-256" OPENSSL_VERSION_PTEXT; /* mem_clr.c */ -unsigned char cleanse_ctr = 0; -void OPENSSL_cleanse(void *ptr, size_t len) +unsigned static char cleanse_ctr = 0; +static void OPENSSL_cleanse(void *ptr, size_t len) { unsigned char *p = ptr; size_t loop = len, ctr = cleanse_ctr; diff --git a/src/util/srp.cpp b/src/util/srp.cpp index 6fafe8280..0d3ddf278 100644 --- a/src/util/srp.cpp +++ b/src/util/srp.cpp @@ -166,6 +166,15 @@ static struct NGHex global_Ng_constants[] = { }; +static void delete_ng(NGConstant *ng) +{ + if (ng) { + mpz_clear(ng->N); + mpz_clear(ng->g); + free(ng); + } +} + static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_hex ) { NGConstant *ng = (NGConstant *) malloc(sizeof(NGConstant)); @@ -180,22 +189,18 @@ static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_ g_hex = global_Ng_constants[ ng_type ].g_hex; } - mpz_set_str(ng->N, n_hex, 16); - mpz_set_str(ng->g, g_hex, 16); + int rv = 0; + rv = mpz_set_str(ng->N, n_hex, 16); + rv = rv | mpz_set_str(ng->g, g_hex, 16); + + if (rv) { + delete_ng(ng); + return 0; + } return ng; } -static void delete_ng( NGConstant *ng ) -{ - if (ng) { - mpz_clear(ng->N); - mpz_clear(ng->g); - free(ng); - } -} - - typedef union { @@ -849,6 +854,8 @@ err_exit: mpz_clear(usr->a); mpz_clear(usr->A); mpz_clear(usr->S); + if (usr->ng) + delete_ng(usr->ng); if (usr->username) free(usr->username); if (usr->username_verifier) From 288302a1f0db8c2c48d8b3a24db9889aaaabcd51 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 24 Jul 2015 23:11:19 +0200 Subject: [PATCH 238/670] Fix documentation of dedicated_server_loop --- src/server.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server.h b/src/server.h index 5f3905005..28909611b 100644 --- a/src/server.h +++ b/src/server.h @@ -665,9 +665,9 @@ private: /* Runs a simple dedicated server loop. - Shuts down when run is set to false. + Shuts down when kill is set to true. */ -void dedicated_server_loop(Server &server, bool &run); +void dedicated_server_loop(Server &server, bool &kill); #endif From a8c5841140c23f246adbc58f7c73195c01253697 Mon Sep 17 00:00:00 2001 From: kilbith Date: Fri, 24 Jul 2015 21:21:24 +0200 Subject: [PATCH 239/670] Remove drivers dropdown in the settings tab --- builtin/mainmenu/tab_settings.lua | 40 ------------------------------- 1 file changed, 40 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index 58ef4c540..de701e904 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -113,18 +113,6 @@ local function antialiasing_fname_to_name(fname) return "0" end -local function video_driver_fname_to_name(selected_driver) - local video_drivers = core.get_video_drivers() - - for i=1, #video_drivers do - if selected_driver == video_drivers[i].friendly_name then - return video_drivers[i].name:lower() - end - end - - return "" -end - local function dlg_confirm_reset_formspec(data) local retval = "size[8,3]" .. @@ -213,23 +201,6 @@ local function scrollbar_to_gui_scale(value) end local function formspec(tabview, name, tabdata) - local video_drivers = core.get_video_drivers() - local current_video_driver = core.setting_get("video_driver"):lower() - - local driver_formspec_string = "" - local driver_current_idx = 0 - - for i=2, #video_drivers do - driver_formspec_string = driver_formspec_string .. video_drivers[i].friendly_name - if i ~= #video_drivers then - driver_formspec_string = driver_formspec_string .. "," - end - - if current_video_driver == video_drivers[i].name:lower() then - driver_current_idx = i - 1 - end - end - local tab_string = "box[0,0;3.5,4.0;#999999]" .. "checkbox[0.25,0;cb_smooth_lighting;".. fgettext("Smooth Lighting") @@ -247,7 +218,6 @@ local function formspec(tabview, name, tabdata) "dropdown[0.25,3.2;3.3;dd_leaves_style;" .. leaves_style[1][1] .. ";" .. getLeavesStyleSettingIndex() .. "]" .. "box[3.75,0;3.75,3.45;#999999]" .. - "box[3.75,0;3.75,4.7;#999999]" .. "label[3.85,0.1;".. fgettext("Texturing:") .. "]".. "dropdown[3.85,0.55;3.85;dd_filters;" .. filters[1][1] .. ";" .. getFilterSettingIndex() .. "]" .. @@ -256,11 +226,6 @@ local function formspec(tabview, name, tabdata) "label[3.85,2.15;".. fgettext("Antialiasing:") .. "]".. "dropdown[3.85,2.6;3.85;dd_antialiasing;" .. antialiasing[1][1] .. ";" .. getAntialiasingSettingIndex() .. "]" .. - "label[3.85,3.4;".. fgettext("Rendering:") .. "]".. - "dropdown[3.85,3.85;3.85;dd_video_driver;" - .. driver_formspec_string .. ";" .. driver_current_idx .. "]" .. - "tooltip[dd_video_driver;" .. - fgettext("Restart minetest for driver change to take effect") .. "]" .. "box[7.75,0;4,4;#999999]" .. "checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";" .. dump(core.setting_getbool("enable_shaders")) .. "]" @@ -423,11 +388,6 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("leaves_style", leaves_style[2][1]) ddhandled = true end - if fields["dd_video_driver"] then - core.setting_set("video_driver", - video_driver_fname_to_name(fields["dd_video_driver"])) - ddhandled = true - end if fields["dd_filters"] == dd_filter_labels[1] then core.setting_set("bilinear_filter", "false") core.setting_set("trilinear_filter", "false") From 4e6971e59358b40956bb4c25f8f85e4cc018dbec Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Sat, 25 Jul 2015 11:56:24 +0200 Subject: [PATCH 240/670] Cleanup server addparticle(spawner) by merge two identical functions. --- src/script/lua_api/l_particles.cpp | 58 ++++++------------- src/server.cpp | 90 ++++++++++-------------------- src/server.h | 23 ++------ 3 files changed, 52 insertions(+), 119 deletions(-) diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp index d99d8f6a9..2532b2b08 100644 --- a/src/script/lua_api/l_particles.cpp +++ b/src/script/lua_api/l_particles.cpp @@ -96,14 +96,8 @@ int ModApiParticles::l_add_particle(lua_State *L) texture = getstringfield_default(L, 1, "texture", ""); playername = getstringfield_default(L, 1, "playername", ""); } - if (playername == "") { // spawn for all players - getServer(L)->spawnParticleAll(pos, vel, acc, + getServer(L)->spawnParticle(playername, pos, vel, acc, expirationtime, size, collisiondetection, vertical, texture); - } else { - getServer(L)->spawnParticle(playername.c_str(), - pos, vel, acc, expirationtime, - size, collisiondetection, vertical, texture); - } return 1; } @@ -195,30 +189,18 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) texture = getstringfield_default(L, 1, "texture", ""); playername = getstringfield_default(L, 1, "playername", ""); } - if (playername == "") { //spawn for all players - u32 id = getServer(L)->addParticleSpawnerAll( amount, time, - minpos, maxpos, - minvel, maxvel, - minacc, maxacc, - minexptime, maxexptime, - minsize, maxsize, - collisiondetection, - vertical, - texture); - lua_pushnumber(L, id); - } else { - u32 id = getServer(L)->addParticleSpawner(playername.c_str(), - amount, time, - minpos, maxpos, - minvel, maxvel, - minacc, maxacc, - minexptime, maxexptime, - minsize, maxsize, - collisiondetection, - vertical, - texture); - lua_pushnumber(L, id); - } + + u32 id = getServer(L)->addParticleSpawner(amount, time, + minpos, maxpos, + minvel, maxvel, + minacc, maxacc, + minexptime, maxexptime, + minsize, maxsize, + collisiondetection, + vertical, + texture, playername); + lua_pushnumber(L, id); + return 1; } @@ -228,16 +210,12 @@ int ModApiParticles::l_delete_particlespawner(lua_State *L) { // Get parameters u32 id = luaL_checknumber(L, 1); + std::string playername = ""; + if (lua_gettop(L) == 2) { + playername = luaL_checkstring(L, 2); + } - if (lua_gettop(L) == 2) // only delete for one player - { - const char *playername = luaL_checkstring(L, 2); - getServer(L)->deleteParticleSpawner(playername, id); - } - else // delete for all players - { - getServer(L)->deleteParticleSpawnerAll(id); - } + getServer(L)->deleteParticleSpawner(playername, id); return 1; } diff --git a/src/server.cpp b/src/server.cpp index cb7e35ecd..33cba17e5 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3067,34 +3067,36 @@ void Server::notifyPlayers(const std::wstring &msg) SendChatMessage(PEER_ID_INEXISTENT,msg); } -void Server::spawnParticle(const char *playername, v3f pos, +void Server::spawnParticle(const std::string &playername, v3f pos, v3f velocity, v3f acceleration, float expirationtime, float size, bool collisiondetection, bool vertical, const std::string &texture) { - Player *player = m_env->getPlayer(playername); - if(!player) - return; - SendSpawnParticle(player->peer_id, pos, velocity, acceleration, + u16 peer_id = PEER_ID_INEXISTENT; + if (playername != "") { + Player* player = m_env->getPlayer(playername.c_str()); + if (!player) + return; + peer_id = player->peer_id; + } + + SendSpawnParticle(peer_id, pos, velocity, acceleration, expirationtime, size, collisiondetection, vertical, texture); } -void Server::spawnParticleAll(v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, - bool collisiondetection, bool vertical, const std::string &texture) -{ - SendSpawnParticle(PEER_ID_INEXISTENT,pos, velocity, acceleration, - expirationtime, size, collisiondetection, vertical, texture); -} - -u32 Server::addParticleSpawner(const char *playername, u16 amount, float spawntime, +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 vertical, const std::string &texture) + bool collisiondetection, bool vertical, const std::string &texture, + const std::string &playername) { - Player *player = m_env->getPlayer(playername); - if(!player) - return -1; + u16 peer_id = PEER_ID_INEXISTENT; + if (playername != "") { + Player* player = m_env->getPlayer(playername.c_str()); + if (!player) + return -1; + peer_id = player->peer_id; + } u32 id = 0; for(;;) // look for unused particlespawner id @@ -3109,7 +3111,7 @@ u32 Server::addParticleSpawner(const char *playername, u16 amount, float spawnti } } - SendAddParticleSpawner(player->peer_id, amount, spawntime, + SendAddParticleSpawner(peer_id, amount, spawntime, minpos, maxpos, minvel, maxvel, minacc, maxacc, minexptime, maxexptime, minsize, maxsize, collisiondetection, vertical, texture, id); @@ -3117,55 +3119,21 @@ u32 Server::addParticleSpawner(const char *playername, u16 amount, float spawnti return id; } -u32 Server::addParticleSpawnerAll(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 vertical, const std::string &texture) +void Server::deleteParticleSpawner(const std::string &playername, u32 id) { - u32 id = 0; - for(;;) // look for unused particlespawner id - { - id++; - if (std::find(m_particlespawner_ids.begin(), - m_particlespawner_ids.end(), id) - == m_particlespawner_ids.end()) - { - m_particlespawner_ids.push_back(id); - break; - } + u16 peer_id = PEER_ID_INEXISTENT; + if (playername != "") { + Player* player = m_env->getPlayer(playername.c_str()); + if (!player) + return; + peer_id = player->peer_id; } - SendAddParticleSpawner(PEER_ID_INEXISTENT, amount, spawntime, - minpos, maxpos, minvel, maxvel, minacc, maxacc, - minexptime, maxexptime, minsize, maxsize, - collisiondetection, vertical, texture, id); - - return id; -} - -void Server::deleteParticleSpawner(const char *playername, u32 id) -{ - Player *player = m_env->getPlayer(playername); - if(!player) - return; - m_particlespawner_ids.erase( std::remove(m_particlespawner_ids.begin(), m_particlespawner_ids.end(), id), m_particlespawner_ids.end()); - SendDeleteParticleSpawner(player->peer_id, id); -} - -void Server::deleteParticleSpawnerAll(u32 id) -{ - m_particlespawner_ids.erase( - std::remove(m_particlespawner_ids.begin(), - m_particlespawner_ids.end(), id), - m_particlespawner_ids.end()); - SendDeleteParticleSpawner(PEER_ID_INEXISTENT, id); + SendDeleteParticleSpawner(peer_id, id); } Inventory* Server::createDetachedInventory(const std::string &name) diff --git a/src/server.h b/src/server.h index 28909611b..d16230967 100644 --- a/src/server.h +++ b/src/server.h @@ -269,34 +269,21 @@ public: void notifyPlayer(const char *name, const std::wstring &msg); void notifyPlayers(const std::wstring &msg); - void spawnParticle(const char *playername, + void spawnParticle(const std::string &playername, v3f pos, v3f velocity, v3f acceleration, float expirationtime, float size, bool collisiondetection, bool vertical, const std::string &texture); - void spawnParticleAll(v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, - bool collisiondetection, bool vertical, const std::string &texture); - - u32 addParticleSpawner(const char *playername, - u16 amount, float spawntime, + 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 vertical, const std::string &texture); + bool collisiondetection, bool vertical, const std::string &texture, + const std::string &playername); - u32 addParticleSpawnerAll(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 vertical, const std::string &texture); - - void deleteParticleSpawner(const char *playername, u32 id); - void deleteParticleSpawnerAll(u32 id); + void deleteParticleSpawner(const std::string &playername, u32 id); // Creates or resets inventory Inventory* createDetachedInventory(const std::string &name); From fa1096ec49ee9b2b8ca85ff272930812e657b3c5 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 25 Jul 2015 07:54:56 +0200 Subject: [PATCH 241/670] Fix minetest.get_(all)_craft_recipe(s) regression Since 03e0dd33a847a83d975282c6caf6b926306e7b57 the calls didn't return an output count for the recipes. --- src/script/lua_api/l_craft.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/script/lua_api/l_craft.cpp b/src/script/lua_api/l_craft.cpp index f59487727..391a0133d 100644 --- a/src/script/lua_api/l_craft.cpp +++ b/src/script/lua_api/l_craft.cpp @@ -332,7 +332,7 @@ int ModApiCraft::l_get_craft_result(lua_State *L) } -void push_craft_recipe(lua_State *L, IGameDef *gdef, +static void push_craft_recipe(lua_State *L, IGameDef *gdef, const CraftDefinition *recipe, const CraftOutput &tmpout) { @@ -363,11 +363,11 @@ void push_craft_recipe(lua_State *L, IGameDef *gdef, lua_pushstring(L, "unknown"); } lua_setfield(L, -2, "type"); - lua_pushstring(L, tmpout.item.c_str()); + lua_pushstring(L, output.item.c_str()); lua_setfield(L, -2, "output"); } -void push_craft_recipes(lua_State *L, IGameDef *gdef, +static void push_craft_recipes(lua_State *L, IGameDef *gdef, const std::vector &recipes, const CraftOutput &output) { From ffd0ef16c41e85dc024760855bc54f116cfeebcf Mon Sep 17 00:00:00 2001 From: "jeanpatrick.guerrero@gmail.com" Date: Sat, 25 Jul 2015 12:40:01 +0200 Subject: [PATCH 242/670] Fix FSAA dropdown option reset after changing another dropdown option --- builtin/mainmenu/tab_settings.lua | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index de701e904..c17a39432 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -68,9 +68,9 @@ local dd_antialiasing_labels = { } local antialiasing = { - {dd_antialiasing_labels[1]..","..dd_antialiasing_labels[2]..",".. - dd_antialiasing_labels[3]..","..dd_antialiasing_labels[4]}, - {"0", "2", "4", "8"} + {dd_antialiasing_labels[1]..","..dd_antialiasing_labels[2]..",".. + dd_antialiasing_labels[3]..","..dd_antialiasing_labels[4]}, + {"0", "2", "4", "8"} } local function getFilterSettingIndex() @@ -95,7 +95,7 @@ end local function getAntialiasingSettingIndex() local antialiasing_setting = core.setting_get("fsaa") - for i=1, #(antialiasing[2]) do + for i = 1, #(antialiasing[2]) do if antialiasing_setting == antialiasing[2][i] then return i end @@ -104,13 +104,12 @@ local function getAntialiasingSettingIndex() end local function antialiasing_fname_to_name(fname) - for i=1, #(dd_antialiasing_labels) do - if fname == dd_antialiasing_labels[i] then - return antialiasing[2][i] - end - end - - return "0" + for i = 1, #(dd_antialiasing_labels) do + if fname == dd_antialiasing_labels[i] then + return antialiasing[2][i] + end + end + return 0 end local function dlg_confirm_reset_formspec(data) @@ -418,8 +417,11 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("anisotropic_filter", "true") ddhandled = true end - core.setting_set("fsaa", - antialiasing_fname_to_name(fields["dd_antialiasing"])) + if fields["dd_antialiasing"] then + core.setting_set("fsaa", + antialiasing_fname_to_name(fields["dd_antialiasing"])) + ddhandled = true + end return ddhandled end From 454a29037061ba62d89af41ecae23b4424f41ea5 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 22 Jul 2015 10:11:34 +0200 Subject: [PATCH 243/670] Fix MSVC number conversion warning --- src/script/lua_api/l_mapgen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 2d67e2f29..bf5e3631e 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -674,7 +674,7 @@ int ModApiMapgen::l_set_gen_notify(lua_State *L) lua_pushnil(L); while (lua_next(L, 2)) { if (lua_isnumber(L, -1)) - emerge->gen_notify_on_deco_ids.insert(lua_tonumber(L, -1)); + emerge->gen_notify_on_deco_ids.insert((u32)lua_tonumber(L, -1)); lua_pop(L, 1); } } From c30a2d68541b6ff451d92709478b4e37cac86447 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 11 Jul 2015 02:24:00 +0200 Subject: [PATCH 244/670] Add AreaStore data structure --- README.txt | 3 + build/android/jni/Android.mk | 2 + doc/lua_api.txt | 22 ++ src/CMakeLists.txt | 22 ++ src/areastore.cpp | 343 ++++++++++++++++++++++++ src/areastore.h | 196 ++++++++++++++ src/cmake_config.h.in | 1 + src/script/lua_api/CMakeLists.txt | 1 + src/script/lua_api/l_areastore.cpp | 401 +++++++++++++++++++++++++++++ src/script/lua_api/l_areastore.h | 70 +++++ src/script/lua_api/l_util.cpp | 1 + src/script/scripting_game.cpp | 2 + src/unittest/CMakeLists.txt | 1 + src/unittest/test_areastore.cpp | 129 ++++++++++ src/util/container.h | 69 +++++ 15 files changed, 1263 insertions(+) create mode 100644 src/areastore.cpp create mode 100644 src/areastore.h create mode 100644 src/script/lua_api/l_areastore.cpp create mode 100644 src/script/lua_api/l_areastore.h create mode 100644 src/unittest/test_areastore.cpp diff --git a/README.txt b/README.txt index 5a17b2a9d..ca15222e5 100644 --- a/README.txt +++ b/README.txt @@ -164,6 +164,7 @@ ENABLE_GETTEXT - Build with Gettext; Allows using translations ENABLE_GLES - Search for Open GLES headers & libraries and use them ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend (faster than SQLite3) ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend +ENABLE_SPATIAL - Build with LibSpatial; Speeds up AreaStores ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua) ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp) @@ -197,6 +198,8 @@ LEVELDB_LIBRARY - Only when building with LevelDB; path to lible LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll REDIS_INCLUDE_DIR - Only when building with Redis support; directory that contains hiredis.h REDIS_LIBRARY - Only when building with Redis support; path to libhiredis.a/libhiredis.so +SPATIAL_INCLUDE_DIR - Only if you want to build with LibSpatial; directory that contains spatialindex/SpatialIndex.h +SPATIAL_LIBRARY - Only if you want to build with LibSpatial; path to libspatialindex_c.so LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index e606ccfc9..332677b84 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -112,6 +112,7 @@ LOCAL_C_INCLUDES := \ deps/sqlite/ LOCAL_SRC_FILES := \ + jni/src/areastore.cpp \ jni/src/ban.cpp \ jni/src/camera.cpp \ jni/src/cavegen.cpp \ @@ -283,6 +284,7 @@ LOCAL_SRC_FILES += \ 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_base.cpp \ jni/src/script/lua_api/l_craft.cpp \ jni/src/script/lua_api/l_env.cpp \ diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 75bbbdb07..ab059e182 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2602,6 +2602,28 @@ An `InvRef` is a reference to an inventory. * `get_location()`: returns a location compatible to `minetest.get_inventory(location)` * returns `{type="undefined"}` in case location is not known +### `AreaStore` +A fast access data structure to store areas, and find areas near a given position or area. +Every area has a `data` string attribute to store additional information. +You can create an empty `AreaStore` by calling `AreaStore()`, or `AreaStore(type_name)`. +If you chose the parameter-less constructor, a fast implementation will be automatically chosen for you. + +#### Methods +* `get_area(id, include_borders, include_data)`: returns the area with the id `id`. (optional) Boolean values `include_borders` and `include_data` control what's copied. +* `get_areas_for_pos(pos, include_borders, include_data)`: returns all areas that contain the position `pos`. (optional) Boolean values `include_borders` and `include_data` control what's copied. +* `get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data)`: returns all areas that contain all nodes inside the area specified by `edge1` and `edge2` (inclusive). If `accept_overlap` is true, also areas are returned that have nodes in common with the specified area. (optional) Boolean values `include_borders` and `include_data` control what's copied. +* `insert_area(edge1, edge2, data)`: inserts an area into the store. Returns the id if successful, nil otherwise. The (inclusive) positions `edge1` and `edge2` describe the area, `data` +is a string stored with the area. +* `reserve(count)`: reserves resources for at most `count` many contained areas. Only needed for efficiency, and only some implementations profit. +* `remove_area(id)`: removes the area with the given id from the store, returns success. +* `set_cache_params(params)`: sets params for the included prefiltering cache. Calling invalidates the cache, so that its elements have to be newly generated. + * `params`: + { + enabled = boolean, -- whether to enable, default true + block_radius = number, -- the radius (in nodes) of the areas the cache generates prefiltered lists for, minimum 16, default 64 + limit = number, -- the cache's size, minimum 20, default 1000 + } + ### `ItemStack` An `ItemStack` is a stack of items. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0ed0b8015..614e81908 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -180,6 +180,21 @@ endif(ENABLE_REDIS) find_package(SQLite3 REQUIRED) find_package(Json REQUIRED) +OPTION(ENABLE_SPATIAL "Enable SpatialIndex AreaStore backend" TRUE) +set(USE_SPATIAL FALSE) + +if(ENABLE_SPATIAL) + find_library(SPATIAL_LIBRARY spatialindex) + find_path(SPATIAL_INCLUDE_DIR spatialindex/SpatialIndex.h) + if(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) + set(USE_SPATIAL TRUE) + message(STATUS "SpatialIndex AreaStore backend enabled.") + include_directories(${SPATIAL_INCLUDE_DIR}) + else(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) + message(STATUS "SpatialIndex not found!") + endif(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) +endif(ENABLE_SPATIAL) + if(NOT MSVC) set(USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++") @@ -289,6 +304,7 @@ add_subdirectory(unittest) add_subdirectory(util) set(common_SRCS + areastore.cpp ban.cpp cavegen.cpp clientiface.cpp @@ -532,6 +548,9 @@ if(BUILD_CLIENT) if (USE_REDIS) target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY}) endif() + if (USE_SPATIAL) + target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY}) + endif() endif(BUILD_CLIENT) @@ -556,6 +575,9 @@ if(BUILD_SERVER) if (USE_REDIS) target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY}) endif() + if (USE_SPATIAL) + target_link_libraries(${PROJECT_NAME}server ${SPATIAL_LIBRARY}) + endif() if(USE_CURL) target_link_libraries( ${PROJECT_NAME}server diff --git a/src/areastore.cpp b/src/areastore.cpp new file mode 100644 index 000000000..f9362c4a6 --- /dev/null +++ b/src/areastore.cpp @@ -0,0 +1,343 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "areastore.h" +#include "util/serialize.h" +#include "util/container.h" + +#if USE_SPATIAL + #include + #include + #include +#endif + +#define AST_SMALLER_EQ_AS(p, q) (((p).X <= (q).X) && ((p).Y <= (q).Y) && ((p).Z <= (q).Z)) + +#define AST_OVERLAPS_IN_DIMENSION(amine, amaxe, b, d) \ + (!(((amine).d > (b)->maxedge.d) || ((amaxe).d < (b)->minedge.d))) + +#define AST_CONTAINS_PT(a, p) (AST_SMALLER_EQ_AS((a)->minedge, (p)) && \ + AST_SMALLER_EQ_AS((p), (a)->maxedge)) + +#define AST_CONTAINS_AREA(amine, amaxe, b) \ + (AST_SMALLER_EQ_AS((amine), (b)->minedge) \ + && AST_SMALLER_EQ_AS((b)->maxedge, (amaxe))) + +#define AST_AREAS_OVERLAP(amine, amaxe, b) \ + (AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), X) && \ + AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), Y) && \ + AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), Z)) + +u16 AreaStore::size() const +{ + return areas_map.size(); +} + +u32 AreaStore::getFreeId(v3s16 minedge, v3s16 maxedge) +{ + int keep_on = 100; + while (keep_on--) { + m_highest_id++; + // Handle overflows, we dont want to return 0 + if (m_highest_id == AREA_ID_INVALID) + m_highest_id++; + if (areas_map.find(m_highest_id) == areas_map.end()) + return m_highest_id; + } + // search failed + return AREA_ID_INVALID; +} + +const Area *AreaStore::getArea(u32 id) const +{ + const Area *res = NULL; + std::map::const_iterator itr = areas_map.find(id); + if (itr != areas_map.end()) { + res = &itr->second; + } + return res; +} + +#if 0 +Currently, serialisation is commented out. This is because of multiple reasons: +1. Why do we store the areastore into a file, why not into the database? +2. We don't use libspatial's serialisation, but we should, or perhaps not, because + it would remove the ability to switch. Perhaps write migration routines? +3. Various things need fixing, e.g. the size is serialized as + c++ implementation defined size_t +bool AreaStore::deserialize(std::istream &is) +{ + u8 ver = readU8(is); + if (ver != 1) + return false; + u16 count_areas = readU16(is); + for (u16 i = 0; i < count_areas; i++) { + // deserialize an area + Area a; + a.id = readU32(is); + a.minedge = readV3S16(is); + a.maxedge = readV3S16(is); + a.datalen = readU16(is); + a.data = new char[a.datalen]; + is.read((char *) a.data, a.datalen); + insertArea(a); + } + return true; +} + + +static bool serialize_area(void *ostr, Area *a) +{ + std::ostream &os = *((std::ostream *) ostr); + writeU32(os, a->id); + writeV3S16(os, a->minedge); + writeV3S16(os, a->maxedge); + writeU16(os, a->datalen); + os.write(a->data, a->datalen); + + return false; +} + + +void AreaStore::serialize(std::ostream &os) const +{ + // write initial data + writeU8(os, 1); // serialisation version + writeU16(os, areas_map.size()); //DANGER: not platform independent + forEach(&serialize_area, &os); +} + +#endif + +void AreaStore::invalidateCache() +{ + if (cache_enabled) { + m_res_cache.invalidate(); + } +} + +void AreaStore::setCacheParams(bool enabled, u8 block_radius, size_t limit) +{ + cache_enabled = enabled; + m_cacheblock_radius = MYMAX(block_radius, 16); + m_res_cache.setLimit(MYMAX(limit, 20)); + invalidateCache(); +} + +void AreaStore::cacheMiss(void *data, const v3s16 &mpos, std::vector *dest) +{ + AreaStore *as = (AreaStore *)data; + u8 r = as->m_cacheblock_radius; + + // get the points at the edges of the mapblock + v3s16 minedge(mpos.X * r, mpos.Y * r, mpos.Z * r); + v3s16 maxedge( + minedge.X + r - 1, + minedge.Y + r - 1, + minedge.Z + r - 1); + + as->getAreasInArea(dest, minedge, maxedge, true); + + /* infostream << "Cache miss with " << dest->size() << " areas, between (" + << minedge.X << ", " << minedge.Y << ", " << minedge.Z + << ") and (" + << maxedge.X << ", " << maxedge.Y << ", " << maxedge.Z + << ")" << std::endl; // */ +} + +void AreaStore::getAreasForPos(std::vector *result, v3s16 pos) +{ + if (cache_enabled) { + v3s16 mblock = getContainerPos(pos, m_cacheblock_radius); + const std::vector *pre_list = m_res_cache.lookupCache(mblock); + + size_t s_p_l = pre_list->size(); + for (size_t i = 0; i < s_p_l; i++) { + Area *b = (*pre_list)[i]; + if (AST_CONTAINS_PT(b, pos)) { + result->push_back(b); + } + } + } else { + return getAreasForPosImpl(result, pos); + } +} + + +//// +// VectorAreaStore +//// + + +void VectorAreaStore::insertArea(const Area &a) +{ + areas_map[a.id] = a; + m_areas.push_back(&(areas_map[a.id])); + invalidateCache(); +} + +void VectorAreaStore::reserve(size_t count) +{ + m_areas.reserve(count); +} + +bool VectorAreaStore::removeArea(u32 id) +{ + std::map::iterator itr = areas_map.find(id); + if (itr != areas_map.end()) { + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + Area * b = m_areas[i]; + if (b->id == id) { + areas_map.erase(itr); + m_areas.erase(m_areas.begin() + i); + invalidateCache(); + return true; + } + } + // we should never get here, it means we did find it in map, + // but not in the vector + } + return false; +} + +void VectorAreaStore::getAreasForPosImpl(std::vector *result, v3s16 pos) +{ + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + Area *b = m_areas[i]; + if (AST_CONTAINS_PT(b, pos)) { + result->push_back(b); + } + } +} + +void VectorAreaStore::getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap) +{ + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + Area * b = m_areas[i]; + if (accept_overlap ? AST_AREAS_OVERLAP(minedge, maxedge, b) : + AST_CONTAINS_AREA(minedge, maxedge, b)) { + result->push_back(b); + } + } +} + +#if 0 +bool VectorAreaStore::forEach(bool (*callback)(void *args, Area *a), void *args) const +{ + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + if (callback(args, m_areas[i])) { + return true; + } + } + return false; +} +#endif + +#if USE_SPATIAL + +static inline SpatialIndex::Region get_spatial_region(const v3s16 minedge, + const v3s16 maxedge) +{ + const double p_low[] = {(double)minedge.X, + (double)minedge.Y, (double)minedge.Z}; + const double p_high[] = {(double)maxedge.X, (double)maxedge.Y, + (double)maxedge.Z}; + return SpatialIndex::Region(p_low, p_high, 3); +} + +static inline SpatialIndex::Point get_spatial_point(const v3s16 pos) +{ + const double p[] = {(double)pos.X, (double)pos.Y, (double)pos.Z}; + return SpatialIndex::Point(p, 3); +} + + +void SpatialAreaStore::insertArea(const Area &a) +{ + areas_map[a.id] = a; + m_tree->insertData(0, NULL, get_spatial_region(a.minedge, a.maxedge), a.id); + invalidateCache(); +} + +bool SpatialAreaStore::removeArea(u32 id) +{ + std::map::iterator itr = areas_map.find(id); + if (itr != areas_map.end()) { + Area *a = &itr->second; + bool result = m_tree->deleteData(get_spatial_region(a->minedge, + a->maxedge), id); + invalidateCache(); + return result; + } else { + return false; + } +} + +void SpatialAreaStore::getAreasForPosImpl(std::vector *result, v3s16 pos) +{ + VectorResultVisitor visitor(result, this); + m_tree->pointLocationQuery(get_spatial_point(pos), visitor); +} + +void SpatialAreaStore::getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap) +{ + VectorResultVisitor visitor(result, this); + if (accept_overlap) { + m_tree->intersectsWithQuery(get_spatial_region(minedge, maxedge), + visitor); + } else { + m_tree->containsWhatQuery(get_spatial_region(minedge, maxedge), visitor); + } +} + +#if 0 +bool SpatialAreaStore::forEach(bool (*callback)(void *args, Area *a), void *args) const +{ + // TODO ?? (this is only needed for serialisation, but libspatial has its own serialisation) + return false; +} +#endif + +SpatialAreaStore::~SpatialAreaStore() +{ + delete m_tree; +} + +SpatialAreaStore::SpatialAreaStore() +{ + m_storagemanager = + SpatialIndex::StorageManager::createNewMemoryStorageManager(); + SpatialIndex::id_type id; + m_tree = SpatialIndex::RTree::createNewRTree( + *m_storagemanager, + .7, // Fill factor + 100, // Index capacity + 100, // Leaf capacity + 3, // dimension :) + SpatialIndex::RTree::RV_RSTAR, + id); +} + +#endif diff --git a/src/areastore.h b/src/areastore.h new file mode 100644 index 000000000..57d96450b --- /dev/null +++ b/src/areastore.h @@ -0,0 +1,196 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef AREASTORE_H_ +#define AREASTORE_H_ + +#include "irr_v3d.h" +#include "noise.h" // for PcgRandom +#include +#include +#include +#include +#include "util/container.h" +#include "util/numeric.h" +#ifndef ANDROID + #include "cmake_config.h" +#endif +#if USE_SPATIAL + #include + #include "util/serialize.h" +#endif + +#define AST_EXTREMIFY(min, max, pa, pb) \ + (min).X = MYMIN((pa).X, (pb).X); \ + (min).Y = MYMIN((pa).Y, (pb).Y); \ + (min).Z = MYMIN((pa).Z, (pb).Z); \ + (max).X = MYMAX((pa).X, (pb).X); \ + (max).Y = MYMAX((pa).Y, (pb).Y); \ + (max).Z = MYMAX((pa).Z, (pb).Z); + +#define AREA_ID_INVALID 0 + +struct Area { + Area(const v3s16 &minedge, const v3s16 &maxedge) + { + this->minedge = minedge; + this->maxedge = maxedge; + } + + Area() {} + + void extremifyEdges() + { + v3s16 nminedge; + v3s16 nmaxedge; + + AST_EXTREMIFY(nminedge, nmaxedge, minedge, maxedge) + + maxedge = nmaxedge; + minedge = nminedge; + } + + u32 id; + v3s16 minedge; + v3s16 maxedge; + std::string data; +}; + +std::vector get_areastore_typenames(); + +class AreaStore { +protected: + // TODO change to unordered_map when we can + std::map areas_map; + void invalidateCache(); + virtual void getAreasForPosImpl(std::vector *result, v3s16 pos) = 0; + bool cache_enabled; // don't write to this from subclasses, only read. +public: + virtual void insertArea(const Area &a) = 0; + virtual void reserve(size_t count) {}; + virtual bool removeArea(u32 id) = 0; + void getAreasForPos(std::vector *result, v3s16 pos); + virtual void getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap) = 0; + +#if 0 + // calls a passed function for every stored area, until the + // callback returns true. If that happens, it returns true, + // if the search is exhausted, it returns false + virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const = 0; +#endif + + virtual ~AreaStore() + {} + + AreaStore() : + cache_enabled(true), + m_cacheblock_radius(64), + m_res_cache(1000, &cacheMiss, this), + m_highest_id(0) + { + } + + void setCacheParams(bool enabled, u8 block_radius, size_t limit); + + u32 getFreeId(v3s16 minedge, v3s16 maxedge); + const Area *getArea(u32 id) const; + u16 size() const; +#if 0 + bool deserialize(std::istream &is); + void serialize(std::ostream &is) const; +#endif +private: + static void cacheMiss(void *data, const v3s16 &mpos, std::vector *dest); + u8 m_cacheblock_radius; // if you modify this, call invalidateCache() + LRUCache > m_res_cache; + u32 m_highest_id; + +}; + + +class VectorAreaStore : public AreaStore { +protected: + virtual void getAreasForPosImpl(std::vector *result, v3s16 pos); +public: + virtual void insertArea(const Area &a); + virtual void reserve(size_t count); + virtual bool removeArea(u32 id); + virtual void getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap); + // virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const; +private: + std::vector m_areas; +}; + +#if USE_SPATIAL + +class SpatialAreaStore : public AreaStore { +protected: + virtual void getAreasForPosImpl(std::vector *result, v3s16 pos); +public: + SpatialAreaStore(); + virtual void insertArea(const Area &a); + virtual bool removeArea(u32 id); + virtual void getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap); + // virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const; + + virtual ~SpatialAreaStore(); +private: + SpatialIndex::ISpatialIndex *m_tree; + SpatialIndex::IStorageManager *m_storagemanager; + + class VectorResultVisitor : public SpatialIndex::IVisitor { + private: + SpatialAreaStore *m_store; + std::vector *m_result; + public: + VectorResultVisitor(std::vector *result, SpatialAreaStore *store) + { + m_store = store; + m_result = result; + } + + virtual void visitNode(const SpatialIndex::INode &in) + { + } + + virtual void visitData(const SpatialIndex::IData &in) + { + u32 id = in.getIdentifier(); + + std::map::iterator itr = m_store->areas_map.find(id); + assert(itr != m_store->areas_map.end()); + m_result->push_back(&itr->second); + } + + virtual void visitData(std::vector &v) + { + for (size_t i = 0; i < v.size(); i++) + visitData(*(v[i])); + } + + ~VectorResultVisitor() {} + }; +}; + +#endif + +#endif /* AREASTORE_H_ */ diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in index c3ca1e864..04f368594 100644 --- a/src/cmake_config.h.in +++ b/src/cmake_config.h.in @@ -20,6 +20,7 @@ #cmakedefine01 USE_FREETYPE #cmakedefine01 USE_LEVELDB #cmakedefine01 USE_LUAJIT +#cmakedefine01 USE_SPATIAL #cmakedefine01 USE_SYSTEM_GMP #cmakedefine01 USE_REDIS #cmakedefine01 HAVE_ENDIAN_H diff --git a/src/script/lua_api/CMakeLists.txt b/src/script/lua_api/CMakeLists.txt index aaabc213e..2501ce6d6 100644 --- a/src/script/lua_api/CMakeLists.txt +++ b/src/script/lua_api/CMakeLists.txt @@ -1,4 +1,5 @@ set(common_SCRIPT_LUA_API_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/l_areastore.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_base.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_craft.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_env.cpp diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp new file mode 100644 index 000000000..1e9075119 --- /dev/null +++ b/src/script/lua_api/l_areastore.cpp @@ -0,0 +1,401 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + + +#include "lua_api/l_areastore.h" +#include "lua_api/l_internal.h" +#include "common/c_converter.h" +#include "cpp_api/s_security.h" +#include "areastore.h" +#include "filesys.h" +#ifndef ANDROID + #include "cmake_config.h" +#endif +#include + +static inline void get_data_and_border_flags(lua_State *L, u8 start_i, + bool *borders, bool *data) +{ + if (!lua_isboolean(L, start_i)) + return; + *borders = lua_toboolean(L, start_i); + if (!lua_isboolean(L, start_i + 1)) + return; + *data = lua_toboolean(L, start_i + 1); +} + +static void push_area(lua_State *L, const Area *a, + bool include_borders, bool include_data) +{ + if (!include_borders && !include_data) { + lua_pushboolean(L, true); + } + lua_newtable(L); + if (include_borders) { + push_v3s16(L, a->minedge); + lua_setfield(L, -2, "min"); + push_v3s16(L, a->maxedge); + lua_setfield(L, -2, "max"); + } + if (include_data) { + lua_pushlstring(L, a->data.c_str(), a->data.size()); + lua_setfield(L, -2, "data"); + } +} + +static inline void push_areas(lua_State *L, const std::vector &areas, + bool borders, bool data) +{ + lua_newtable(L); + size_t cnt = areas.size(); + for (size_t i = 0; i < cnt; i++) { + lua_pushnumber(L, areas[i]->id); + push_area(L, areas[i], borders, data); + lua_settable(L, -3); + } +} + +// garbage collector +int LuaAreaStore::gc_object(lua_State *L) +{ + LuaAreaStore *o = *(LuaAreaStore **)(lua_touserdata(L, 1)); + delete o; + return 0; +} + +// get_area(id, include_borders, include_data) +int LuaAreaStore::l_get_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + u32 id = luaL_checknumber(L, 2); + + bool include_borders = true; + bool include_data = false; + get_data_and_border_flags(L, 3, &include_borders, &include_data); + + const Area *res; + + res = ast->getArea(id); + push_area(L, res, include_borders, include_data); + + return 1; +} + +// get_areas_for_pos(pos, include_borders, include_data) +int LuaAreaStore::l_get_areas_for_pos(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + v3s16 pos = check_v3s16(L, 2); + + bool include_borders = true; + bool include_data = false; + get_data_and_border_flags(L, 3, &include_borders, &include_data); + + std::vector res; + + ast->getAreasForPos(&res, pos); + push_areas(L, res, include_borders, include_data); + + return 1; +} + +// get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data) +int LuaAreaStore::l_get_areas_in_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + v3s16 minedge = check_v3s16(L, 2); + v3s16 maxedge = check_v3s16(L, 3); + + bool include_borders = true; + bool include_data = false; + bool accept_overlap = false; + if (lua_isboolean(L, 4)) { + accept_overlap = lua_toboolean(L, 4); + get_data_and_border_flags(L, 5, &include_borders, &include_data); + } + std::vector res; + + ast->getAreasInArea(&res, minedge, maxedge, accept_overlap); + push_areas(L, res, include_borders, include_data); + + return 1; +} + +// insert_area(edge1, edge2, data) +int LuaAreaStore::l_insert_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + Area a; + + a.minedge = check_v3s16(L, 2); + a.maxedge = check_v3s16(L, 3); + + a.extremifyEdges(); + a.id = ast->getFreeId(a.minedge, a.maxedge); + + if (a.id == AREA_ID_INVALID) { + // couldn't get free id + lua_pushnil(L); + return 1; + } + + size_t d_len; + const char *data = luaL_checklstring(L, 4, &d_len); + + a.data = std::string(data, d_len); + + ast->insertArea(a); + + lua_pushnumber(L, a.id); + return 1; +} + +// reserve(count) +int LuaAreaStore::l_reserve(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + size_t count = luaL_checknumber(L, 2); + ast->reserve(count); + return 0; +} + +// remove_area(id) +int LuaAreaStore::l_remove_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + u32 id = luaL_checknumber(L, 2); + bool success = ast->removeArea(id); + + lua_pushboolean(L, success); + return 1; +} + +// set_cache_params(params) +int LuaAreaStore::l_set_cache_params(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + luaL_checktype(L, 2, LUA_TTABLE); + + bool enabled = getboolfield_default(L, 2, "enabled", true); + u8 block_radius = getintfield_default(L, 2, "block_radius", 64); + size_t limit = getintfield_default(L, 2, "block_radius", 1000); + + ast->setCacheParams(enabled, block_radius, limit); + + return 0; +} + +#if 0 +// to_string() +int LuaAreaStore::l_to_string(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + std::ostringstream os(std::ios_base::binary); + ast->serialize(os); + std::string str = os.str(); + + lua_pushlstring(L, str.c_str(), str.length()); + return 1; +} + +// to_file(filename) +int LuaAreaStore::l_to_file(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + const char *filename = luaL_checkstring(L, 2); + CHECK_SECURE_PATH_OPTIONAL(L, filename); + + std::ostringstream os(std::ios_base::binary); + ast->serialize(os); + + lua_pushboolean(L, fs::safeWriteToFile(filename, os.str())); + return 1; +} + +// from_string(str) +int LuaAreaStore::l_from_string(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + size_t len; + const char *str = luaL_checklstring(L, 2, &len); + + std::istringstream is(std::string(str, len), std::ios::binary); + bool success = ast->deserialize(is); + + lua_pushboolean(L, success); + return 1; +} + +// from_file(filename) +int LuaAreaStore::l_from_file(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + const char *filename = luaL_checkstring(L, 2); + CHECK_SECURE_PATH_OPTIONAL(L, filename); + + std::ifstream is(filename, std::ios::binary); + bool success = ast->deserialize(is); + + lua_pushboolean(L, success); + return 1; +} +#endif + +LuaAreaStore::LuaAreaStore() +{ +#if USE_SPATIAL + this->as = new SpatialAreaStore(); +#else + this->as = new VectorAreaStore(); +#endif +} + +LuaAreaStore::LuaAreaStore(const std::string &type) +{ +#if USE_SPATIAL + if (type == "LibSpatial") { + this->as = new SpatialAreaStore(); + } else +#endif + { + this->as = new VectorAreaStore(); + } +} + +LuaAreaStore::~LuaAreaStore() +{ + delete as; +} + +// LuaAreaStore() +// Creates an LuaAreaStore and leaves it on top of stack +int LuaAreaStore::create_object(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = (lua_isstring(L, 1)) ? + new LuaAreaStore(lua_tostring(L, 1)) : + new LuaAreaStore(); + + *(void **)(lua_newuserdata(L, sizeof(void *))) = o; + luaL_getmetatable(L, className); + lua_setmetatable(L, -2); + return 1; +} + +LuaAreaStore *LuaAreaStore::checkobject(lua_State *L, int narg) +{ + NO_MAP_LOCK_REQUIRED; + + luaL_checktype(L, narg, LUA_TUSERDATA); + + void *ud = luaL_checkudata(L, narg, className); + if (!ud) + luaL_typerror(L, narg, className); + + return *(LuaAreaStore **)ud; // unbox pointer +} + +void LuaAreaStore::Register(lua_State *L) +{ + lua_newtable(L); + int methodtable = lua_gettop(L); + luaL_newmetatable(L, className); + int metatable = lua_gettop(L); + + lua_pushliteral(L, "__metatable"); + lua_pushvalue(L, methodtable); + lua_settable(L, metatable); // hide metatable from Lua getmetatable() + + lua_pushliteral(L, "__index"); + lua_pushvalue(L, methodtable); + lua_settable(L, metatable); + + lua_pushliteral(L, "__gc"); + lua_pushcfunction(L, gc_object); + 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 (AreaStore()) + lua_register(L, className, create_object); +} + +const char LuaAreaStore::className[] = "AreaStore"; +const luaL_reg LuaAreaStore::methods[] = { + luamethod(LuaAreaStore, get_area), + luamethod(LuaAreaStore, get_areas_for_pos), + luamethod(LuaAreaStore, get_areas_in_area), + luamethod(LuaAreaStore, insert_area), + luamethod(LuaAreaStore, reserve), + luamethod(LuaAreaStore, remove_area), + luamethod(LuaAreaStore, set_cache_params), + /* luamethod(LuaAreaStore, to_string), + luamethod(LuaAreaStore, to_file), + luamethod(LuaAreaStore, from_string), + luamethod(LuaAreaStore, from_file),*/ + {0,0} +}; diff --git a/src/script/lua_api/l_areastore.h b/src/script/lua_api/l_areastore.h new file mode 100644 index 000000000..a25529627 --- /dev/null +++ b/src/script/lua_api/l_areastore.h @@ -0,0 +1,70 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef L_AREASTORE_H_ +#define L_AREASTORE_H_ + +#include "lua_api/l_base.h" +#include "irr_v3d.h" +#include "areastore.h" + +/* + AreaStore + */ +class LuaAreaStore : public ModApiBase { +private: + + static const char className[]; + static const luaL_reg methods[]; + + static int gc_object(lua_State *L); + + static int l_get_area(lua_State *L); + + static int l_get_areas_for_pos(lua_State *L); + static int l_get_areas_in_area(lua_State *L); + static int l_insert_area(lua_State *L); + static int l_reserve(lua_State *L); + static int l_remove_area(lua_State *L); + + static int l_set_cache_params(lua_State *L); + + /* static int l_to_string(lua_State *L); + static int l_to_file(lua_State *L); + + static int l_from_string(lua_State *L); + static int l_from_file(lua_State *L); */ + +public: + AreaStore *as; + + LuaAreaStore(); + LuaAreaStore(const std::string &type); + ~LuaAreaStore(); + + // AreaStore() + // Creates a AreaStore and leaves it on top of stack + static int create_object(lua_State *L); + + static LuaAreaStore *checkobject(lua_State *L, int narg); + + static void Register(lua_State *L); +}; + +#endif /* L_AREASTORE_H_ */ diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index d97db2367..12146e80a 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "serialization.h" #include "json/json.h" #include "cpp_api/s_security.h" +#include "areastore.h" #include "debug.h" #include "porting.h" #include "log.h" diff --git a/src/script/scripting_game.cpp b/src/script/scripting_game.cpp index 9321c38a9..8047c58cc 100644 --- a/src/script/scripting_game.cpp +++ b/src/script/scripting_game.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "settings.h" #include "cpp_api/s_internal.h" +#include "lua_api/l_areastore.h" #include "lua_api/l_base.h" #include "lua_api/l_craft.h" #include "lua_api/l_env.h" @@ -91,6 +92,7 @@ void GameScripting::InitializeModApi(lua_State *L, int top) // Register reference classes (userdata) InvRef::Register(L); + LuaAreaStore::Register(L); LuaItemStack::Register(L); LuaPerlinNoise::Register(L); LuaPerlinNoiseMap::Register(L); diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index dcc68f9c8..bdff14f05 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -1,5 +1,6 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_areastore.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_collision.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_compression.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_connection.cpp diff --git a/src/unittest/test_areastore.cpp b/src/unittest/test_areastore.cpp new file mode 100644 index 000000000..a0dcada94 --- /dev/null +++ b/src/unittest/test_areastore.cpp @@ -0,0 +1,129 @@ +/* +Minetest +Copyright (C) 2015 est31, + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" + +#include "areastore.h" + +class TestAreaStore : public TestBase { +public: + TestAreaStore() { TestManager::registerTestModule(this); } + const char *getName() { return "TestAreaStore"; } + + void runTests(IGameDef *gamedef); + + void genericStoreTest(AreaStore *store); + void testVectorStore(); + void testSpatialStore(); +}; + +static TestAreaStore g_test_instance; + +void TestAreaStore::runTests(IGameDef *gamedef) +{ + TEST(testVectorStore); +#if USE_SPATIAL + TEST(testSpatialStore); +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void TestAreaStore::testVectorStore() +{ + VectorAreaStore store; + genericStoreTest(&store); +} + +void TestAreaStore::testSpatialStore() +{ +#if USE_SPATIAL + SpatialAreaStore store; + genericStoreTest(&store); +#endif +} + +void TestAreaStore::genericStoreTest(AreaStore *store) +{ + Area a(v3s16(-10, -3, 5), v3s16(0, 29, 7)); + a.id = 1; + Area b(v3s16(-5, -2, 5), v3s16(0, 28, 6)); + b.id = 2; + Area c(v3s16(-7, -3, 6), v3s16(-1, 27, 7)); + c.id = 3; + std::vector res; + + UASSERTEQ(size_t, store->size(), 0); + store->reserve(2); // sic + store->insertArea(a); + store->insertArea(b); + store->insertArea(c); + UASSERTEQ(size_t, store->size(), 3); + + store->getAreasForPos(&res, v3s16(-1, 0, 6)); + UASSERTEQ(size_t, res.size(), 3); + res.clear(); + store->getAreasForPos(&res, v3s16(0, 0, 7)); + UASSERTEQ(size_t, res.size(), 1); + UASSERTEQ(u32, res[0]->id, 1); + res.clear(); + + store->removeArea(1); + + store->getAreasForPos(&res, v3s16(0, 0, 7)); + UASSERTEQ(size_t, res.size(), 0); + res.clear(); + + store->insertArea(a); + + store->getAreasForPos(&res, v3s16(0, 0, 7)); + UASSERTEQ(size_t, res.size(), 1); + UASSERTEQ(u32, res[0]->id, 1); + res.clear(); + + store->getAreasInArea(&res, v3s16(-10, -3, 5), v3s16(0, 29, 7), false); + UASSERTEQ(size_t, res.size(), 3); + res.clear(); + + store->getAreasInArea(&res, v3s16(-100, 0, 6), v3s16(200, 0, 6), false); + UASSERTEQ(size_t, res.size(), 0); + res.clear(); + + store->getAreasInArea(&res, v3s16(-100, 0, 6), v3s16(200, 0, 6), true); + UASSERTEQ(size_t, res.size(), 3); + res.clear(); + + store->removeArea(1); + store->removeArea(2); + store->removeArea(3); + + Area d(v3s16(-100, -300, -200), v3s16(-50, -200, -100)); + d.id = 4; + d.data = "Hi!"; + store->insertArea(d); + + store->getAreasForPos(&res, v3s16(-75, -250, -150)); + UASSERTEQ(size_t, res.size(), 1); + UASSERTEQ(u32, res[0]->id, 4); + UASSERTEQ(u16, res[0]->data.size(), 3); + UASSERT(strncmp(res[0]->data.c_str(), "Hi!", 3) == 0); + res.clear(); + + store->removeArea(4); +} diff --git a/src/util/container.h b/src/util/container.h index 936c46d61..267d54c16 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -309,5 +309,74 @@ protected: JSemaphore m_size; }; +template +class LRUCache +{ +public: + LRUCache(size_t limit, void (*cache_miss)(void *data, const K &key, V *dest), + void *data) + { + m_limit = limit; + m_cache_miss = cache_miss; + m_cache_miss_data = data; + } + + void setLimit(size_t limit) + { + m_limit = limit; + invalidate(); + } + + void invalidate() + { + m_map.clear(); + m_queue.clear(); + } + + const V *lookupCache(K key) + { + typename cache_type::iterator it = m_map.find(key); + V *ret; + if (it != m_map.end()) { + // found! + + cache_entry_t &entry = it->second; + + ret = &entry.second; + + // update the usage information + m_queue.erase(entry.first); + m_queue.push_front(key); + entry.first = m_queue.begin(); + } else { + // cache miss -- enter into cache + cache_entry_t &entry = + m_map[key]; + ret = &entry.second; + m_cache_miss(m_cache_miss_data, key, &entry.second); + + // delete old entries + if (m_queue.size() == m_limit) { + const K &id = m_queue.back(); + m_map.erase(id); + m_queue.pop_back(); + } + + m_queue.push_front(key); + entry.first = m_queue.begin(); + } + return ret; + } +private: + void (*m_cache_miss)(void *data, const K &key, V *dest); + void *m_cache_miss_data; + size_t m_limit; + typedef typename std::template pair::iterator, V> cache_entry_t; + typedef std::template map cache_type; + cache_type m_map; + // we can't use std::deque here, because its iterators get invalidated + std::list m_queue; +}; + #endif From f336d3ffb657d2fcc72d06c28642c1b418e8dec4 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 27 Jul 2015 07:44:48 +0200 Subject: [PATCH 245/670] Fix srp.cpp:815 leak Thanks @Zeno- --- src/client.cpp | 2 +- src/network/clientpackethandler.cpp | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 74072d9d7..63f720f04 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -974,6 +974,7 @@ void Client::deleteAuthData() case AUTH_MECHANISM_NONE: break; } + m_chosen_auth_mech = AUTH_MECHANISM_NONE; } @@ -1060,7 +1061,6 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism) NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_A, 0); resp_pkt << std::string(bytes_A, len_A) << based_on; - free(bytes_A); Send(&resp_pkt); break; } diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 2133543d9..86091bc88 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -100,7 +100,6 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) void Client::handleCommand_AuthAccept(NetworkPacket* pkt) { - m_chosen_auth_mech = AUTH_MECHANISM_NONE; deleteAuthData(); v3f playerpos; @@ -126,7 +125,6 @@ void Client::handleCommand_AuthAccept(NetworkPacket* pkt) } void Client::handleCommand_AcceptSudoMode(NetworkPacket* pkt) { - m_chosen_auth_mech = AUTH_MECHANISM_NONE; deleteAuthData(); m_password = m_new_password; @@ -144,7 +142,6 @@ void Client::handleCommand_DenySudoMode(NetworkPacket* pkt) m_chat_queue.push(L"Password change denied. Password NOT changed."); // reset everything and be sad deleteAuthData(); - m_chosen_auth_mech = AUTH_MECHANISM_NONE; } void Client::handleCommand_InitLegacy(NetworkPacket* pkt) { From 9bc0241e44432491df9984be4f321e8bf94f2eb1 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Mon, 27 Jul 2015 11:53:19 +0200 Subject: [PATCH 246/670] Extend CMake variable descriptions --- README.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.txt b/README.txt index ca15222e5..06122dee1 100644 --- a/README.txt +++ b/README.txt @@ -190,16 +190,16 @@ GETTEXT_ICONV_DLL - Only when building with Gettext on Windows; pa GETTEXT_INCLUDE_DIR - Only when building with Gettext; directory that contains iconv.h GETTEXT_LIBRARY - Only when building with Gettext on Windows; path to libintl.dll.a GETTEXT_MSGFMT - Only when building with Gettext; path to msgfmt/msgfmt.exe -IRRLICHT_DLL - path to Irrlicht.dll -IRRLICHT_INCLUDE_DIR - directory that contains IrrCompileConfig.h -IRRLICHT_LIBRARY - path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a +IRRLICHT_DLL - Only on Windows; path to Irrlicht.dll +IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h +IRRLICHT_LIBRARY - Path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a/Irrlicht.lib LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll -REDIS_INCLUDE_DIR - Only when building with Redis support; directory that contains hiredis.h -REDIS_LIBRARY - Only when building with Redis support; path to libhiredis.a/libhiredis.so -SPATIAL_INCLUDE_DIR - Only if you want to build with LibSpatial; directory that contains spatialindex/SpatialIndex.h -SPATIAL_LIBRARY - Only if you want to build with LibSpatial; path to libspatialindex_c.so +REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h +REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so +SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h +SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll @@ -211,8 +211,8 @@ OPENAL_INCLUDE_DIR - Only if building with sound; directory where a OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so -SQLITE3_INCLUDE_DIR - Only if you want to use SQLite from your OS; directory that contains sqlite3.h -SQLITE3_LIBRARY - Only if you want to use the SQLite from your OS; path to libsqlite3.a/libsqlite3.so +SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h +SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a VORBIS_DLL - Only if building with sound on Windows; path to libvorbis-0.dll @@ -221,8 +221,8 @@ VORBIS_LIBRARY - Only if building with sound; path to libvorbis XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so ZLIB_DLL - Only on Windows; path to zlib1.dll ZLIBWAPI_DLL - Only on Windows; path to zlibwapi.dll -ZLIB_INCLUDE_DIR - directory where zlib.h is located -ZLIB_LIBRARY - path to libz.a/libz.so/zlibwapi.lib +ZLIB_INCLUDE_DIR - Directory that contains zlib.h +ZLIB_LIBRARY - Path to libz.a/libz.so/zlibwapi.lib Compiling on Windows: --------------------- From 88a6b9f52d6ffd4e351155dee661fe8ea084a9aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sun, 19 Jul 2015 01:35:47 +0200 Subject: [PATCH 247/670] Fixed minimap memory leak --- src/client.cpp | 7 +++---- src/mapblock_mesh.cpp | 1 + src/mapblock_mesh.h | 8 +++++--- src/minimap.cpp | 8 +++++++- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 63f720f04..fdabfa2d8 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -540,20 +540,19 @@ void Client::step(float dtime) } if (r.mesh) { - minimap_mapblock = r.mesh->getMinimapMapblock(); - do_mapper_update = (minimap_mapblock != NULL); + minimap_mapblock = r.mesh->moveMinimapMapblock(); + if (minimap_mapblock == NULL) + do_mapper_update = false; } if (r.mesh && r.mesh->getMesh()->getMeshBufferCount() == 0) { delete r.mesh; - block->mesh = NULL; } else { // Replace with the new mesh block->mesh = r.mesh; } } else { delete r.mesh; - minimap_mapblock = NULL; } if (do_mapper_update) diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 32f6e659a..33597b2fc 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1278,6 +1278,7 @@ MapBlockMesh::~MapBlockMesh() { m_mesh->drop(); m_mesh = NULL; + delete m_minimap_mapblock; } bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_ratio) diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h index 283006331..8e994ec6b 100644 --- a/src/mapblock_mesh.h +++ b/src/mapblock_mesh.h @@ -104,14 +104,16 @@ public: // Returns true if anything has been changed. bool animate(bool faraway, float time, int crack, u32 daynight_ratio); - scene::SMesh* getMesh() + scene::SMesh *getMesh() { return m_mesh; } - MinimapMapblock* getMinimapMapblock() + MinimapMapblock *moveMinimapMapblock() { - return m_minimap_mapblock; + MinimapMapblock *p = m_minimap_mapblock; + m_minimap_mapblock = NULL; + return p; } bool isAnimationForced() const diff --git a/src/minimap.cpp b/src/minimap.cpp index d37a083ef..950202c6a 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -102,7 +102,13 @@ void MinimapUpdateThread::doUpdate() while (popBlockUpdate(&update)) { if (update.data) { - m_blocks_cache[update.pos] = update.data; + // Swap two values in the map using single lookup + std::pair::iterator, bool> + result = m_blocks_cache.insert(std::make_pair(update.pos, update.data)); + if (result.second == false) { + delete result.first->second; + result.first->second = update.data; + } } else { std::map::iterator it; it = m_blocks_cache.find(update.pos); From ca63f7f10d912382ebc24a54995f7153598ed429 Mon Sep 17 00:00:00 2001 From: nerzhul Date: Wed, 29 Jul 2015 10:49:40 +0200 Subject: [PATCH 248/670] Precalculate mapblock relative size. This permit to remove many s16 calculs on runtime --- src/mapblock.cpp | 1 + src/mapblock.h | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 1d2e1e250..43057f3a5 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -69,6 +69,7 @@ static const char *modified_reason_strings[] = { MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy): m_parent(parent), m_pos(pos), + m_pos_relative(pos * MAP_BLOCKSIZE), m_gamedef(gamedef), m_modified(MOD_STATE_WRITE_NEEDED), m_modified_reason(MOD_REASON_INITIAL), diff --git a/src/mapblock.h b/src/mapblock.h index 92ca4b485..ba33c01a2 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -258,7 +258,7 @@ public: inline v3s16 getPosRelative() { - return m_pos * MAP_BLOCKSIZE; + return m_pos_relative; } inline core::aabbox3d getBox() @@ -564,6 +564,14 @@ private: // Position in blocks on parent v3s16 m_pos; + /* This is the precalculated m_pos_relative value + * This caches the value, improving performance by removing 3 s16 multiplications + * at runtime on each getPosRelative call + * For a 5 minutes runtime with valgrind this removes 3 * 19M s16 multiplications + * The gain can be estimated in Release Build to 3 * 100M multiply operations for 5 mins + */ + v3s16 m_pos_relative; + IGameDef *m_gamedef; /* From f97c2702a2fee9496059169448ce97ed2b7da9b2 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 29 Jul 2015 15:22:51 +0200 Subject: [PATCH 249/670] Android: Fix minor makefile bugs Fix commenting happening thanks to missing quotes and dereference variable the right way, to get rid of a compile error. --- build/android/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/android/Makefile b/build/android/Makefile index 612fb50e3..b87199541 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -699,7 +699,7 @@ $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB) for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \ LAST_MODIF=$$(find ${ROOT}/../../${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \ - touch ${ROOT}/../../$DIRNAME/timestamp; \ + touch ${ROOT}/../../${DIRNAME}/timestamp; \ touch ${ASSETS_TIMESTAMP}; \ echo ${DIRNAME} changed $$LAST_MODIF; \ fi; \ @@ -855,8 +855,8 @@ manifest : DBG_FLAG="android:debuggable=\"true\""; \ fi; \ cat ${ROOT}/AndroidManifest.xml.template | \ - sed s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g | \ - sed s/###BASE_VERSION###/$$BASE_VERSION/g | \ + sed "s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g" | \ + sed "s/###BASE_VERSION###/$$BASE_VERSION/g" | \ sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \ sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml From eb3aac20c879b9532cd3b678efb2126adcd07af7 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 29 Jul 2015 11:54:27 +0200 Subject: [PATCH 250/670] Android: fix horrible libiconv build Before, our libiconv build was a joke. We first called configure for our own build host system, then called make, before we executed a Android.mk script we provided as patch. The first "native make" always failed, and the LIBICONV_LIB file setting in our Makefile didn't match the built one, resulting in an always-rebuild of iconv. This commit cleans up this total mess, removes the double-build, and the Android.mk, and properly calls ./configure with the according target platform, and uses a built toolchain. As we have to deal with the android bug "NDK: Support for prebuild libs with full sonames" https://code.google.com/p/android/issues/detail?id=55868 as the 2013 patch https://lists.gnu.org/archive/html/libtool-patches/2013-06/msg00002.html by Google's David Turner wasn't inside the 2011 libtool, we pass -avoid-version to libtool. Thanks to the proper build, wide_to_utf8 works for android now, removing us of the need to disable it. --- build/android/Makefile | 73 +++++++++++++------------ build/android/jni/Android.mk | 8 +-- build/android/libiconv_android_mk.patch | 51 ----------------- build/android/libiconv_stdio.patch | 7 ++- src/util/string.cpp | 12 ---- 5 files changed, 47 insertions(+), 104 deletions(-) delete mode 100644 build/android/libiconv_android_mk.patch diff --git a/build/android/Makefile b/build/android/Makefile index b87199541..295ddf620 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -133,7 +133,7 @@ FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android ICONV_VERSION = 1.14 ICONV_DIR = $(ROOT)/deps/libiconv/ -ICONV_LIB = $(ICONV_DIR)/iconv.so +ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so ICONV_TIMESTAMP = $(ICONV_DIR)timestamp ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz @@ -445,52 +445,55 @@ $(ICONV_TIMESTAMP) : iconv_download fi iconv_download : - @if [ ! -d ${ICONV_DIR} ] ; then \ - echo "iconv sources missing, downloading..."; \ - mkdir -p ${ROOT}/deps; \ - cd ${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; \ - cd ${ICONV_DIR}; \ - patch -p1 < ${ROOT}/libiconv_android.patch; \ - patch -p1 < ${ROOT}/libiconv_android_mk.patch; \ - patch -p1 < ${ROOT}/libiconv_stdio.patch; \ - cd jni; \ - ln -s .. src; \ + @if [ ! -d ${ICONV_DIR} ] ; then \ + echo "iconv sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd ${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; \ + cd ${ICONV_DIR}; \ + patch -p1 < ${ROOT}/libiconv_android.patch; \ + patch -p1 < ${ROOT}/libiconv_stdio.patch; \ fi iconv : $(ICONV_LIB) $(ICONV_LIB) : $(ICONV_TIMESTAMP) @REFRESH=0; \ - if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ + if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ fi; \ - if [ ! -e ${ICONV_LIB} ] ; then \ - REFRESH=1; \ + if [ ! -e ${ICONV_LIB} ] ; then \ + REFRESH=1; \ fi; \ - if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \ - REFRESH=1; \ + if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ fi; \ if [ $$REFRESH -ne 0 ] ; then \ - mkdir -p ${ICONV_DIR}; \ + mkdir -p ${ICONV_DIR}; \ export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ - echo "changed timestamp for iconv detected building..."; \ - cd ${ICONV_DIR}; \ - ./configure; \ - make; \ - export NDK_PROJECT_PATH=${ICONV_DIR}; \ - ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \ - APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \ - TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ - TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \ - TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \ - touch ${ICONV_TIMESTAMP}; \ - touch ${ICONV_TIMESTAMP_INT}; \ + 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} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + 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"; \ + echo "nothing to be done for iconv"; \ fi clean_iconv : diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 332677b84..61ba1d0f0 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -26,8 +26,8 @@ include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := iconv -LOCAL_SRC_FILES := deps/libiconv/obj/local/$(TARGET_ARCH_ABI)/libiconv.a -include $(PREBUILT_STATIC_LIBRARY) +LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so +include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := openal @@ -355,8 +355,8 @@ LOCAL_SRC_FILES += \ # json LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp -LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp -LOCAL_STATIC_LIBRARIES := Irrlicht iconv freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) +LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp +LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) ifeq ($(HAVE_LEVELDB), 1) LOCAL_STATIC_LIBRARIES += LevelDB diff --git a/build/android/libiconv_android_mk.patch b/build/android/libiconv_android_mk.patch deleted file mode 100644 index 9eb7a1915..000000000 --- a/build/android/libiconv_android_mk.patch +++ /dev/null @@ -1,51 +0,0 @@ -From fe27aae178d65b06d5f4104158343b0d2d33e3f0 Mon Sep 17 00:00:00 2001 -From: Pierre Zurek -Date: Sat, 2 Apr 2011 23:11:57 +0200 -Subject: [PATCH] Added Android.mk. - -This makefile first executes the configure script, that will -generate the config.h files necessary to build iconv. ---- - Android.mk | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - create mode 100644 Android.mk - -diff --git a/jni/Android.mk b/jni/Android.mk -new file mode 100644 -index 0000000..799b22d ---- /dev/null -+++ b/jni/Android.mk -@@ -0,0 +1,32 @@ -+LOCAL_PATH := $(call my-dir) -+include $(CLEAR_VARS) -+ -+LOCAL_ARM_MODE := arm -+ -+LOCAL_SRC_FILES := src/lib/iconv.c \ -+ src/libcharset/lib/localcharset.c \ -+ src/lib/relocatable.c -+ -+LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/include \ -+ $(LOCAL_PATH)/src/libcharset \ -+ $(LOCAL_PATH)/src/libcharset/include -+ -+LOCAL_CFLAGS := \ -+ -DLIBDIR="\"c\"" \ -+ -D_ANDROID \ -+ -DBUILDING_LIBCHARSET \ -+ -DBUILDING_LIBICONV \ -+ -DBUILDING_LIBICONV \ -+ -DIN_LIBRARY -+ -+LOCAL_MODULE:= iconv -+ -+$(info Configuring iconv...) -+COMMAND := $(shell \ -+ export PATH=$(TOOLCHAIN_INSTALL_DIR)/bin:$$PATH; \ -+ cd $(LOCAL_PATH); \ -+ make distclean; \ -+ ./configure --host="arm-linux-androideabi") -+$(info iconv configured.) -+ -+include $(BUILD_STATIC_LIBRARY) -+ diff --git a/build/android/libiconv_stdio.patch b/build/android/libiconv_stdio.patch index 19cb6aa09..9fa50f79a 100644 --- a/build/android/libiconv_stdio.patch +++ b/build/android/libiconv_stdio.patch @@ -1,10 +1,13 @@ --- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200 +++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200 -@@ -695,7 +696,8 @@ _GL_CXXALIASWARN (gets); +@@ -695,8 +696,9 @@ _GL_CXXALIASWARN (gets); /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning. Assume it is always declared, since it is required by C89. */ -_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); +/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ +#define gets(a) fgets( a, sizeof(*(a)), stdin) - #endif \ No newline at end of file + #endif + + +#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ diff --git a/src/util/string.cpp b/src/util/string.cpp index 60ccc9300..6d1eda078 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -102,16 +102,6 @@ std::wstring utf8_to_wide(const std::string &input) return out; } -#ifdef __ANDROID__ - -// TODO: this is an ugly fix for wide_to_utf8 somehow not working on android -std::string wide_to_utf8(const std::wstring &input) -{ - return wide_to_narrow(input); -} - -#else // __ANDROID__ - std::string wide_to_utf8(const std::wstring &input) { size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t); @@ -138,8 +128,6 @@ std::string wide_to_utf8(const std::wstring &input) return out; } -#endif // __ANDROID__ - #else // _WIN32 std::wstring utf8_to_wide(const std::string &input) From 05fe9ab2d4a4be252adb456b8bc14896939e4eb7 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Thu, 30 Jul 2015 23:14:05 +0200 Subject: [PATCH 251/670] Small SendableMediaAnnouncement cleanup -> Remove the SendableMediaAnnouncement struct -> Forge the packet directly in the m_media loop, spare one loop and the construction of a vector -> Use preincrement to spare iterator copies --- src/server.cpp | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 33cba17e5..70fe5ae2c 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2330,44 +2330,22 @@ void Server::fillMediaCache() } } -struct SendableMediaAnnouncement -{ - std::string name; - std::string sha1_digest; - - SendableMediaAnnouncement(const std::string &name_="", - const std::string &sha1_digest_=""): - name(name_), - sha1_digest(sha1_digest_) - {} -}; - void Server::sendMediaAnnouncement(u16 peer_id) { DSTACK(__FUNCTION_NAME); - verbosestream<<"Server: Announcing files to id("< file_announcements; - - for (std::map::iterator i = m_media.begin(); - i != m_media.end(); i++){ - // Put in list - file_announcements.push_back( - SendableMediaAnnouncement(i->first, i->second.sha1_digest)); - } + verbosestream << "Server: Announcing files to id(" << peer_id << ")" + << std::endl; // Make packet std::ostringstream os(std::ios_base::binary); NetworkPacket pkt(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id); - pkt << (u16) file_announcements.size(); + pkt << (u16) m_media.size(); - for (std::vector::iterator - j = file_announcements.begin(); - j != file_announcements.end(); ++j) { - pkt << j->name << j->sha1_digest; + for (std::map::iterator i = m_media.begin(); + i != m_media.end(); ++i) { + pkt << i->first << i->second.sha1_digest; } pkt << g_settings->get("remote_media"); From 7217fd32eb8af01d3012a2ed883598c6a9fbf78e Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 31 Jul 2015 04:51:57 +0200 Subject: [PATCH 252/670] Fix 0.4.11 githash for android Also make only one >-redirection, sparing repetition. Also, use cut instead of awk, which is shorter and should be a bit faster. --- build/android/Makefile | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/build/android/Makefile b/build/android/Makefile index 295ddf620..0a70c189a 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -819,28 +819,26 @@ clean_all : $(RM) -r gen libs obj deps bin Debug and_env $(ROOT)/jni/src/android_version.h : - @echo "#ifndef ANDROID_MT_VERSION_H" \ - >${ROOT}/jni/src/android_version.h; \ - echo "#define ANDROID_MT_VERSION_H" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#define VERSION_MINOR $$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}')" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \ - >> ${ROOT}/jni/src/android_version.h; \ + @ { \ + echo "#ifndef ANDROID_MT_VERSION_H"; \ + echo "#define ANDROID_MT_VERSION_H"; \ + export CMAKE_FILE=${ROOT}/../../CMakeLists.txt; \ + export VERSION_MAJOR=$$(cat $${CMAKE_FILE} | \ + grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' '); \ + export VERSION_MINOR=$$(cat $${CMAKE_FILE} | \ + grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' '); \ + export VERSION_PATCH=$$(cat $${CMAKE_FILE} | \ + grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' '); \ + echo "#define VERSION_MAJOR $${VERSION_MAJOR}"; \ + echo "#define VERSION_MINOR $${VERSION_MINOR}"; \ + echo "#define VERSION_PATCH $${VERSION_PATCH}"; \ export GITHASH=$$(git rev-parse --short=8 HEAD); \ - export GITTAG=$$(git describe --abbrev=0 --tags); \ - echo "#define VERSION_GITHASH \"$$GITTAG-$$GITHASH-Android\"" \ - >> ${ROOT}/jni/src/android_version.h; \ + export VERSION_STR="$${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH}";\ + echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \ echo "#define VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\ - \".\"STR(VERSION_PATCH)" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#endif" \ - >> ${ROOT}/jni/src/android_version.h; + \".\"STR(VERSION_PATCH)"; \ + echo "#endif"; \ + } > ${ROOT}/jni/src/android_version.h manifest : @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ From e29b61ecd4e8fb3cd4f84cff0e830b49993cbf50 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 31 Jul 2015 05:52:34 +0200 Subject: [PATCH 253/670] Android: speed up rebuild, and prevent race condition fail Speeding up rebuild: Before, we've written the android_version.h file at every rebuild. As it thought the file's content has changed, make has rebuilt files in the source tree that depended on that header file during rebuild, causing lots of files being rebuilt without there being a reason. The reasoning of make can be observed by passing -d and V=1 params to the ndk-build command. You then got logging entries like: Prerequisite `jni/src/android_version.h' is newer than target `obj/local/armeabi-v7a-hard/objs-debug/minetest/jni/src/areastore.o'. Preventing race condition build fail: Before, there was a race condition, where, if the prep_srcdir target was executed in parallel with the $(ROOT)/jni/src/android_version.h one, it could happen that the jni/src directory was nonexistent, and we were trying to write into a file inside. This resulted in a build failue: /bin/sh: 1: cannot create [...]/jni/src/android_version.h: Directory nonexistent Additionally, we now don't remove the link to src/ needlessly anymore. Keeping this wouldn't have affected the rebuild, but this way its more proper. --- build/android/Makefile | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/build/android/Makefile b/build/android/Makefile index 0a70c189a..055386361 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -791,8 +791,9 @@ apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $ echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`" prep_srcdir : - @rm ${ROOT}/jni/src; \ - ln -s ${ROOT}/../../src ${ROOT}/jni/src + @if [ ! -e ${ROOT}/jni/src ]; then \ + ln -s ${ROOT}/../../src ${ROOT}/jni/src; \ + fi clean_apk : manifest @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \ @@ -818,8 +819,10 @@ clean_all : sleep 1; \ $(RM) -r gen libs obj deps bin Debug and_env -$(ROOT)/jni/src/android_version.h : - @ { \ +$(ROOT)/jni/src/android_version.h : prep_srcdir + @export VERSION_FILE=${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"; \ export CMAKE_FILE=${ROOT}/../../CMakeLists.txt; \ @@ -838,7 +841,13 @@ $(ROOT)/jni/src/android_version.h : echo "#define VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\ \".\"STR(VERSION_PATCH)"; \ echo "#endif"; \ - } > ${ROOT}/jni/src/android_version.h + } > $${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 manifest : @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ From cfed682d04a5345763b82344435199fcf95faa78 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 31 Jul 2015 01:10:53 +0100 Subject: [PATCH 254/670] Dungeon generation: Fix code style issues in dungeongen.cpp --- src/dungeongen.cpp | 198 ++++++++++++++++++++++----------------------- 1 file changed, 95 insertions(+), 103 deletions(-) diff --git a/src/dungeongen.cpp b/src/dungeongen.cpp index 7e292024d..8ce64e1e1 100644 --- a/src/dungeongen.cpp +++ b/src/dungeongen.cpp @@ -38,7 +38,8 @@ NoiseParams nparams_dungeon_density(0.0, 1.0, v3f(2.5, 2.5, 2.5), 0, 2, 1.4, 2.0 /////////////////////////////////////////////////////////////////////////////// -DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) { +DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) +{ this->mg = mapgen; this->vm = mapgen->vm; @@ -55,10 +56,10 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) { dp.c_stair = mg->ndef->getId("mapgen_stair_cobble"); dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0,0,0); - dp.notifytype = GENNOTIFY_DUNGEON; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; dp.np_rarity = nparams_dungeon_rarity; dp.np_wetness = nparams_dungeon_wetness; @@ -67,7 +68,8 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) { } -void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) { +void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) +{ //TimeTaker t("gen dungeons"); if (NoisePerlin3D(&dp.np_rarity, nmin.X, nmin.Y, nmin.Z, mg->seed) < 0.2) return; @@ -87,8 +89,8 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) { u32 i = vm->m_area.index(nmin.X, y, z); for (s16 x = nmin.X; x <= nmax.X; x++) { content_t c = vm->m_data[i].getContent(); - if (c == CONTENT_AIR || c == dp.c_water - || (no_float && c == CONTENT_IGNORE)) + if (c == CONTENT_AIR || c == dp.c_water || + (no_float && c == CONTENT_IGNORE)) vm->m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE; i++; } @@ -96,7 +98,7 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) { } // Add it - makeDungeon(v3s16(1,1,1) * MAP_BLOCKSIZE); + makeDungeon(v3s16(1, 1, 1) * MAP_BLOCKSIZE); // Convert some cobble to mossy cobble if (dp.mossratio != 0.0) { @@ -129,20 +131,19 @@ void DungeonGen::makeDungeon(v3s16 start_padding) Find place for first room */ bool fits = false; - for (u32 i = 0; i < 100 && !fits; i++) - { + for (u32 i = 0; i < 100 && !fits; i++) { bool is_large_room = ((random.next() & 3) == 1); roomsize = is_large_room ? - v3s16(random.range(8, 16),random.range(8, 16),random.range(8, 16)) : - v3s16(random.range(4, 8),random.range(4, 6),random.range(4, 8)); + v3s16(random.range(8, 16), random.range(8, 16), random.range(8, 16)) : + v3s16(random.range(4, 8), random.range(4, 6), random.range(4, 8)); roomsize += dp.roomsize; // start_padding is used to disallow starting the generation of // a dungeon in a neighboring generation chunk roomplace = vm->m_area.MinEdge + start_padding + v3s16( - random.range(0,areasize.X-roomsize.X-1-start_padding.X), - random.range(0,areasize.Y-roomsize.Y-1-start_padding.Y), - random.range(0,areasize.Z-roomsize.Z-1-start_padding.Z)); + random.range(0, areasize.X - roomsize.X - 1 - start_padding.X), + random.range(0, areasize.Y - roomsize.Y - 1 - start_padding.Y), + random.range(0, areasize.Z - roomsize.Z - 1 - start_padding.Z)); /* Check that we're not putting the room to an unknown place, @@ -151,12 +152,11 @@ void DungeonGen::makeDungeon(v3s16 start_padding) fits = true; for (s16 z = 1; z < roomsize.Z - 1; z++) for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) - { + for (s16 x = 1; x < roomsize.X - 1; x++) { v3s16 p = roomplace + v3s16(x, y, z); u32 vi = vm->m_area.index(p); if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_INSIDE) || - vm->m_data[vi].getContent() == CONTENT_IGNORE) { + vm->m_data[vi].getContent() == CONTENT_IGNORE) { fits = false; break; } @@ -174,8 +174,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) v3s16 last_room_center = roomplace + v3s16(roomsize.X / 2, 1, roomsize.Z / 2); u32 room_count = random.range(2, 16); - for (u32 i = 0; i < room_count; i++) - { + for (u32 i = 0; i < room_count; i++) { // Make a room to the determined place makeRoom(roomsize, roomplace); @@ -213,7 +212,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) if (!findPlaceForDoor(doorplace, doordir)) return; - if (random.range(0,1) == 0) + if (random.range(0, 1) == 0) // Make the door makeDoor(doorplace, doordir); else @@ -226,7 +225,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) makeCorridor(doorplace, doordir, corridor_end, corridor_end_dir); // Find a place for a random sized room - roomsize = v3s16(random.range(4,8),random.range(4,6),random.range(4,8)); + roomsize = v3s16(random.range(4, 8), random.range(4, 6), random.range(4, 8)); roomsize += dp.roomsize; m_pos = corridor_end; @@ -234,7 +233,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) if (!findPlaceForRoomDoor(roomsize, doorplace, doordir, roomplace)) return; - if (random.range(0,1) == 0) + if (random.range(0, 1) == 0) // Make the door makeDoor(doorplace, doordir); else @@ -252,11 +251,10 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Make +-X walls for (s16 z = 0; z < roomsize.Z; z++) - for (s16 y = 0; y < roomsize.Y; y++) - { + for (s16 y = 0; y < roomsize.Y; y++) { { v3s16 p = roomplace + v3s16(0, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -265,7 +263,7 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) } { v3s16 p = roomplace + v3s16(roomsize.X - 1, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -276,11 +274,10 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Make +-Z walls for (s16 x = 0; x < roomsize.X; x++) - for (s16 y = 0; y < roomsize.Y; y++) - { + for (s16 y = 0; y < roomsize.Y; y++) { { v3s16 p = roomplace + v3s16(x, y, 0); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -289,7 +286,7 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) } { v3s16 p = roomplace + v3s16(x, y, roomsize.Z - 1); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -300,11 +297,10 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Make +-Y walls (floor and ceiling) for (s16 z = 0; z < roomsize.Z; z++) - for (s16 x = 0; x < roomsize.X; x++) - { + for (s16 x = 0; x < roomsize.X; x++) { { v3s16 p = roomplace + v3s16(x, 0, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -313,7 +309,7 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) } { v3s16 p = roomplace + v3s16(x,roomsize. Y - 1, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -325,41 +321,39 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Fill with air for (s16 z = 1; z < roomsize.Z - 1; z++) for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) - { + for (s16 x = 1; x < roomsize.X - 1; x++) { v3s16 p = roomplace + v3s16(x, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); vm->m_flags[vi] |= VMANIP_FLAG_DUNGEON_UNTOUCHABLE; - vm->m_data[vi] = n_air; + vm->m_data[vi] = n_air; } } void DungeonGen::makeFill(v3s16 place, v3s16 size, - u8 avoid_flags, MapNode n, u8 or_flags) + u8 avoid_flags, MapNode n, u8 or_flags) { for (s16 z = 0; z < size.Z; z++) for (s16 y = 0; y < size.Y; y++) - for (s16 x = 0; x < size.X; x++) - { + for (s16 x = 0; x < size.X; x++) { v3s16 p = place + v3s16(x, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & avoid_flags) continue; vm->m_flags[vi] |= or_flags; - vm->m_data[vi] = n; + vm->m_data[vi] = n; } } void DungeonGen::makeHole(v3s16 place) { - makeFill(place, dp.holesize, 0, - MapNode(CONTENT_AIR), VMANIP_FLAG_DUNGEON_INSIDE); + makeFill(place, dp.holesize, 0, MapNode(CONTENT_AIR), + VMANIP_FLAG_DUNGEON_INSIDE); } @@ -374,8 +368,8 @@ void DungeonGen::makeDoor(v3s16 doorplace, v3s16 doordir) } -void DungeonGen::makeCorridor(v3s16 doorplace, - v3s16 doordir, v3s16 &result_place, v3s16 &result_dir) +void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir, + v3s16 &result_place, v3s16 &result_dir) { makeHole(doorplace); v3s16 p0 = doorplace; @@ -398,22 +392,26 @@ void DungeonGen::makeCorridor(v3s16 doorplace, if (partcount != 0) p.Y += make_stairs; - if (vm->m_area.contains(p) == true && - vm->m_area.contains(p + v3s16(0, 1, 0)) == true) { + if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0))) { if (make_stairs) { - makeFill(p + v3s16(-1, -1, -1), dp.holesize + v3s16(2, 3, 2), - VMANIP_FLAG_DUNGEON_UNTOUCHABLE, MapNode(dp.c_cobble), 0); + makeFill(p + v3s16(-1, -1, -1), + dp.holesize + v3s16(2, 3, 2), + VMANIP_FLAG_DUNGEON_UNTOUCHABLE, + MapNode(dp.c_cobble), + 0); makeHole(p); makeHole(p - dir); - // TODO: fix stairs code so it works 100% (quite difficult) + // TODO: fix stairs code so it works 100% + // (quite difficult) // exclude stairs from the bottom step // exclude stairs from diagonal steps if (((dir.X ^ dir.Z) & 1) && - (((make_stairs == 1) && i != 0) || - ((make_stairs == -1) && i != length - 1))) { - // rotate face 180 deg if making stairs backwards + (((make_stairs == 1) && i != 0) || + ((make_stairs == -1) && i != length - 1))) { + // rotate face 180 deg if + // making stairs backwards int facedir = dir_to_facedir(dir * make_stairs); u32 vi = vm->m_area.index(p.X - dir.X, p.Y - 1, p.Z - dir.Z); @@ -425,8 +423,11 @@ void DungeonGen::makeCorridor(v3s16 doorplace, vm->m_data[vi] = MapNode(dp.c_stair, 0, facedir); } } else { - makeFill(p + v3s16(-1, -1, -1), dp.holesize + v3s16(2, 2, 2), - VMANIP_FLAG_DUNGEON_UNTOUCHABLE, MapNode(dp.c_cobble), 0); + makeFill(p + v3s16(-1, -1, -1), + dp.holesize + v3s16(2, 2, 2), + VMANIP_FLAG_DUNGEON_UNTOUCHABLE, + MapNode(dp.c_cobble), + 0); makeHole(p); } @@ -446,7 +447,7 @@ void DungeonGen::makeCorridor(v3s16 doorplace, dir = random_turn(random, dir); - partlength = random.range(1,length); + partlength = random.range(1, length); make_stairs = 0; if (random.next() % 2 == 0 && partlength >= 3) @@ -460,20 +461,15 @@ void DungeonGen::makeCorridor(v3s16 doorplace, bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir) { - for (u32 i = 0; i < 100; i++) - { + for (u32 i = 0; i < 100; i++) { v3s16 p = m_pos + m_dir; v3s16 p1 = p + v3s16(0, 1, 0); - if (vm->m_area.contains(p) == false - || vm->m_area.contains(p1) == false - || i % 4 == 0) - { + if (!vm->m_area.contains(p) || !vm->m_area.contains(p1) || i % 4 == 0) { randomizeDir(); continue; } - if (vm->getNodeNoExNoEmerge(p).getContent() == dp.c_cobble - && vm->getNodeNoExNoEmerge(p1).getContent() == dp.c_cobble) - { + if (vm->getNodeNoExNoEmerge(p).getContent() == dp.c_cobble && + vm->getNodeNoExNoEmerge(p1).getContent() == dp.c_cobble) { // Found wall, this is a good place! result_place = p; result_dir = m_dir; @@ -485,19 +481,25 @@ bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir) Determine where to move next */ // Jump one up if the actual space is there - if (vm->getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent() == dp.c_cobble - && vm->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() == CONTENT_AIR - && vm->getNodeNoExNoEmerge(p+v3s16(0,2,0)).getContent() == CONTENT_AIR) + if (vm->getNodeNoExNoEmerge(p + + v3s16(0, 0, 0)).getContent() == dp.c_cobble && + vm->getNodeNoExNoEmerge(p + + v3s16(0, 1, 0)).getContent() == CONTENT_AIR && + vm->getNodeNoExNoEmerge(p + + v3s16(0, 2, 0)).getContent() == CONTENT_AIR) p += v3s16(0,1,0); // Jump one down if the actual space is there - if (vm->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() == dp.c_cobble - && vm->getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent() == CONTENT_AIR - && vm->getNodeNoExNoEmerge(p+v3s16(0,-1,0)).getContent() == CONTENT_AIR) - p += v3s16(0,-1,0); + if (vm->getNodeNoExNoEmerge(p + + v3s16(0, 1, 0)).getContent() == dp.c_cobble && + vm->getNodeNoExNoEmerge(p + + v3s16(0, 0, 0)).getContent() == CONTENT_AIR && + vm->getNodeNoExNoEmerge(p + + v3s16(0, -1, 0)).getContent() == CONTENT_AIR) + p += v3s16(0, -1, 0); // Check if walking is now possible - if (vm->getNodeNoExNoEmerge(p).getContent() != CONTENT_AIR - || vm->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() != CONTENT_AIR) - { + if (vm->getNodeNoExNoEmerge(p).getContent() != CONTENT_AIR || + vm->getNodeNoExNoEmerge(p + + v3s16(0, 1, 0)).getContent() != CONTENT_AIR) { // Cannot continue walking here randomizeDir(); continue; @@ -510,10 +512,9 @@ bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir) bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, - v3s16 &result_doordir, v3s16 &result_roomplace) + v3s16 &result_doordir, v3s16 &result_roomplace) { - for (s16 trycount = 0; trycount < 30; trycount++) - { + for (s16 trycount = 0; trycount < 30; trycount++) { v3s16 doorplace; v3s16 doordir; bool r = findPlaceForDoor(doorplace, doordir); @@ -524,16 +525,16 @@ bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, #if 1 if (doordir == v3s16(1, 0, 0)) // X+ roomplace = doorplace + - v3s16(0, -1, random.range(-roomsize.Z + 2, -2)); + v3s16(0, -1, random.range(-roomsize.Z + 2, -2)); if (doordir == v3s16(-1, 0, 0)) // X- roomplace = doorplace + - v3s16(-roomsize.X + 1, -1, random.range(-roomsize.Z + 2, -2)); + v3s16(-roomsize.X + 1, -1, random.range(-roomsize.Z + 2, -2)); if (doordir == v3s16(0, 0, 1)) // Z+ roomplace = doorplace + - v3s16(random.range(-roomsize.X + 2, -2), -1, 0); + v3s16(random.range(-roomsize.X + 2, -2), -1, 0); if (doordir == v3s16(0, 0, -1)) // Z- roomplace = doorplace + - v3s16(random.range(-roomsize.X + 2, -2), -1, -roomsize.Z + 1); + v3s16(random.range(-roomsize.X + 2, -2), -1, -roomsize.Z + 1); #endif #if 0 if (doordir == v3s16(1, 0, 0)) // X+ @@ -550,23 +551,18 @@ bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, bool fits = true; for (s16 z = 1; z < roomsize.Z - 1; z++) for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) - { + for (s16 x = 1; x < roomsize.X - 1; x++) { v3s16 p = roomplace + v3s16(x, y, z); - if (vm->m_area.contains(p) == false) - { + if (!vm->m_area.contains(p)) { fits = false; break; } - if (vm->m_flags[vm->m_area.index(p)] - & VMANIP_FLAG_DUNGEON_INSIDE) - { + if (vm->m_flags[vm->m_area.index(p)] & VMANIP_FLAG_DUNGEON_INSIDE) { fits = false; break; } } - if(fits == false) - { + if (fits == false) { // Find new place continue; } @@ -604,15 +600,12 @@ v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs) v3s16 turn_xz(v3s16 olddir, int t) { v3s16 dir; - if (t == 0) - { + if (t == 0) { // Turn right dir.X = olddir.Z; dir.Z = -olddir.X; dir.Y = olddir.Y; - } - else - { + } else { // Turn left dir.X = -olddir.Z; dir.Z = olddir.X; @@ -627,10 +620,8 @@ v3s16 random_turn(PseudoRandom &random, v3s16 olddir) int turn = random.range(0, 2); v3s16 dir; if (turn == 0) - { // Go straight dir = olddir; - } else if (turn == 1) // Turn right dir = turn_xz(olddir, 0); @@ -641,7 +632,8 @@ v3s16 random_turn(PseudoRandom &random, v3s16 olddir) } -int dir_to_facedir(v3s16 d) { +int dir_to_facedir(v3s16 d) +{ if (abs(d.X) > abs(d.Z)) return d.X < 0 ? 3 : 1; else From 7919318be715e3bf60f01b7c63816a3e5802176d Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 31 Jul 2015 23:29:51 -0400 Subject: [PATCH 255/670] tests: Log exceptions thrown inside of unit tests --- src/unittest/test.h | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/unittest/test.h b/src/unittest/test.h index e1f1721f9..47a441e02 100644 --- a/src/unittest/test.h +++ b/src/unittest/test.h @@ -32,18 +32,22 @@ class TestFailedException : public std::exception { }; // Runs a unit test and reports results -#define TEST(fxn, ...) do { \ - u32 t1 = porting::getTime(PRECISION_MILLI); \ - try { \ - fxn(__VA_ARGS__); \ - dstream << "[PASS] "; \ - } catch (...) { \ - dstream << "[FAIL] "; \ - num_tests_failed++; \ - } \ - num_tests_run++; \ - u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \ - dstream << #fxn << " - " << tdiff << "ms" << std::endl; \ +#define TEST(fxn, ...) do { \ + u32 t1 = porting::getTime(PRECISION_MILLI); \ + try { \ + fxn(__VA_ARGS__); \ + dstream << "[PASS] "; \ + } catch (TestFailedException &e) { \ + dstream << "[FAIL] "; \ + num_tests_failed++; \ + } catch (std::exception &e) { \ + dstream << "Caught unhandled exception: " << e.what() << std::endl; \ + dstream << "[FAIL] "; \ + num_tests_failed++; \ + } \ + num_tests_run++; \ + u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \ + dstream << #fxn << " - " << tdiff << "ms" << std::endl; \ } while (0) // Asserts the specified condition is true, or fails the current unit test From c39a85a88d1f905014c1ced6b87638cdb01e6ddf Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 31 Jul 2015 16:38:36 +0200 Subject: [PATCH 256/670] Android: Add githash header to spare rebuilds after new commits Before, android_version.h got changed at every new commit. Now, we only change it with new minetest releases. Analogous to how cmake does it, we add an android_version_githash.h file that communicates the git hash to C++ code. Also, unify VERS_MAJOR, VERS_MINOR and VERS_PATCH variable calculation inside the whole makefile. --- .gitignore | 1 + build/android/Makefile | 60 +++++++++++++++++++++++++----------------- src/version.cpp | 1 + 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 42cb718a3..12143656a 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ doc/doxygen_* CMakeFiles/* src/CMakeFiles/* src/Makefile +src/android_config_githash.h src/android_version.h src/cmake_config.h src/cmake_config_githash.h diff --git a/build/android/Makefile b/build/android/Makefile index 055386361..4ccca56b5 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -15,6 +15,14 @@ ROOT = $(shell pwd) GAMES_TO_COPY = minetest_game + +VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ') +VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ') +VERSION_PATCH := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ') + ################################################################################ # Android Version code # Increase for each build! @@ -161,7 +169,8 @@ endif $(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \ $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \ $(OPENSSL_TIMESTAMP) curl_binary \ - $(ROOT)/jni/src/android_version.h + $(ROOT)/jni/src/android_version.h \ + $(ROOT)/jni/src/android_version_githash.h debug : $(PATHCFGFILE) export NDEBUG=; \ @@ -773,7 +782,7 @@ clean_assets : apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \ - sqlite3_download + $(ROOT)/jni/src/android_version_githash.h sqlite3_download @export NDEBUG=$$NDEBUG; $(MAKE) manifest; \ export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ export ANDROID_HOME=${SDKFOLDER}; \ @@ -819,44 +828,47 @@ clean_all : sleep 1; \ $(RM) -r gen libs obj deps bin Debug and_env +$(ROOT)/jni/src/android_version_githash.h : prep_srcdir + @export VERSION_FILE=${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 + + $(ROOT)/jni/src/android_version.h : prep_srcdir @export VERSION_FILE=${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"; \ - export CMAKE_FILE=${ROOT}/../../CMakeLists.txt; \ - export VERSION_MAJOR=$$(cat $${CMAKE_FILE} | \ - grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' '); \ - export VERSION_MINOR=$$(cat $${CMAKE_FILE} | \ - grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' '); \ - export VERSION_PATCH=$$(cat $${CMAKE_FILE} | \ - grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' '); \ - echo "#define VERSION_MAJOR $${VERSION_MAJOR}"; \ - echo "#define VERSION_MINOR $${VERSION_MINOR}"; \ - echo "#define VERSION_PATCH $${VERSION_PATCH}"; \ - 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 "#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}; \ + mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ else \ - rm $${VERSION_FILE_NEW}; \ + rm "$${VERSION_FILE_NEW}"; \ fi manifest : - @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \ - VERS_MINOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}'); \ - VERS_PATCH=$$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}'); \ - BASE_VERSION="$$VERS_MAJOR.$$VERS_MINOR.$$VERS_PATCH"; \ + @BASE_VERSION="${VERS_MAJOR}.${VERS_MINOR}.${VERS_PATCH}"; \ if [ "${NDEBUG}x" != "x" ] ; then \ DBG=''; \ DBG_FLAG="android:debuggable=\"false\""; \ diff --git a/src/version.cpp b/src/version.cpp index ed167cd24..ca206bded 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #if defined(__ANDROID__) #include "android_version.h" + #include "android_version_githash.h" #elif defined(USE_CMAKE_CONFIG_H) #include "cmake_config_githash.h" #endif From 79e2647556773d46cc0299e73ca23c41a153ff2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sat, 1 Aug 2015 13:53:15 +0200 Subject: [PATCH 257/670] src/network/connection.h: Fix race condition --- src/network/connection.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/network/connection.h b/src/network/connection.h index b1f9e70a8..c48da2c70 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -1053,7 +1053,11 @@ protected: void PrintInfo(std::ostream &out); void PrintInfo(); - std::list getPeerIDs() { return m_peer_ids; } + std::list getPeerIDs() + { + JMutexAutoLock peerlock(m_peers_mutex); + return m_peer_ids; + } UDPSocket m_udpSocket; MutexedQueue m_command_queue; From 67997af67fbf7c95e78574f810aa322275b3eb66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sat, 1 Aug 2015 14:07:12 +0200 Subject: [PATCH 258/670] src/environment.cpp: Fix NULL pointer dereference --- src/environment.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index cf0ebacfd..5bed11476 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1820,27 +1820,29 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) bool stays_in_same_block = false; bool data_changed = true; - if(obj->m_static_exists){ - if(obj->m_static_block == blockpos_o) + if (obj->m_static_exists) { + if (obj->m_static_block == blockpos_o) stays_in_same_block = true; MapBlock *block = m_map->emergeBlock(obj->m_static_block, false); - std::map::iterator n = + if (block) { + std::map::iterator n = block->m_static_objects.m_active.find(id); - if(n != block->m_static_objects.m_active.end()){ - StaticObject static_old = n->second; + if (n != block->m_static_objects.m_active.end()) { + StaticObject static_old = n->second; - float save_movem = obj->getMinimumSavedMovement(); + float save_movem = obj->getMinimumSavedMovement(); - if(static_old.data == staticdata_new && - (static_old.pos - objectpos).getLength() < save_movem) - data_changed = false; - } else { - errorstream<<"ServerEnvironment::deactivateFarObjects(): " + if (static_old.data == staticdata_new && + (static_old.pos - objectpos).getLength() < save_movem) + data_changed = false; + } else { + errorstream<<"ServerEnvironment::deactivateFarObjects(): " <<"id="<m_static_block)< Date: Sat, 1 Aug 2015 00:34:09 -0400 Subject: [PATCH 259/670] Clean up util/serialization.{cpp,h} and add unit tests --- src/unittest/test_serialization.cpp | 120 ++++++ src/util/serialize.cpp | 14 +- src/util/serialize.h | 547 ++++++++++++---------------- 3 files changed, 364 insertions(+), 317 deletions(-) diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index b180df54e..7e58dadca 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -38,10 +38,14 @@ public: void testDeSerializeString(); void testDeSerializeWideString(); void testDeSerializeLongString(); + void testStreamRead(); + void testStreamWrite(); std::string teststring2; std::wstring teststring2_w; std::string teststring2_w_encoded; + + static const u8 test_serialized_data[12 * 13]; }; static TestSerialization g_test_instance; @@ -58,6 +62,8 @@ void TestSerialization::runTests(IGameDef *gamedef) TEST(testDeSerializeLongString); TEST(testSerializeJsonString); TEST(testSerializeHex); + TEST(testStreamRead); + TEST(testStreamWrite); } //////////////////////////////////////////////////////////////////////////////// @@ -271,3 +277,117 @@ void TestSerialization::testSerializeHex() UASSERT(serializeHexString(mkstr("\x00\x0a\xb0\x63\x1f\x00\xff"), true) == "00 0a b0 63 1f 00 ff"); } + + +void TestSerialization::testStreamRead() +{ + std::string datastr( + (const char *)test_serialized_data, + sizeof(test_serialized_data)); + std::istringstream is(datastr, std::ios_base::binary); + + UASSERT(readU8(is) == 0x11); + UASSERT(readU16(is) == 0x2233); + UASSERT(readU32(is) == 0x44556677); + UASSERT(readU64(is) == 0x8899AABBCCDDEEFF); + + UASSERT(readS8(is) == -128); + UASSERT(readS16(is) == 30000); + UASSERT(readS32(is) == -6); + UASSERT(readS64(is) == -43); + + UASSERT(fabs(readF1000(is) - 53.534f) < 0.005); + UASSERT(fabs(readF1000(is) - -300000.32f) < 0.05); + UASSERT(fabs(readF1000(is) - -2147483.f) < 0.05); + UASSERT(fabs(readF1000(is) - 2147483.f) < 0.05); + + UASSERT(deSerializeString(is) == "foobar!"); + + UASSERT(readV2S16(is) == v2s16(500, 500)); + UASSERT(readV3S16(is) == v3s16(4207, 604, -30)); + UASSERT(readV2S32(is) == v2s32(1920, 1080)); + UASSERT(readV3S32(is) == v3s32(-400, 6400054, 290549855)); + + v2f vec2 = readV2F1000(is); + UASSERT(fabs(vec2.X - 500.656f) < 0.005); + UASSERT(fabs(vec2.Y - 350.345f) < 0.005); + + UASSERT(deSerializeWideString(is) == L"\x02~woof~\x5455"); + + v3f vec3 = readV3F1000(is); + UASSERT(fabs(vec3.X - 500.f) < 0.005); + UASSERT(fabs(vec3.Y - 10024.2f) < 0.005); + UASSERT(fabs(vec3.Z - -192.54f) < 0.005); + + UASSERT(readARGB8(is) == video::SColor(255, 128, 50, 128)); + + UASSERT(deSerializeLongString(is) == "some longer string here"); + + UASSERT(is.rdbuf()->in_avail() == 2); + UASSERT(readU16(is) == 0xF00D); + UASSERT(is.rdbuf()->in_avail() == 0); +} + + +void TestSerialization::testStreamWrite() +{ + std::ostringstream os(std::ios_base::binary); + std::string data; + + writeU8(os, 0x11); + writeU16(os, 0x2233); + writeU32(os, 0x44556677); + writeU64(os, 0x8899AABBCCDDEEFF); + + writeS8(os, -128); + writeS16(os, 30000); + writeS32(os, -6); + writeS64(os, -43); + + writeF1000(os, 53.53467f); + writeF1000(os, -300000.32f); + writeF1000(os, -2147483.f); + writeF1000(os, 2147483.f); + + os << serializeString("foobar!"); + + data = os.str(); + UASSERT(data.size() < sizeof(test_serialized_data)); + UASSERT(!memcmp(&data[0], test_serialized_data, data.size())); + + writeV2S16(os, v2s16(500, 500)); + writeV3S16(os, v3s16(4207, 604, -30)); + writeV2S32(os, v2s32(1920, 1080)); + writeV3S32(os, v3s32(-400, 6400054, 290549855)); + writeV2F1000(os, v2f(500.65661f, 350.34567f)); + + os << serializeWideString(L"\x02~woof~\x5455"); + + writeV3F1000(os, v3f(500, 10024.2f, -192.54f)); + writeARGB8(os, video::SColor(255, 128, 50, 128)); + + os << serializeLongString("some longer string here"); + + writeU16(os, 0xF00D); + + data = os.str(); + UASSERT(data.size() == sizeof(test_serialized_data)); + UASSERT(!memcmp(&data[0], test_serialized_data, sizeof(test_serialized_data))); +} + + +const u8 TestSerialization::test_serialized_data[12 * 13] = { + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0x80, 0x75, 0x30, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x00, 0x00, 0xd1, 0x1e, 0xee, 0x1e, + 0x5b, 0xc0, 0x80, 0x00, 0x02, 0x80, 0x7F, 0xFF, 0xFD, 0x80, 0x00, 0x07, + 0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72, 0x21, 0x01, 0xf4, 0x01, 0xf4, 0x10, + 0x6f, 0x02, 0x5c, 0xff, 0xe2, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x04, + 0x38, 0xff, 0xff, 0xfe, 0x70, 0x00, 0x61, 0xa8, 0x36, 0x11, 0x51, 0x70, + 0x5f, 0x00, 0x07, 0xa3, 0xb0, 0x00, 0x05, 0x58, 0x89, 0x00, 0x08, 0x00, + 0x02, 0x00, 0x7e, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x66, 0x00, + 0x7e, 0x54, 0x55, 0x00, 0x07, 0xa1, 0x20, 0x00, 0x98, 0xf5, 0x08, 0xff, + 0xfd, 0x0f, 0xe4, 0xff, 0x80, 0x32, 0x80, 0x00, 0x00, 0x00, 0x17, 0x73, + 0x6f, 0x6d, 0x65, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x65, 0x72, 0x65, 0xF0, 0x0D, +}; diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp index 0d38b9608..c0168776e 100644 --- a/src/util/serialize.cpp +++ b/src/util/serialize.cpp @@ -37,7 +37,7 @@ std::string serializeString(const std::string &plain) std::string s; char buf[2]; - if (plain.size() > 65535) + if (plain.size() > STRING_MAX_LEN) throw SerializationError("String too long for serializeString"); writeU16((u8 *)&buf[0], plain.size()); @@ -79,8 +79,8 @@ std::string serializeWideString(const std::wstring &plain) std::string s; char buf[2]; - if (plain.size() > 65535) - throw SerializationError("String too long for serializeString"); + if (plain.size() > WIDE_STRING_MAX_LEN) + throw SerializationError("String too long for serializeWideString"); writeU16((u8 *)buf, plain.size()); s.append(buf, 2); @@ -99,7 +99,7 @@ std::wstring deSerializeWideString(std::istream &is) is.read(buf, 2); if (is.gcount() != 2) - throw SerializationError("deSerializeString: size not read"); + throw SerializationError("deSerializeWideString: size not read"); u16 s_size = readU16((u8 *)buf); if (s_size == 0) @@ -127,7 +127,7 @@ std::string serializeLongString(const std::string &plain) { char buf[4]; - if (plain.size() > LONG_STRING_MAX) + if (plain.size() > LONG_STRING_MAX_LEN) throw SerializationError("String too long for serializeLongString"); writeU32((u8*)&buf[0], plain.size()); @@ -151,7 +151,7 @@ std::string deSerializeLongString(std::istream &is) return s; // We don't really want a remote attacker to force us to allocate 4GB... - if (s_size > LONG_STRING_MAX) { + if (s_size > LONG_STRING_MAX_LEN) { throw SerializationError("deSerializeLongString: " "string too long: " + itos(s_size) + " bytes"); } @@ -159,7 +159,7 @@ std::string deSerializeLongString(std::istream &is) Buffer buf2(s_size); is.read(&buf2[0], s_size); if (is.gcount() != s_size) - throw SerializationError("deSerializeString: couldn't read all chars"); + throw SerializationError("deSerializeLongString: couldn't read all chars"); s.reserve(s_size); s.append(&buf2[0], s_size); diff --git a/src/util/serialize.h b/src/util/serialize.h index 60f25d740..67b10d8fb 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -32,185 +32,146 @@ with this program; if not, write to the Free Software Foundation, Inc., #define FIXEDPOINT_FACTOR 1000.0f #define FIXEDPOINT_INVFACTOR (1.0f/FIXEDPOINT_FACTOR) +#define STRING_MAX_LEN 0xFFFF +#define WIDE_STRING_MAX_LEN 0xFFFF +// 64 MB ought to be enough for anybody - Billy G. +#define LONG_STRING_MAX_LEN (64 * 1024 * 1024) + + #if HAVE_ENDIAN_H // use machine native byte swapping routines // Note: memcpy below is optimized out by modern compilers -inline void writeU64(u8* data, u64 i) -{ - u64 val = htobe64(i); - memcpy(data, &val, 8); -} - -inline void writeU32(u8* data, u32 i) -{ - u32 val = htobe32(i); - memcpy(data, &val, 4); -} - -inline void writeU16(u8* data, u16 i) -{ - u16 val = htobe16(i); - memcpy(data, &val, 2); -} - -inline u64 readU64(const u8* data) -{ - u64 val; - memcpy(&val, data, 8); - return be64toh(val); -} - -inline u32 readU32(const u8* data) -{ - u32 val; - memcpy(&val, data, 4); - return be32toh(val); -} - -inline u16 readU16(const u8* data) +inline u16 readU16(const u8 *data) { u16 val; memcpy(&val, data, 2); return be16toh(val); } -#else -// generic byte-swapping implementation - -inline void writeU64(u8 *data, u64 i) +inline u32 readU32(const u8 *data) { - data[0] = ((i>>56)&0xff); - data[1] = ((i>>48)&0xff); - data[2] = ((i>>40)&0xff); - data[3] = ((i>>32)&0xff); - data[4] = ((i>>24)&0xff); - data[5] = ((i>>16)&0xff); - data[6] = ((i>> 8)&0xff); - data[7] = ((i>> 0)&0xff); -} - -inline void writeU32(u8 *data, u32 i) -{ - data[0] = ((i>>24)&0xff); - data[1] = ((i>>16)&0xff); - data[2] = ((i>> 8)&0xff); - data[3] = ((i>> 0)&0xff); -} - -inline void writeU16(u8 *data, u16 i) -{ - data[0] = ((i>> 8)&0xff); - data[1] = ((i>> 0)&0xff); + u32 val; + memcpy(&val, data, 4); + return be32toh(val); } inline u64 readU64(const u8 *data) { - return ((u64)data[0]<<56) | ((u64)data[1]<<48) - | ((u64)data[2]<<40) | ((u64)data[3]<<32) - | ((u64)data[4]<<24) | ((u64)data[5]<<16) - | ((u64)data[6]<<8) | ((u64)data[7]<<0); + u64 val; + memcpy(&val, data, 8); + return be64toh(val); +} + +inline void writeU16(u8 *data, u16 i) +{ + u16 val = htobe16(i); + memcpy(data, &val, 2); +} + +inline void writeU32(u8 *data, u32 i) +{ + u32 val = htobe32(i); + memcpy(data, &val, 4); +} + +inline void writeU64(u8 *data, u64 i) +{ + u64 val = htobe64(i); + memcpy(data, &val, 8); +} + +#else +// generic byte-swapping implementation + +inline u16 readU16(const u8 *data) +{ + return + ((u16)data[0] << 8) | ((u16)data[1] << 0); } inline u32 readU32(const u8 *data) { - return (data[0]<<24) | (data[1]<<16) | (data[2]<<8) | (data[3]<<0); + return + ((u32)data[0] << 24) | ((u32)data[1] << 16) | + ((u32)data[2] << 8) | ((u32)data[3] << 0); } -inline u16 readU16(const u8 *data) +inline u64 readU64(const u8 *data) { - return (data[0]<<8) | (data[1]<<0); + return + ((u64)data[0] << 56) | ((u64)data[1] << 48) | + ((u64)data[2] << 40) | ((u64)data[3] << 32) | + ((u64)data[4] << 24) | ((u64)data[5] << 16) | + ((u64)data[6] << 8) | ((u64)data[7] << 0); } -#endif - -inline void writeU8(u8 *data, u8 i) +inline void writeU16(u8 *data, u16 i) { - data[0] = ((i>> 0)&0xff); + data[0] = (i >> 8) & 0xFF; + data[1] = (i >> 0) & 0xFF; } +inline void writeU32(u8 *data, u32 i) +{ + data[0] = (i >> 24) & 0xFF; + data[1] = (i >> 16) & 0xFF; + data[2] = (i >> 8) & 0xFF; + data[3] = (i >> 0) & 0xFF; +} + +inline void writeU64(u8 *data, u64 i) +{ + data[0] = (i >> 56) & 0xFF; + data[1] = (i >> 48) & 0xFF; + data[2] = (i >> 40) & 0xFF; + data[3] = (i >> 32) & 0xFF; + data[4] = (i >> 24) & 0xFF; + data[5] = (i >> 16) & 0xFF; + data[6] = (i >> 8) & 0xFF; + data[7] = (i >> 0) & 0xFF; +} + +#endif // HAVE_ENDIAN_H + +//////////////// read routines //////////////// + inline u8 readU8(const u8 *data) { - return (data[0]<<0); + return ((u8)data[0] << 0); } -inline void writeS32(u8 *data, s32 i){ - writeU32(data, (u32)i); -} -inline s32 readS32(const u8 *data){ - return (s32)readU32(data); -} - -inline void writeS16(u8 *data, s16 i){ - writeU16(data, (u16)i); -} -inline s16 readS16(const u8 *data){ - return (s16)readU16(data); -} - -inline void writeS8(u8 *data, s8 i){ - writeU8(data, (u8)i); -} -inline s8 readS8(const u8 *data){ +inline s8 readS8(const u8 *data) +{ return (s8)readU8(data); } -inline void writeF1000(u8 *data, f32 i){ - writeS32(data, i*FIXEDPOINT_FACTOR); -} -inline f32 readF1000(const u8 *data){ - return (f32)readS32(data)*FIXEDPOINT_INVFACTOR; +inline s16 readS16(const u8 *data) +{ + return (s16)readU16(data); } -inline void writeV3S32(u8 *data, v3s32 p) +inline s32 readS32(const u8 *data) { - writeS32(&data[0], p.X); - writeS32(&data[4], p.Y); - writeS32(&data[8], p.Z); + return (s32)readU32(data); } -inline v3s32 readV3S32(const u8 *data) + +inline s64 readS64(const u8 *data) { - v3s32 p; - p.X = readS32(&data[0]); - p.Y = readS32(&data[4]); - p.Z = readS32(&data[8]); + return (s64)readU64(data); +} + +inline f32 readF1000(const u8 *data) +{ + return (f32)readS32(data) * FIXEDPOINT_INVFACTOR; +} + +inline video::SColor readARGB8(const u8 *data) +{ + video::SColor p(readU32(data)); return p; } -inline void writeV3F1000(u8 *data, v3f p) -{ - writeF1000(&data[0], p.X); - writeF1000(&data[4], p.Y); - writeF1000(&data[8], p.Z); -} -inline v3f readV3F1000(const u8 *data) -{ - v3f p; - p.X = (float)readF1000(&data[0]); - p.Y = (float)readF1000(&data[4]); - p.Z = (float)readF1000(&data[8]); - return p; -} - -inline void writeV2F1000(u8 *data, v2f p) -{ - writeF1000(&data[0], p.X); - writeF1000(&data[4], p.Y); -} -inline v2f readV2F1000(const u8 *data) -{ - v2f p; - p.X = (float)readF1000(&data[0]); - p.Y = (float)readF1000(&data[4]); - return p; -} - -inline void writeV2S16(u8 *data, v2s16 p) -{ - writeS16(&data[0], p.X); - writeS16(&data[2], p.Y); -} - inline v2s16 readV2S16(const u8 *data) { v2s16 p; @@ -219,27 +180,6 @@ inline v2s16 readV2S16(const u8 *data) return p; } -inline void writeV2S32(u8 *data, v2s32 p) -{ - writeS32(&data[0], p.X); - writeS32(&data[4], p.Y); -} - -inline v2s32 readV2S32(const u8 *data) -{ - v2s32 p; - p.X = readS32(&data[0]); - p.Y = readS32(&data[4]); - return p; -} - -inline void writeV3S16(u8 *data, v3s16 p) -{ - writeS16(&data[0], p.X); - writeS16(&data[2], p.Y); - writeS16(&data[4], p.Z); -} - inline v3s16 readV3S16(const u8 *data) { v3s16 p; @@ -249,185 +189,173 @@ inline v3s16 readV3S16(const u8 *data) return p; } +inline v2s32 readV2S32(const u8 *data) +{ + v2s32 p; + p.X = readS32(&data[0]); + p.Y = readS32(&data[4]); + return p; +} + +inline v3s32 readV3S32(const u8 *data) +{ + v3s32 p; + p.X = readS32(&data[0]); + p.Y = readS32(&data[4]); + p.Z = readS32(&data[8]); + return p; +} + +inline v2f readV2F1000(const u8 *data) +{ + v2f p; + p.X = (float)readF1000(&data[0]); + p.Y = (float)readF1000(&data[4]); + return p; +} + +inline v3f readV3F1000(const u8 *data) +{ + v3f p; + p.X = (float)readF1000(&data[0]); + p.Y = (float)readF1000(&data[4]); + p.Z = (float)readF1000(&data[8]); + return p; +} + +/////////////// write routines //////////////// + +inline void writeU8(u8 *data, u8 i) +{ + data[0] = (i >> 0) & 0xFF; +} + +inline void writeS8(u8 *data, s8 i) +{ + writeU8(data, (u8)i); +} + +inline void writeS16(u8 *data, s16 i) +{ + writeU16(data, (u16)i); +} + +inline void writeS32(u8 *data, s32 i) +{ + writeU32(data, (u32)i); +} + +inline void writeS64(u8 *data, s64 i) +{ + writeU64(data, (u64)i); +} + +inline void writeF1000(u8 *data, f32 i) +{ + writeS32(data, i * FIXEDPOINT_FACTOR); +} + inline void writeARGB8(u8 *data, video::SColor p) { writeU32(data, p.color); } -inline video::SColor readARGB8(const u8 *data) +inline void writeV2S16(u8 *data, v2s16 p) { - video::SColor p(readU32(data)); - return p; + writeS16(&data[0], p.X); + writeS16(&data[2], p.Y); } -/* - The above stuff directly interfaced to iostream -*/ - -inline void writeU8(std::ostream &os, u8 p) +inline void writeV3S16(u8 *data, v3s16 p) { - char buf[1]; - writeU8((u8*)buf, p); - os.write(buf, 1); -} -inline u8 readU8(std::istream &is) -{ - char buf[1] = {0}; - is.read(buf, 1); - return readU8((u8*)buf); + writeS16(&data[0], p.X); + writeS16(&data[2], p.Y); + writeS16(&data[4], p.Z); } -inline void writeU16(std::ostream &os, u16 p) +inline void writeV2S32(u8 *data, v2s32 p) { - char buf[2]; - writeU16((u8*)buf, p); - os.write(buf, 2); -} -inline u16 readU16(std::istream &is) -{ - char buf[2] = {0}; - is.read(buf, 2); - return readU16((u8*)buf); + writeS32(&data[0], p.X); + writeS32(&data[4], p.Y); } -inline void writeU32(std::ostream &os, u32 p) +inline void writeV3S32(u8 *data, v3s32 p) { - char buf[4]; - writeU32((u8*)buf, p); - os.write(buf, 4); -} -inline u32 readU32(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readU32((u8*)buf); + writeS32(&data[0], p.X); + writeS32(&data[4], p.Y); + writeS32(&data[8], p.Z); } -inline void writeS32(std::ostream &os, s32 p) +inline void writeV2F1000(u8 *data, v2f p) { - writeU32(os, (u32) p); -} -inline s32 readS32(std::istream &is) -{ - return (s32)readU32(is); + writeF1000(&data[0], p.X); + writeF1000(&data[4], p.Y); } -inline void writeS16(std::ostream &os, s16 p) +inline void writeV3F1000(u8 *data, v3f p) { - writeU16(os, (u16) p); -} -inline s16 readS16(std::istream &is) -{ - return (s16)readU16(is); + writeF1000(&data[0], p.X); + writeF1000(&data[4], p.Y); + writeF1000(&data[8], p.Z); } -inline void writeS8(std::ostream &os, s8 p) -{ - writeU8(os, (u8) p); -} -inline s8 readS8(std::istream &is) -{ - return (s8)readU8(is); -} +//// +//// Iostream wrapper for data read/write +//// -inline void writeF1000(std::ostream &os, f32 p) -{ - char buf[4]; - writeF1000((u8*)buf, p); - os.write(buf, 4); -} -inline f32 readF1000(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readF1000((u8*)buf); -} +#define MAKE_STREAM_READ_FXN(T, N, S) \ + inline T read ## N(std::istream &is) \ + { \ + char buf[S] = {0}; \ + is.read(buf, sizeof(buf)); \ + return read ## N((u8 *)buf); \ + } -inline void writeV3F1000(std::ostream &os, v3f p) -{ - char buf[12]; - writeV3F1000((u8*)buf, p); - os.write(buf, 12); -} -inline v3f readV3F1000(std::istream &is) -{ - char buf[12]; - is.read(buf, 12); - return readV3F1000((u8*)buf); -} +#define MAKE_STREAM_WRITE_FXN(T, N, S) \ + inline void write ## N(std::ostream &os, T val) \ + { \ + char buf[S]; \ + write ## N((u8 *)buf, val); \ + os.write(buf, sizeof(buf)); \ + } -inline void writeV2F1000(std::ostream &os, v2f p) -{ - char buf[8]; - writeV2F1000((u8*)buf, p); - os.write(buf, 8); -} -inline v2f readV2F1000(std::istream &is) -{ - char buf[8] = {0}; - is.read(buf, 8); - return readV2F1000((u8*)buf); -} +MAKE_STREAM_READ_FXN(u8, U8, 1); +MAKE_STREAM_READ_FXN(u16, U16, 2); +MAKE_STREAM_READ_FXN(u32, U32, 4); +MAKE_STREAM_READ_FXN(u64, U64, 8); +MAKE_STREAM_READ_FXN(s8, S8, 1); +MAKE_STREAM_READ_FXN(s16, S16, 2); +MAKE_STREAM_READ_FXN(s32, S32, 4); +MAKE_STREAM_READ_FXN(s64, S64, 8); +MAKE_STREAM_READ_FXN(f32, F1000, 4); +MAKE_STREAM_READ_FXN(v2s16, V2S16, 4); +MAKE_STREAM_READ_FXN(v3s16, V3S16, 6); +MAKE_STREAM_READ_FXN(v2s32, V2S32, 8); +MAKE_STREAM_READ_FXN(v3s32, V3S32, 12); +MAKE_STREAM_READ_FXN(v2f, V2F1000, 8); +MAKE_STREAM_READ_FXN(v3f, V3F1000, 12); +MAKE_STREAM_READ_FXN(video::SColor, ARGB8, 4); -inline void writeV2S16(std::ostream &os, v2s16 p) -{ - char buf[4]; - writeV2S16((u8*)buf, p); - os.write(buf, 4); -} -inline v2s16 readV2S16(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readV2S16((u8*)buf); -} +MAKE_STREAM_WRITE_FXN(u8, U8, 1); +MAKE_STREAM_WRITE_FXN(u16, U16, 2); +MAKE_STREAM_WRITE_FXN(u32, U32, 4); +MAKE_STREAM_WRITE_FXN(u64, U64, 8); +MAKE_STREAM_WRITE_FXN(s8, S8, 1); +MAKE_STREAM_WRITE_FXN(s16, S16, 2); +MAKE_STREAM_WRITE_FXN(s32, S32, 4); +MAKE_STREAM_WRITE_FXN(s64, S64, 8); +MAKE_STREAM_WRITE_FXN(f32, F1000, 4); +MAKE_STREAM_WRITE_FXN(v2s16, V2S16, 4); +MAKE_STREAM_WRITE_FXN(v3s16, V3S16, 6); +MAKE_STREAM_WRITE_FXN(v2s32, V2S32, 8); +MAKE_STREAM_WRITE_FXN(v3s32, V3S32, 12); +MAKE_STREAM_WRITE_FXN(v2f, V2F1000, 8); +MAKE_STREAM_WRITE_FXN(v3f, V3F1000, 12); +MAKE_STREAM_WRITE_FXN(video::SColor, ARGB8, 4); -inline void writeV2S32(std::ostream &os, v2s32 p) -{ - char buf[8]; - writeV2S32((u8*)buf, p); - os.write(buf, 8); -} -inline v2s32 readV2S32(std::istream &is) -{ - char buf[8] = {0}; - is.read(buf, 8); - return readV2S32((u8*)buf); -} - -inline void writeV3S16(std::ostream &os, v3s16 p) -{ - char buf[6]; - writeV3S16((u8*)buf, p); - os.write(buf, 6); -} -inline v3s16 readV3S16(std::istream &is) -{ - char buf[6] = {0}; - is.read(buf, 6); - return readV3S16((u8*)buf); -} - -inline void writeARGB8(std::ostream &os, video::SColor p) -{ - char buf[4]; - writeARGB8((u8*)buf, p); - os.write(buf, 4); -} - -inline video::SColor readARGB8(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readARGB8((u8*)buf); -} - -/* - More serialization stuff -*/ - -// 64 MB ought to be enough for anybody - Billy G. -#define LONG_STRING_MAX (64 * 1024 * 1024) +//// +//// More serialization stuff +//// // Creates a string with the length as the first two bytes std::string serializeString(const std::string &plain); @@ -467,4 +395,3 @@ bool deSerializeStringToStruct(std::string valstr, std::string format, void *out, size_t olen); #endif - From 42cf5e972d1e27a92048712bc79806e1a088b96c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 1 Aug 2015 01:03:51 -0400 Subject: [PATCH 260/670] Improve accuracy and safety of float serialization Multiplying by a factor of 1/1000.f (rather than dividing by 1000.f) directly introduces an error of 1 ULP. With this patch, an exact comparison of a floating point literal with the deserialized F1000 form representing it is now guaranteed to be successful. In addition, the maxmium and minimum safely representible floating point numbers are now well-defined as constants. --- src/unittest/test_serialization.cpp | 23 ++++++++--------------- src/util/serialize.h | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index 7e58dadca..49f348e9c 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -296,10 +296,10 @@ void TestSerialization::testStreamRead() UASSERT(readS32(is) == -6); UASSERT(readS64(is) == -43); - UASSERT(fabs(readF1000(is) - 53.534f) < 0.005); - UASSERT(fabs(readF1000(is) - -300000.32f) < 0.05); - UASSERT(fabs(readF1000(is) - -2147483.f) < 0.05); - UASSERT(fabs(readF1000(is) - 2147483.f) < 0.05); + UASSERT(readF1000(is) == 53.534f); + UASSERT(readF1000(is) == -300000.32f); + UASSERT(readF1000(is) == F1000_MIN); + UASSERT(readF1000(is) == F1000_MAX); UASSERT(deSerializeString(is) == "foobar!"); @@ -307,18 +307,11 @@ void TestSerialization::testStreamRead() UASSERT(readV3S16(is) == v3s16(4207, 604, -30)); UASSERT(readV2S32(is) == v2s32(1920, 1080)); UASSERT(readV3S32(is) == v3s32(-400, 6400054, 290549855)); - - v2f vec2 = readV2F1000(is); - UASSERT(fabs(vec2.X - 500.656f) < 0.005); - UASSERT(fabs(vec2.Y - 350.345f) < 0.005); + UASSERT(readV2F1000(is) == v2f(500.656f, 350.345f)); UASSERT(deSerializeWideString(is) == L"\x02~woof~\x5455"); - v3f vec3 = readV3F1000(is); - UASSERT(fabs(vec3.X - 500.f) < 0.005); - UASSERT(fabs(vec3.Y - 10024.2f) < 0.005); - UASSERT(fabs(vec3.Z - -192.54f) < 0.005); - + UASSERT(readV3F1000(is) == v3f(500, 10024.2f, -192.54f)); UASSERT(readARGB8(is) == video::SColor(255, 128, 50, 128)); UASSERT(deSerializeLongString(is) == "some longer string here"); @@ -346,8 +339,8 @@ void TestSerialization::testStreamWrite() writeF1000(os, 53.53467f); writeF1000(os, -300000.32f); - writeF1000(os, -2147483.f); - writeF1000(os, 2147483.f); + writeF1000(os, F1000_MIN); + writeF1000(os, F1000_MAX); os << serializeString("foobar!"); diff --git a/src/util/serialize.h b/src/util/serialize.h index 67b10d8fb..bf0d9c863 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UTIL_SERIALIZE_HEADER #include "../irrlichttypes_bloated.h" +#include "../debug.h" // for assert #include "config.h" #if HAVE_ENDIAN_H #include @@ -30,7 +31,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #define FIXEDPOINT_FACTOR 1000.0f -#define FIXEDPOINT_INVFACTOR (1.0f/FIXEDPOINT_FACTOR) + +// 0x7FFFFFFF / 1000.0f is not serializable. +// The limited float precision at this magnitude may cause the result to round +// to a greater value than can be represented by a 32 bit integer when increased +// by a factor of FIXEDPOINT_FACTOR. As a result, [F1000_MIN..F1000_MAX] does +// 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 STRING_MAX_LEN 0xFFFF #define WIDE_STRING_MAX_LEN 0xFFFF @@ -163,7 +173,7 @@ inline s64 readS64(const u8 *data) inline f32 readF1000(const u8 *data) { - return (f32)readS32(data) * FIXEDPOINT_INVFACTOR; + return (f32)readS32(data) / FIXEDPOINT_FACTOR; } inline video::SColor readARGB8(const u8 *data) @@ -252,6 +262,7 @@ inline void writeS64(u8 *data, s64 i) inline void writeF1000(u8 *data, f32 i) { + assert(i >= F1000_MIN && i <= F1000_MAX); writeS32(data, i * FIXEDPOINT_FACTOR); } From ebe7b31538d44277db0eeccfddef13917baa2ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sun, 2 Aug 2015 01:31:57 +0200 Subject: [PATCH 261/670] src/client.cpp: Fix mapper memory leak --- src/client.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index fdabfa2d8..d4d3b6df6 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -291,7 +291,7 @@ Client::~Client() m_mesh_update_thread.Stop(); m_mesh_update_thread.Wait(); - while(!m_mesh_update_thread.m_queue_out.empty()) { + while (!m_mesh_update_thread.m_queue_out.empty()) { MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx(); delete r.mesh; } @@ -300,20 +300,22 @@ Client::~Client() delete m_inventory_from_server; // Delete detached inventories - for(std::map::iterator + for (std::map::iterator i = m_detached_inventories.begin(); - i != m_detached_inventories.end(); i++){ + i != m_detached_inventories.end(); ++i) { delete i->second; } // cleanup 3d model meshes on client shutdown while (m_device->getSceneManager()->getMeshCache()->getMeshCount() != 0) { - scene::IAnimatedMesh * mesh = + scene::IAnimatedMesh *mesh = m_device->getSceneManager()->getMeshCache()->getMeshByIndex(0); if (mesh != NULL) m_device->getSceneManager()->getMeshCache()->removeMesh(mesh); } + + delete m_mapper; } void Client::connect(Address address, From c4287a0d681abd4728f978d2ac55285cf6a6ecad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sun, 2 Aug 2015 00:16:31 +0200 Subject: [PATCH 262/670] src/wieldmesh.cpp: Fix mesh extrusion memory leak --- src/wieldmesh.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 56c84b959..391a456ab 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -37,7 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define MIN_EXTRUSION_MESH_RESOLUTION 16 #define MAX_EXTRUSION_MESH_RESOLUTION 512 -static scene::IMesh* createExtrusionMesh(int resolution_x, int resolution_y) +static scene::IMesh *createExtrusionMesh(int resolution_x, int resolution_y) { const f32 r = 0.5; @@ -114,8 +114,9 @@ static scene::IMesh* createExtrusionMesh(int resolution_x, int resolution_y) mesh->addMeshBuffer(buf); buf->drop(); scaleMesh(mesh, scale); // also recalculates bounding box - mesh = (scene::SMesh *)createForsythOptimizedMesh(mesh); - return mesh; + scene::IMesh *newmesh = createForsythOptimizedMesh(mesh); + mesh->drop(); + return newmesh; } /* From a5e5aa5be978d2f6e23d4eeab04d2ac9beefe170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sat, 1 Aug 2015 22:52:28 +0200 Subject: [PATCH 263/670] Prepend "Lua: " before lua exceptions src/server.cpp src/emerge.cpp --- src/emerge.cpp | 4 ++-- src/server.cpp | 29 +++++++++-------------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/emerge.cpp b/src/emerge.cpp index de9a16ac7..d6bda731a 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -494,8 +494,8 @@ void *EmergeThread::Thread() try { // takes about 90ms with -O1 on an e3-1230v2 m_server->getScriptIface()->environment_OnGenerated( minp, maxp, mapgen->blockseed); - } catch(LuaError &e) { - m_server->setAsyncFatalError(e.what()); + } catch (LuaError &e) { + m_server->setAsyncFatalError("Lua: " + std::string(e.what())); } EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); diff --git a/src/server.cpp b/src/server.cpp index 70fe5ae2c..8a1465faa 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -86,7 +86,7 @@ public: void * Thread(); }; -void * ServerThread::Thread() +void *ServerThread::Thread() { log_register_thread("ServerThread"); @@ -99,33 +99,22 @@ void * ServerThread::Thread() porting::setThreadName("ServerThread"); - while(!StopRequested()) - { - try{ + while (!StopRequested()) { + try { //TimeTaker timer("AsyncRunStep() + Receive()"); m_server->AsyncRunStep(); m_server->Receive(); - } - catch(con::NoIncomingDataException &e) - { - } - catch(con::PeerNotFoundException &e) - { + } catch (con::NoIncomingDataException &e) { + } catch (con::PeerNotFoundException &e) { infostream<<"Server: PeerNotFoundException"<setAsyncFatalError(e.what()); - } - catch(LuaError &e) - { + } catch (ClientNotFoundException &e) { + } catch (con::ConnectionBindFailed &e) { m_server->setAsyncFatalError(e.what()); + } catch (LuaError &e) { + m_server->setAsyncFatalError("Lua: " + std::string(e.what())); } } From ec796b8e814864b433aea75119c307f44b2b33e8 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 13 Jul 2015 16:01:31 +0100 Subject: [PATCH 264/670] Add map limit config option --- minetest.conf.example | 8 +++++++- src/clientiface.cpp | 14 ++++---------- src/constants.h | 4 ++-- src/defaultsettings.cpp | 1 + src/map.cpp | 17 +++++++---------- src/mapblock.h | 17 +++++++++-------- src/mapgen.cpp | 5 ++--- src/mapgen_v5.cpp | 3 +-- src/mapgen_v6.cpp | 2 +- src/mapgen_v7.cpp | 5 ++--- src/mg_biome.cpp | 5 ++--- 11 files changed, 38 insertions(+), 43 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index b9e7d59e4..f4b905700 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -417,6 +417,13 @@ #max_block_send_distance = 10 # From how far blocks are generated for clients, stated in mapblocks (16 nodes) #max_block_generate_distance = 6 +# Where the map generator stops. +# Please note: +# * Limited to 31000 (setting above has no effect) +# * The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks). +# * Those groups have an offset of -32, -32 nodes from the origin. +# * Only groups which are within the map_generation_limit are generated +#map_generation_limit = 31000 # Number of extra blocks that can be loaded by /clearobjects at once. # This is a trade-off between sqlite transaction overhead and # memory consumption (4096=100MB, as a rule of thumb). @@ -603,4 +610,3 @@ # Comma-separated list of trusted mods that are allowed to access insecure # functions even when mod security is on (via request_insecure_environment()). #secure.trusted_mods = - diff --git a/src/clientiface.cpp b/src/clientiface.cpp index 6944e56db..3330e0af9 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -209,25 +209,19 @@ void RemoteClient::GetNextBlocks ( max_simul_dynamic = max_simul_sends_setting; // Don't select too many blocks for sending - if(num_blocks_selected >= max_simul_dynamic) - { + if (num_blocks_selected >= max_simul_dynamic) { //queue_is_full = true; goto queue_full_break; } // Don't send blocks that are currently being transferred - if(m_blocks_sending.find(p) != m_blocks_sending.end()) + if (m_blocks_sending.find(p) != m_blocks_sending.end()) continue; /* Do not go over-limit */ - if(p.X < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.X > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE) + if (blockpos_over_limit(p)) continue; // If this is true, inexistent block will be made from scratch @@ -239,7 +233,7 @@ void RemoteClient::GetNextBlocks ( generate = false;*/ // Limit the send area vertically to 1/2 - if(abs(p.Y - center.Y) > full_d_max / 2) + if (abs(p.Y - center.Y) > full_d_max / 2) continue; } diff --git a/src/constants.h b/src/constants.h index 22cadc5a8..b606fc4fa 100644 --- a/src/constants.h +++ b/src/constants.h @@ -64,7 +64,8 @@ with this program; if not, write to the Free Software Foundation, Inc., // The absolute working limit is (2^15 - viewing_range). // I really don't want to make every algorithm to check if it's going near // the limit or not, so this is lower. -#define MAP_GENERATION_LIMIT (31000) +// This is the maximum value the setting map_generation_limit can be +#define MAX_MAP_GENERATION_LIMIT (31000) // Size of node in floating-point units // The original idea behind this is to disallow plain casts between @@ -116,4 +117,3 @@ with this program; if not, write to the Free Software Foundation, Inc., #define DEFAULT_FONT_SIZE (10) #endif - diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 42c617513..4674b2b77 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -94,6 +94,7 @@ void set_default_settings(Settings *settings) // A bit more than the server will send around the player, to make fog blend well settings->setDefault("viewing_range_nodes_max", "240"); settings->setDefault("viewing_range_nodes_min", "35"); + settings->setDefault("map_generation_limit", "31000"); settings->setDefault("screenW", "800"); settings->setDefault("screenH", "600"); settings->setDefault("fullscreen", "false"); diff --git a/src/map.cpp b/src/map.cpp index 9974ff363..50b50220d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2502,10 +2502,12 @@ ServerMapSector * ServerMap::createSector(v2s16 p2d) /* Do not create over-limit */ - if(p2d.X < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p2d.X > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p2d.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p2d.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE) + const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")); + if(p2d.X < -map_gen_limit / MAP_BLOCKSIZE + || p2d.X > map_gen_limit / MAP_BLOCKSIZE + || p2d.Y < -map_gen_limit / MAP_BLOCKSIZE + || p2d.Y > map_gen_limit / MAP_BLOCKSIZE) throw InvalidPositionException("createSector(): pos. over limit"); /* @@ -2649,12 +2651,7 @@ MapBlock * ServerMap::createBlock(v3s16 p) /* Do not create over-limit */ - if(p.X < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.X > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE) + if (blockpos_over_limit(p)) throw InvalidPositionException("createBlock(): pos. over limit"); v2s16 p2d(p.X, p.Z); diff --git a/src/mapblock.h b/src/mapblock.h index ba33c01a2..334136b92 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodetimer.h" #include "modifiedstate.h" #include "util/numeric.h" // getContainerPos +#include "settings.h" class Map; class NodeMetadataList; @@ -638,13 +639,14 @@ typedef std::vector MapBlockVect; inline bool blockpos_over_limit(v3s16 p) { - return - (p.X < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.X > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE); + const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")); + return (p.X < -map_gen_limit / MAP_BLOCKSIZE + || p.X > map_gen_limit / MAP_BLOCKSIZE + || p.Y < -map_gen_limit / MAP_BLOCKSIZE + || p.Y > map_gen_limit / MAP_BLOCKSIZE + || p.Z < -map_gen_limit / MAP_BLOCKSIZE + || p.Z > map_gen_limit / MAP_BLOCKSIZE); } /* @@ -681,4 +683,3 @@ inline void getNodeSectorPosWithOffset(const v2s16 &p, v2s16 &block, v2s16 &offs std::string analyze_block(MapBlock *block); #endif - diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 7f7c4e240..1843e953d 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -143,7 +143,7 @@ s16 Mapgen::findGroundLevelFull(v2s16 p2d) } -// Returns -MAP_GENERATION_LIMIT if not found +// Returns -MAX_MAP_GENERATION_LIMIT if not found s16 Mapgen::findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax) { v3s16 em = vm->m_area.getExtent(); @@ -157,7 +157,7 @@ s16 Mapgen::findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax) vm->m_area.add_y(em, i, -1); } - return (y >= ymin) ? y : -MAP_GENERATION_LIMIT; + return (y >= ymin) ? y : -MAX_MAP_GENERATION_LIMIT; } @@ -475,4 +475,3 @@ void MapgenParams::save(Settings &settings) const if (sparams) sparams->writeParams(&settings); } - diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index f23dad4ec..5b842a99e 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -370,7 +370,7 @@ int MapgenV5::generateBaseTerrain() { u32 index = 0; u32 index2d = 0; - int stone_surface_max_y = -MAP_GENERATION_LIMIT; + int stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; for (s16 z=node_min.Z; z<=node_max.Z; z++) { for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) { @@ -585,4 +585,3 @@ void MapgenV5::dustTopNodes() } } } - diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 09acec783..9e34aac2d 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -626,7 +626,7 @@ int MapgenV6::generateGround() MapNode n_air(CONTENT_AIR), n_water_source(c_water_source); MapNode n_stone(c_stone), n_desert_stone(c_desert_stone); MapNode n_ice(c_ice); - int stone_surface_max_y = -MAP_GENERATION_LIMIT; + int stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; u32 index = 0; for (s16 z = node_min.Z; z <= node_max.Z; z++) diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index e499ebb81..9f612de81 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -505,8 +505,8 @@ void MapgenV7::generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_ MapNode n_water(c_water_source); v3s16 em = vm->m_area.getExtent(); - s16 surface_min_y = MAP_GENERATION_LIMIT; - s16 surface_max_y = -MAP_GENERATION_LIMIT; + s16 surface_min_y = MAX_MAP_GENERATION_LIMIT; + s16 surface_max_y = -MAX_MAP_GENERATION_LIMIT; u32 index = 0; for (s16 z = node_min.Z; z <= node_max.Z; z++) @@ -885,4 +885,3 @@ void MapgenV7::generateCaves(s16 max_stone_y) cave.makeCave(node_min, node_max, max_stone_y); } } - diff --git a/src/mg_biome.cpp b/src/mg_biome.cpp index 1944aa12f..a21d99b17 100644 --- a/src/mg_biome.cpp +++ b/src/mg_biome.cpp @@ -45,8 +45,8 @@ BiomeManager::BiomeManager(IGameDef *gamedef) : b->depth_top = 0; b->depth_filler = 0; b->depth_water_top = 0; - b->y_min = -MAP_GENERATION_LIMIT; - b->y_max = MAP_GENERATION_LIMIT; + b->y_min = -MAX_MAP_GENERATION_LIMIT; + b->y_max = MAX_MAP_GENERATION_LIMIT; b->heat_point = 0.0; b->humidity_point = 0.0; @@ -140,4 +140,3 @@ void Biome::resolveNodeNames() getIdFromNrBacklog(&c_river_water, "mapgen_river_water_source", CONTENT_AIR); getIdFromNrBacklog(&c_dust, "air", CONTENT_IGNORE); } - From a890c66bc035918d7478fc1742241eadfd9a5bae Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 2 Aug 2015 18:23:22 +0200 Subject: [PATCH 265/670] Actually document what minetest.is_protected should do --- doc/lua_api.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index ab059e182..673eed620 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2300,6 +2300,9 @@ These functions return the leftover itemstack. * currently supported. * `...` indicates method-specific arguments. Currently, no methods use this. * `minetest.is_protected(pos, name)`: returns boolean + * Returns true, if player `name` shouldn't be abled to dig at `pos` or do other + actions, defineable by mods, due to some mod-defined ownership-like concept. + Returns false or nil, if the player is allowed to do such actions. * This function should be overridden by protection mods and should be used to check if a player can interact at a position. * This function should call the old version of itself if the position is not From 47225346be9ab0d55bc2dbc71b6c0f085f47a75e Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 2 Aug 2015 10:08:44 +0200 Subject: [PATCH 266/670] Android: fix sound issue, and gitignore Previously, sound failed due to errors with hardfp abi build instructions. As the problem couldn't be found, the softfp compatible abi was chosen instead. This move will cause a small performance overhead, but due to the abi being armeabi-v7a, the internal calculations will still be done using the FPU. We also fix some issues with ABI information passing. However, the fixes aren't sufficient to get sound working. The patch also fixes an issue with the gitignore file. --- .gitignore | 2 +- build/android/Makefile | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 12143656a..7b2b030af 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,7 @@ doc/doxygen_* CMakeFiles/* src/CMakeFiles/* src/Makefile -src/android_config_githash.h +src/android_version_githash.h src/android_version.h src/cmake_config.h src/cmake_config_githash.h diff --git a/build/android/Makefile b/build/android/Makefile index 4ccca56b5..021652d73 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -47,13 +47,11 @@ ANDROID_VERSION_CODE = 12 # toolchain config for arm new processors ################################################################################ TARGET_HOST = arm-linux -TARGET_ABI = armeabi-v7a-hard +TARGET_ABI = armeabi-v7a TARGET_LIBDIR = armeabi-v7a TARGET_TOOLCHAIN = arm-linux-androideabi- -TARGET_CFLAGS_ADDON = -mfpu=vfpv3-d16 -D_NDK_MATH_NO_SOFTFP=1 \ - -mfloat-abi=hard -march=armv7-a +TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON) -TARGET_LDFLAGS_ADDON = -Wl,--no-warn-mismatch -lm_hard TARGET_ARCH = armv7 CROSS_PREFIX = arm-linux-androideabi- COMPILER_VERSION = 4.8 @@ -241,8 +239,8 @@ $(OPENAL_LIB): $(OPENAL_TIMESTAMP) echo "changed timestamp for openal detected building..."; \ cd ${OPENAL_DIR}; \ ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \ - APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \ - TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ + APP_ABI=${TARGET_ABI} TARGET_ARCH_ABI=${TARGET_ABI} \ + APP_PLATFORM=${APP_PLATFORM} TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \ touch ${OPENAL_TIMESTAMP}; \ @@ -268,6 +266,7 @@ ogg_download : git clone ${OGG_URL_GIT}|| exit 1; \ cd libvorbis-libogg-android ; \ patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \ + sed -i 's-:-?-' jni/Application.mk; \ fi ogg : $(OGG_LIB) From 868a1a5c13a0c086aa1ff3414a1eb12076821c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sun, 2 Aug 2015 18:42:03 +0200 Subject: [PATCH 267/670] src/client/tile.cpp: Fix reference counting --- src/client/tile.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 03badd817..79ed4a072 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -1011,7 +1011,7 @@ video::IImage* TextureSource::generateImage(const std::string &name) std::string last_part_of_name = name.substr(last_separator_pos + 1); - /* + /* If this name is enclosed in parentheses, generate it and blit it onto the base image */ @@ -1209,21 +1209,22 @@ bool TextureSource::generateImagePart(std::string part_of_name, s32 frame_count = stoi(sf.next(":")); s32 progression = stoi(sf.next(":")); - /* - Load crack image. + if (progression >= 0) { + /* + Load crack image. - It is an image with a number of cracking stages - horizontally tiled. - */ - video::IImage *img_crack = m_sourcecache.getOrLoad( + It is an image with a number of cracking stages + horizontally tiled. + */ + video::IImage *img_crack = m_sourcecache.getOrLoad( "crack_anylength.png", m_device); - if (img_crack && progression >= 0) - { - draw_crack(img_crack, baseimg, + if (img_crack) { + draw_crack(img_crack, baseimg, use_overlay, frame_count, progression, driver); - img_crack->drop(); + img_crack->drop(); + } } } /* @@ -1612,6 +1613,7 @@ bool TextureSource::generateImagePart(std::string part_of_name, if (img) { apply_mask(img, baseimg, v2s32(0, 0), v2s32(0, 0), img->getDimension()); + img->drop(); } else { errorstream << "generateImage(): Failed to load \"" << filename << "\"."; From 060e56b24c21c4cda76fcac15eecbdce9682d16a Mon Sep 17 00:00:00 2001 From: Miner59 Date: Sun, 5 Jul 2015 14:52:55 +0200 Subject: [PATCH 268/670] Fix "bouncy" blocks Before players "bounced" too high. Now, while still allowing to bounce, higher speed bounces are throttled. --- src/localplayer.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/localplayer.cpp b/src/localplayer.cpp index d06015e06..1a59504ef 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -319,25 +319,15 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, /* Report collisions */ - bool bouncy_jump = false; + // Dont report if flying if(collision_info && !(g_settings->getBool("free_move") && fly_allowed)) { for(size_t i=0; ipush_back(info); - if(info.new_speed.Y - info.old_speed.Y > 0.1*BS && - info.bouncy) - bouncy_jump = true; } } - if(bouncy_jump && control.jump){ - m_speed.Y += movement_speed_jump*BS; - touching_ground = false; - MtEvent *e = new SimpleTriggerEvent("PlayerJump"); - m_gamedef->event()->put(e); - } - if(!touching_ground_was && touching_ground){ MtEvent *e = new SimpleTriggerEvent("PlayerRegainGround"); m_gamedef->event()->put(e); @@ -371,6 +361,19 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, m_can_jump = touching_ground && !in_liquid; if(itemgroup_get(f.groups, "disable_jump")) m_can_jump = false; + // Jump key pressed while jumping off from a bouncy block + if (m_can_jump && control.jump && itemgroup_get(f.groups, "bouncy") && + m_speed.Y >= -0.5 * BS) { + float jumpspeed = movement_speed_jump * physics_override_jump; + if (m_speed.Y > 1) { + // Reduce boost when speed already is high + m_speed.Y += jumpspeed / (1 + (m_speed.Y / 16 )); + } else { + m_speed.Y += jumpspeed; + } + setSpeed(m_speed); + m_can_jump = false; + } } void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d) From abe6c072d66777b171399f42548bad75f618f1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=99etislav=20=C5=A0tec?= Date: Sun, 2 Aug 2015 15:08:39 +0200 Subject: [PATCH 269/670] src/util/numeric.{cpp,h}: Fix FacePositionCache data race --- src/util/numeric.cpp | 4 ++++ src/util/numeric.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp index 4ddfede92..3fd1c9cf9 100644 --- a/src/util/numeric.cpp +++ b/src/util/numeric.cpp @@ -23,13 +23,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "../constants.h" // BS, MAP_BLOCKSIZE #include "../noise.h" // PseudoRandom, PcgRandom +#include "../jthread/jmutexautolock.h" #include #include std::map > FacePositionCache::m_cache; +JMutex FacePositionCache::m_cache_mutex; // Calculate the borders of a "d-radius" cube +// TODO: Make it work without mutex and data races, probably thread-local std::vector FacePositionCache::getFacePositions(u16 d) { + JMutexAutoLock cachelock(m_cache_mutex); if (m_cache.find(d) != m_cache.end()) return m_cache[d]; diff --git a/src/util/numeric.h b/src/util/numeric.h index 0eba01359..9fe08434f 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irr_v2d.h" #include "../irr_v3d.h" #include "../irr_aabb3d.h" +#include "../jthread/jmutex.h" #include #include #include @@ -41,6 +42,7 @@ public: private: static void generateFacePosition(u16 d); static std::map > m_cache; + static JMutex m_cache_mutex; }; class IndentationRaiser From cf77e0333d1ba0aa81fdce80cd0fa32f137b0a47 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 2 Aug 2015 01:35:05 +0100 Subject: [PATCH 270/670] Biome API: Make fallback biome stone and water, disable filler --- src/mg_biome.cpp | 10 +++++----- src/script/lua_api/l_mapgen.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mg_biome.cpp b/src/mg_biome.cpp index a21d99b17..055ce0198 100644 --- a/src/mg_biome.cpp +++ b/src/mg_biome.cpp @@ -43,15 +43,15 @@ BiomeManager::BiomeManager(IGameDef *gamedef) : b->name = "Default"; b->flags = 0; b->depth_top = 0; - b->depth_filler = 0; + b->depth_filler = -MAX_MAP_GENERATION_LIMIT; b->depth_water_top = 0; b->y_min = -MAX_MAP_GENERATION_LIMIT; b->y_max = MAX_MAP_GENERATION_LIMIT; b->heat_point = 0.0; b->humidity_point = 0.0; - b->m_nodenames.push_back("air"); - b->m_nodenames.push_back("air"); + b->m_nodenames.push_back("mapgen_stone"); + b->m_nodenames.push_back("mapgen_stone"); b->m_nodenames.push_back("mapgen_stone"); b->m_nodenames.push_back("mapgen_water_source"); b->m_nodenames.push_back("mapgen_water_source"); @@ -132,8 +132,8 @@ void BiomeManager::clear() void Biome::resolveNodeNames() { - getIdFromNrBacklog(&c_top, "mapgen_dirt_with_grass", CONTENT_AIR); - getIdFromNrBacklog(&c_filler, "mapgen_dirt", CONTENT_AIR); + getIdFromNrBacklog(&c_top, "mapgen_stone", CONTENT_AIR); + getIdFromNrBacklog(&c_filler, "mapgen_stone", CONTENT_AIR); getIdFromNrBacklog(&c_stone, "mapgen_stone", CONTENT_AIR); getIdFromNrBacklog(&c_water_top, "mapgen_water_source", CONTENT_AIR); getIdFromNrBacklog(&c_water, "mapgen_water_source", CONTENT_AIR); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index bf5e3631e..d30b68054 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -374,8 +374,8 @@ Biome *read_biome_def(lua_State *L, int index, INodeDefManager *ndef) Biome *b = BiomeManager::create(biometype); b->name = getstringfield_default(L, index, "name", ""); - b->depth_top = getintfield_default(L, index, "depth_top", 1); - b->depth_filler = getintfield_default(L, index, "depth_filler", 2); + b->depth_top = getintfield_default(L, index, "depth_top", 0); + b->depth_filler = getintfield_default(L, index, "depth_filler", -31000); b->depth_water_top = getintfield_default(L, index, "depth_water_top", 0); b->y_min = getintfield_default(L, index, "y_min", -31000); b->y_max = getintfield_default(L, index, "y_max", 31000); From 7a6e4dc54a3eb4187e67a21c4ece60f39bb1d13b Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 3 Aug 2015 04:34:11 +0100 Subject: [PATCH 271/670] Cavegen V6: Make all caves consistent with 0.4.12 stable When tunnels entirely above ground were avoided, the missing pseudorandom calls changed the allowed caves. Now, above ground tunnels are not placed while still running all previous pseudorandom calls. --- src/cavegen.cpp | 54 ++++++++++++++++++++++++++++++++----------------- src/cavegen.h | 2 +- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/cavegen.cpp b/src/cavegen.cpp index 0c14375ee..8372f70b5 100644 --- a/src/cavegen.cpp +++ b/src/cavegen.cpp @@ -31,7 +31,8 @@ NoiseParams nparams_caveliquids(0, 1, v3f(150.0, 150.0, 150.0), 776, 3, 0.6, 2.0 ///////////////////////////////////////// Caves V5 -CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) { +CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) +{ this->mg = mg; this->vm = mg->vm; this->ndef = mg->ndef; @@ -54,7 +55,8 @@ CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) { } -void CaveV5::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { +void CaveV5::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ node_min = nmin; node_max = nmax; main_direction = v3f(0, 0, 0); @@ -115,8 +117,8 @@ void CaveV5::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { } -void CaveV5::makeTunnel(bool dirswitch) { - +void CaveV5::makeTunnel(bool dirswitch) +{ // Randomize size s16 min_d = min_tunnel_diameter; s16 max_d = max_tunnel_diameter; @@ -201,7 +203,8 @@ void CaveV5::makeTunnel(bool dirswitch) { } -void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz) { +void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz) +{ MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -271,7 +274,8 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz) { ///////////////////////////////////////// Caves V6 -CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_cave) { +CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_cave) +{ this->mg = mg; this->vm = mg->vm; this->ndef = mg->ndef; @@ -301,7 +305,8 @@ CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_ } -void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { +void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ node_min = nmin; node_max = nmax; max_stone_y = max_stone_height; @@ -368,7 +373,8 @@ void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { } -void CaveV6::makeTunnel(bool dirswitch) { +void CaveV6::makeTunnel(bool dirswitch) +{ if (dirswitch && !large_cave) { main_direction = v3f( ((float)(ps->next() % 20) - (float)10) / 10, @@ -414,7 +420,8 @@ void CaveV6::makeTunnel(bool dirswitch) { ); } - // Do not make caves that are entirely above ground. + // Do not make caves that are entirely above ground, to fix + // shadow bugs caused by overgenerated large caves. // It is only necessary to check the startpoint and endpoint. v3s16 orpi(orp.X, orp.Y, orp.Z); v3s16 veci(vec.X, vec.Y, vec.Z); @@ -441,8 +448,11 @@ void CaveV6::makeTunnel(bool dirswitch) { h2 = water_level; } - if (p1.Y > h1 && p2.Y > h2) // If startpoint and endpoint are above ground - return; + // If startpoint and endpoint are above ground, + // disable placing of nodes in carveRoute while + // still running all pseudorandom calls to ensure + // caves consistent with existing worlds. + bool tunnel_above_ground = p1.Y > h1 && p2.Y > h2; vec += main_direction; @@ -474,13 +484,14 @@ void CaveV6::makeTunnel(bool dirswitch) { // Carve routes for (float f = 0; f < 1.0; f += 1.0 / veclen) - carveRoute(vec, f, randomize_xz); + carveRoute(vec, f, randomize_xz, tunnel_above_ground); orp = rp; } -void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { +void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz, bool tunnel_above_ground) +{ MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -503,6 +514,9 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { for (s16 z0 = d0; z0 <= d1; z0++) { s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { + if (tunnel_above_ground) + continue; + s16 maxabsxz = MYMAX(abs(x0), abs(z0)); s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { @@ -553,7 +567,8 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { ///////////////////////////////////////// Caves V7 -CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { +CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) +{ this->mg = mg; this->vm = mg->vm; this->ndef = mg->ndef; @@ -576,7 +591,8 @@ CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { } -void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { +void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ node_min = nmin; node_max = nmax; max_stone_y = max_stone_height; @@ -638,8 +654,8 @@ void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { } -void CaveV7::makeTunnel(bool dirswitch) { - +void CaveV7::makeTunnel(bool dirswitch) +{ // Randomize size s16 min_d = min_tunnel_diameter; s16 max_d = max_tunnel_diameter; @@ -724,7 +740,8 @@ void CaveV7::makeTunnel(bool dirswitch) { } -void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz) { +void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz) +{ MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -790,4 +807,3 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz) { } } } - diff --git a/src/cavegen.h b/src/cavegen.h index 5d150802a..b9662587b 100644 --- a/src/cavegen.h +++ b/src/cavegen.h @@ -113,7 +113,7 @@ public: CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool large_cave); void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); void makeTunnel(bool dirswitch); - void carveRoute(v3f vec, float f, bool randomize_xz); + void carveRoute(v3f vec, float f, bool randomize_xz, bool tunnel_above_ground); }; class CaveV7 { From 3295f3c40157c2bc385a903611bfa803a69b617d Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Wed, 5 Aug 2015 22:52:32 +0200 Subject: [PATCH 272/670] Fix tiling issues for PLANTLIKE and FIRELIKE with FSAA --- src/client/tile.h | 20 +++++++++++++++++++- src/nodedef.cpp | 6 +++++- src/script/common/c_content.cpp | 15 +++++++++------ src/script/common/c_content.h | 3 ++- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/client/tile.h b/src/client/tile.h index 744aa2c3d..c08ffc8ad 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -168,6 +168,8 @@ enum MaterialType{ // defined by extra parameters #define MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES 0x08 #define MATERIAL_FLAG_HIGHLIGHTED 0x10 +#define MATERIAL_FLAG_TILEABLE_HORIZONTAL 0x20 +#define MATERIAL_FLAG_TILEABLE_VERTICAL 0x40 /* This fully defines the looks of a tile. @@ -216,7 +218,9 @@ struct TileSpec alpha == other.alpha && material_type == other.material_type && material_flags == other.material_flags && - rotation == other.rotation + rotation == other.rotation && + (material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL) && + (material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL) ); } @@ -250,12 +254,26 @@ struct TileSpec } material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; + if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + } + if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + } } void applyMaterialOptionsWithShaders(video::SMaterial &material) const { material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; + if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + material.TextureLayer[1].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + } + if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + material.TextureLayer[1].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + } } u32 texture_id; diff --git a/src/nodedef.cpp b/src/nodedef.cpp index c9c461b20..daaa871f9 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1014,7 +1014,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, } tile->flags_texture = tsrc->getShaderFlagsTexture( tile->normal_texture ? true : false, - tiledef->tileable_horizontal, tiledef->tileable_vertical); + tiledef->tileable_vertical, tiledef->tileable_horizontal); // Material flags tile->material_flags = 0; @@ -1022,6 +1022,10 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, tile->material_flags |= MATERIAL_FLAG_BACKFACE_CULLING; if (tiledef->animation.type == TAT_VERTICAL_FRAMES) tile->material_flags |= MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES; + if (tiledef->tileable_horizontal) + tile->material_flags |= MATERIAL_FLAG_TILEABLE_HORIZONTAL; + if (tiledef->tileable_vertical) + tile->material_flags |= MATERIAL_FLAG_TILEABLE_VERTICAL; // Animation parameters int frame_count = 1; diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 42c6889d8..3754fc2ff 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -258,17 +258,20 @@ void push_object_properties(lua_State *L, ObjectProperties *prop) } /******************************************************************************/ -TileDef read_tiledef(lua_State *L, int index) +TileDef read_tiledef(lua_State *L, int index, u8 drawtype) { if(index < 0) index = lua_gettop(L) + 1 + index; TileDef tiledef; - + bool default_tiling = (drawtype == NDT_PLANTLIKE || drawtype == NDT_FIRELIKE) + ? false : true; // key at index -2 and value at index if(lua_isstring(L, index)){ // "default_lava.png" tiledef.name = lua_tostring(L, index); + tiledef.tileable_vertical = default_tiling; + tiledef.tileable_horizontal = default_tiling; } else if(lua_istable(L, index)) { @@ -279,9 +282,9 @@ TileDef read_tiledef(lua_State *L, int index) tiledef.backface_culling = getboolfield_default( L, index, "backface_culling", true); tiledef.tileable_horizontal = getboolfield_default( - L, index, "tileable_horizontal", true); + L, index, "tileable_horizontal", default_tiling); tiledef.tileable_vertical = getboolfield_default( - L, index, "tileable_vertical", true); + L, index, "tileable_vertical", default_tiling); // animation = {} lua_getfield(L, index, "animation"); if(lua_istable(L, -1)){ @@ -357,7 +360,7 @@ ContentFeatures read_content_features(lua_State *L, int index) int i = 0; while(lua_next(L, table) != 0){ // Read tiledef from value - f.tiledef[i] = read_tiledef(L, -1); + f.tiledef[i] = read_tiledef(L, -1, f.drawtype); // removes value, keeps key for next iteration lua_pop(L, 1); i++; @@ -392,7 +395,7 @@ ContentFeatures read_content_features(lua_State *L, int index) int i = 0; while(lua_next(L, table) != 0){ // Read tiledef from value - f.tiledef_special[i] = read_tiledef(L, -1); + f.tiledef_special[i] = read_tiledef(L, -1, f.drawtype); // removes value, keeps key for next iteration lua_pop(L, 1); i++; diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h index 4547009e7..46416ad8e 100644 --- a/src/script/common/c_content.h +++ b/src/script/common/c_content.h @@ -63,7 +63,8 @@ class Schematic; ContentFeatures read_content_features (lua_State *L, int index); -TileDef read_tiledef (lua_State *L, int index); +TileDef read_tiledef (lua_State *L, int index, + u8 drawtype); void read_soundspec (lua_State *L, int index, SimpleSoundSpec &spec); NodeBox read_nodebox (lua_State *L, int index); From 3183d5a4038f16b5b4cbcfd0dac5f8d458bf8ba2 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 5 Aug 2015 02:56:23 -0400 Subject: [PATCH 273/670] connection: Make assertions non-fatal for received data --- src/network/connection.cpp | 62 ++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/src/network/connection.cpp b/src/network/connection.cpp index d0670e66e..93dcf4ca2 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -312,13 +312,29 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) { JMutexAutoLock listlock(m_list_mutex); - FATAL_ERROR_IF(p.data.getSize() < BASE_HEADER_SIZE+3, "Invalid data size"); - u8 type = readU8(&p.data[BASE_HEADER_SIZE+0]); - sanity_check(type == TYPE_RELIABLE); - u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]); + if (p.data.getSize() < BASE_HEADER_SIZE + 3) { + errorstream << "ReliablePacketBuffer::insert(): Invalid data size for " + "reliable packet" << std::endl; + return; + } + u8 type = readU8(&p.data[BASE_HEADER_SIZE + 0]); + if (type != TYPE_RELIABLE) { + errorstream << "ReliablePacketBuffer::insert(): type is not reliable" + << std::endl; + return; + } + u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE + 1]); - sanity_check(seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)); - sanity_check(seqnum != next_expected); + if (!seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)) { + errorstream << "ReliablePacketBuffer::insert(): seqnum is outside of " + "expected window " << std::endl; + return; + } + if (seqnum == next_expected) { + errorstream << "ReliablePacketBuffer::insert(): seqnum is next expected" + << std::endl; + return; + } ++m_list_size; sanity_check(m_list_size <= SEQNUM_MAX+1); // FIXME: Handle the error? @@ -377,10 +393,6 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) throw IncomingDataCorruption("duplicated packet isn't same as original one"); } - sanity_check(readU16(&(i->data[BASE_HEADER_SIZE+1])) == seqnum); - sanity_check(i->data.getSize() == p.data.getSize()); - sanity_check(i->address == p.address); - /* nothing to do this seems to be a resent packet */ /* for paranoia reason data should be compared */ --m_list_size; @@ -449,13 +461,21 @@ SharedBuffer IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable) { JMutexAutoLock listlock(m_map_mutex); u32 headersize = BASE_HEADER_SIZE + 7; - FATAL_ERROR_IF(p.data.getSize() < headersize, "Invalid data size"); + if (p.data.getSize() < headersize) { + errorstream << "Invalid data size for split packet" << std::endl; + return SharedBuffer(); + } u8 type = readU8(&p.data[BASE_HEADER_SIZE+0]); - sanity_check(type == TYPE_SPLIT); u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]); u16 chunk_count = readU16(&p.data[BASE_HEADER_SIZE+3]); u16 chunk_num = readU16(&p.data[BASE_HEADER_SIZE+5]); + if (type != TYPE_SPLIT) { + errorstream << "IncomingSplitBuffer::insert(): type is not split" + << std::endl; + return SharedBuffer(); + } + // Add if doesn't exist if (m_buf.find(seqnum) == m_buf.end()) { @@ -2327,8 +2347,9 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, u8 type = readU8(&(packetdata[0])); if (MAX_UDP_PEERS <= 65535 && peer_id >= MAX_UDP_PEERS) { - errorstream << "Something is wrong with peer_id" << std::endl; - FATAL_ERROR(""); + std::string errmsg = "Invalid peer_id=" + itos(peer_id); + errorstream << errmsg << std::endl; + throw InvalidIncomingDataException(errmsg.c_str()); } if (type == TYPE_CONTROL) @@ -2340,10 +2361,12 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, if (controltype == CONTROLTYPE_ACK) { - FATAL_ERROR_IF(channel == 0, "Invalid channel (0)"); - if (packetdata.getSize() < 4) - throw InvalidIncomingDataException - ("packetdata.getSize() < 4 (ACK header size)"); + assert(channel != NULL); + + if (packetdata.getSize() < 4) { + throw InvalidIncomingDataException( + "packetdata.getSize() < 4 (ACK header size)"); + } u16 seqnum = readU16(&packetdata[2]); LOG(dout_con<getDesc() @@ -2508,7 +2531,8 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, } else if (type == TYPE_RELIABLE) { - FATAL_ERROR_IF(channel == 0, "Invalid channel (0)"); + assert(channel != NULL); + // Recursive reliable packets not allowed if (reliable) throw InvalidIncomingDataException("Found nested reliable packets"); From bcf47bc67cf3e1c2f410a81e26ceab1bdab06b4a Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 5 Aug 2015 00:49:35 -0400 Subject: [PATCH 274/670] Improve Script CPP API diagnostics --- src/script/common/c_internal.cpp | 62 ++++++++++++++++++++++++------ src/script/common/c_internal.h | 17 ++++++-- src/script/cpp_api/s_async.cpp | 9 ++--- src/script/cpp_api/s_base.cpp | 4 +- src/script/cpp_api/s_base.h | 8 +++- src/script/cpp_api/s_entity.cpp | 15 +++----- src/script/cpp_api/s_inventory.cpp | 18 +++------ src/script/cpp_api/s_item.cpp | 17 +++----- src/script/cpp_api/s_mainmenu.cpp | 6 +-- src/script/cpp_api/s_node.cpp | 28 +++++--------- src/script/cpp_api/s_nodemeta.cpp | 24 +++++------- src/script/cpp_api/s_player.cpp | 3 +- src/script/cpp_api/s_server.cpp | 9 ++--- src/script/lua_api/l_env.cpp | 10 +++-- src/script/scripting_game.cpp | 4 +- src/script/scripting_game.h | 2 +- 16 files changed, 129 insertions(+), 107 deletions(-) diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index 8cf39dc3a..bebf6ee69 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -69,11 +69,51 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f) return lua_error(L); // Rethrow as a Lua error. } -void script_error(lua_State *L) +/* + * Note that we can't get tracebacks for LUA_ERRMEM or LUA_ERRERR (without + * hacking Lua internals). For LUA_ERRMEM, this is because memory errors will + * not execute the the error handler, and by the time lua_pcall returns the + * execution stack will have already been unwound. For LUA_ERRERR, there was + * another error while trying to generate a backtrace from a LUA_ERRRUN. It is + * presumed there is an error with the internal Lua state and thus not possible + * to gather a coherent backtrace. Realistically, the best we can do here is + * print which C function performed the failing pcall. + */ +void script_error(lua_State *L, int pcall_result, const char *fxn) { - const char *s = lua_tostring(L, -1); - std::string str(s ? s : ""); - throw LuaError(str); + if (pcall_result == 0) + return; + + const char *err_type; + switch (pcall_result) { + case LUA_ERRRUN: + err_type = "Runtime"; + break; + case LUA_ERRMEM: + err_type = "OOM"; + break; + case LUA_ERRERR: + err_type = "Double fault"; + break; + default: + err_type = "Unknown"; + } + + const char *err_descr = lua_tostring(L, -1); + if (!err_descr) + err_descr = ""; + + std::string err_msg(err_type); + if (fxn) { + err_msg += " error in "; + err_msg += fxn; + err_msg += "(): "; + } else { + err_msg += " error: "; + } + err_msg += err_descr; + + throw LuaError(err_msg); } // Push the list of callbacks (a lua table). @@ -82,7 +122,8 @@ void script_error(lua_State *L) // - runs the callbacks // - replaces the table and arguments with the return value, // computed depending on mode -void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode) +void script_run_callbacks_f(lua_State *L, int nargs, + RunCallbacksMode mode, const char *fxn) { FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments"); @@ -104,14 +145,12 @@ void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode) // Stack now looks like this: // ... ... - if (lua_pcall(L, nargs + 2, 1, errorhandler)) { - script_error(L); - } + script_error(L, lua_pcall(L, nargs + 2, 1, errorhandler), fxn); lua_remove(L, -2); // Remove error handler } -void log_deprecated(lua_State *L, std::string message) +void log_deprecated(lua_State *L, const std::string &message) { static bool configured = false; static bool dolog = false; @@ -131,9 +170,10 @@ void log_deprecated(lua_State *L, std::string message) if (doerror) { if (L != NULL) { - script_error(L); + script_error(L, LUA_ERRRUN, NULL); } else { - FATAL_ERROR("Can't do a scripterror for this deprecated message, so exit completely!"); + FATAL_ERROR("Can't do a scripterror for this deprecated message, " + "so exit completely!"); } } diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index eb9181b09..54cdd7da7 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -34,6 +34,16 @@ extern "C" { #include "common/c_types.h" +#define PCALL_RESL(L, RES) do { \ + int result_ = (RES); \ + if (result_ != 0) { \ + script_error((L), result_, __FUNCTION__); \ + } \ +} while (0) + +#define script_run_callbacks(L, nargs, mode) \ + script_run_callbacks_f((L), (nargs), (mode), __FUNCTION__) + // What script_run_callbacks does with the return values of callbacks. // Regardless of the mode, if only one callback is defined, // its return value is the total return value. @@ -67,8 +77,9 @@ enum RunCallbacksMode std::string script_get_backtrace(lua_State *L); int script_error_handler(lua_State *L); int script_exception_wrapper(lua_State *L, lua_CFunction f); -void script_error(lua_State *L); -void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode); -void log_deprecated(lua_State *L, std::string message); +void script_error(lua_State *L, int pcall_result, const char *fxn); +void script_run_callbacks_f(lua_State *L, int nargs, + RunCallbacksMode mode, const char *fxn); +void log_deprecated(lua_State *L, const std::string &message); #endif /* C_INTERNAL_H_ */ diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index eb1a2923a..0e2a006ca 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -164,9 +164,7 @@ void AsyncEngine::step(lua_State *L, int errorhandler) lua_pushlstring(L, jobDone.serializedResult.data(), jobDone.serializedResult.size()); - if (lua_pcall(L, 2, 0, errorhandler)) { - script_error(L); - } + PCALL_RESL(L, lua_pcall(L, 2, 0, errorhandler)); } resultQueueMutex.Unlock(); lua_pop(L, 1); // Pop core @@ -293,8 +291,9 @@ void* AsyncWorkerThread::Thread() toProcess.serializedParams.data(), toProcess.serializedParams.size()); - if (lua_pcall(L, 2, 1, m_errorhandler)) { - scriptError(); + int result = lua_pcall(L, 2, 1, m_errorhandler); + if (result) { + PCALL_RES(result); toProcess.serializedResult = ""; } else { // Fetch result diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 2eb7419b5..680e661ea 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -165,9 +165,9 @@ void ScriptApiBase::realityCheck() } } -void ScriptApiBase::scriptError() +void ScriptApiBase::scriptError(int result, const char *fxn) { - throw LuaError(lua_tostring(m_luastack, -1)); + script_error(getStack(), result, fxn); } void ScriptApiBase::stackDump(std::ostream &o) diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index 13076d3d1..0c2dfafd1 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -40,6 +40,12 @@ extern "C" { // use that name to bypass security! #define BUILTIN_MOD_NAME "*builtin*" +#define PCALL_RES(RES) do { \ + int result_ = (RES); \ + if (result_ != 0) { \ + scriptError(result_, __FUNCTION__); \ + } \ +} while (0) class Server; class Environment; @@ -74,7 +80,7 @@ protected: { return m_luastack; } void realityCheck(); - void scriptError(); + void scriptError(int result, const char *fxn); void stackDump(std::ostream &o); void setServer(Server* server) { m_server = server; } diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp index b52bde18a..08e06ccbc 100644 --- a/src/script/cpp_api/s_entity.cpp +++ b/src/script/cpp_api/s_entity.cpp @@ -92,8 +92,7 @@ void ScriptApiEntity::luaentity_Activate(u16 id, lua_pushlstring(L, staticdata.c_str(), staticdata.size()); lua_pushinteger(L, dtime_s); // Call with 3 arguments, 0 results - if (lua_pcall(L, 3, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler)); } else { lua_pop(L, 1); } @@ -140,8 +139,7 @@ std::string ScriptApiEntity::luaentity_GetStaticdata(u16 id) luaL_checktype(L, -1, LUA_TFUNCTION); lua_pushvalue(L, object); // self // Call with 1 arguments, 1 results - if (lua_pcall(L, 1, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler)); lua_remove(L, object); // Remove object size_t len = 0; @@ -210,8 +208,7 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime) lua_pushvalue(L, object); // self lua_pushnumber(L, dtime); // dtime // Call with 2 arguments, 0 results - if (lua_pcall(L, 2, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); lua_pop(L, 1); // Pop object } @@ -242,8 +239,7 @@ void ScriptApiEntity::luaentity_Punch(u16 id, push_tool_capabilities(L, *toolcap); push_v3f(L, dir); // Call with 5 arguments, 0 results - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); lua_pop(L, 1); // Pop object } @@ -269,8 +265,7 @@ void ScriptApiEntity::luaentity_Rightclick(u16 id, lua_pushvalue(L, object); // self objectrefGetOrCreate(L, clicker); // Clicker reference // Call with 2 arguments, 0 results - if (lua_pcall(L, 2, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); lua_pop(L, 1); // Pop object } diff --git a/src/script/cpp_api/s_inventory.cpp b/src/script/cpp_api/s_inventory.cpp index 422faf150..c8c90fd8f 100644 --- a/src/script/cpp_api/s_inventory.cpp +++ b/src/script/cpp_api/s_inventory.cpp @@ -48,8 +48,7 @@ int ScriptApiDetached::detached_inventory_AllowMove( lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 1, m_errorhandler)); if(!lua_isnumber(L, -1)) throw LuaError("allow_move should return a number. name=" + name); int ret = luaL_checkinteger(L, -1); @@ -77,8 +76,7 @@ int ScriptApiDetached::detached_inventory_AllowPut( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_put should return a number. name=" + name); int ret = luaL_checkinteger(L, -1); @@ -106,8 +104,7 @@ int ScriptApiDetached::detached_inventory_AllowTake( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_take should return a number. name=" + name); int ret = luaL_checkinteger(L, -1); @@ -139,8 +136,7 @@ void ScriptApiDetached::detached_inventory_OnMove( lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 0, m_errorhandler)); } // Report put items @@ -164,8 +160,7 @@ void ScriptApiDetached::detached_inventory_OnPut( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); } // Report taken items @@ -189,8 +184,7 @@ void ScriptApiDetached::detached_inventory_OnTake( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); } // Retrieves core.detached_inventories[name][callbackname] diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp index e3a9ac7aa..1ca06de76 100644 --- a/src/script/cpp_api/s_item.cpp +++ b/src/script/cpp_api/s_item.cpp @@ -42,8 +42,7 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item, LuaItemStack::create(L, item); objectrefGetOrCreate(L, dropper); pushFloatPos(L, pos); - if (lua_pcall(L, 3, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 1, m_errorhandler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -68,8 +67,7 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item, LuaItemStack::create(L, item); objectrefGetOrCreate(L, placer); pushPointedThing(pointed); - if (lua_pcall(L, 3, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 1, m_errorhandler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -94,8 +92,7 @@ bool ScriptApiItem::item_OnUse(ItemStack &item, LuaItemStack::create(L, item); objectrefGetOrCreate(L, user); pushPointedThing(pointed); - if (lua_pcall(L, 3, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 1, m_errorhandler)); if(!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -116,7 +113,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user, lua_getfield(L, -1, "on_craft"); LuaItemStack::create(L, item); objectrefGetOrCreate(L, user); - + // Push inventory list std::vector items; for (u32 i = 0; i < old_craft_grid->getSize(); i++) { @@ -125,8 +122,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user, push_items(L, items); InvRef::create(L, craft_inv); - if (lua_pcall(L, 4, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 1, m_errorhandler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -156,8 +152,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user, push_items(L, items); InvRef::create(L, craft_inv); - if (lua_pcall(L, 4, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 1, m_errorhandler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); diff --git a/src/script/cpp_api/s_mainmenu.cpp b/src/script/cpp_api/s_mainmenu.cpp index 7430b0f4f..17ceff082 100644 --- a/src/script/cpp_api/s_mainmenu.cpp +++ b/src/script/cpp_api/s_mainmenu.cpp @@ -55,8 +55,7 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text) // Call it lua_pushstring(L, text.c_str()); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); } void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields) @@ -85,7 +84,6 @@ void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields) } // Call it - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); } diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp index 7df712ca0..dac058b13 100644 --- a/src/script/cpp_api/s_node.cpp +++ b/src/script/cpp_api/s_node.cpp @@ -106,8 +106,7 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node, pushnode(L, node, ndef); objectrefGetOrCreate(L, puncher); pushPointedThing(pointed); - if (lua_pcall(L, 4, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 0, m_errorhandler)); return true; } @@ -126,8 +125,7 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node, push_v3s16(L, p); pushnode(L, node, ndef); objectrefGetOrCreate(L, digger); - if (lua_pcall(L, 3, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler)); return true; } @@ -143,8 +141,7 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); } void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node) @@ -159,8 +156,7 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); } void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node) @@ -176,8 +172,7 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); pushnode(L, node, ndef); - if (lua_pcall(L, 2, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); } bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) @@ -193,8 +188,7 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) // Call function push_v3s16(L, p); lua_pushnumber(L,dtime); - if (lua_pcall(L, 2, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler)); return (bool) lua_isboolean(L, -1) && (bool) lua_toboolean(L, -1) == true; } @@ -229,8 +223,7 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p, lua_settable(L, -3); } objectrefGetOrCreate(L, sender); // player - if (lua_pcall(L, 4, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 0, m_errorhandler)); } void ScriptApiNode::node_falling_update(v3s16 p) @@ -239,8 +232,7 @@ void ScriptApiNode::node_falling_update(v3s16 p) lua_getglobal(L, "nodeupdate"); push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); } void ScriptApiNode::node_falling_update_single(v3s16 p) @@ -249,7 +241,5 @@ void ScriptApiNode::node_falling_update_single(v3s16 p) lua_getglobal(L, "nodeupdate_single"); push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); } - diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp index 01eee337c..638750b0e 100644 --- a/src/script/cpp_api/s_nodemeta.cpp +++ b/src/script/cpp_api/s_nodemeta.cpp @@ -54,8 +54,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 1, m_errorhandler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_move should" " return a number, guilty node: " + nodename); @@ -89,8 +88,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler)); if(!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_put should" " return a number, guilty node: " + nodename); @@ -124,8 +122,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_take should" " return a number, guilty node: " + nodename); @@ -162,8 +159,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 0, m_errorhandler)); } // Report put items @@ -191,8 +187,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); } // Report taken items @@ -220,13 +215,14 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); } -ScriptApiNodemeta::ScriptApiNodemeta() { +ScriptApiNodemeta::ScriptApiNodemeta() +{ } -ScriptApiNodemeta::~ScriptApiNodemeta() { +ScriptApiNodemeta::~ScriptApiNodemeta() +{ } diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index a499130c7..676b07537 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -81,8 +81,7 @@ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player, objectrefGetOrCreate(L, player); lua_pushnumber(L, hp_change); - if (lua_pcall(L, 2, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler)); hp_change = lua_tointeger(L, -1); lua_pop(L, -1); return hp_change; diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index 21fe164aa..5b4626f40 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -32,8 +32,7 @@ bool ScriptApiServer::getAuth(const std::string &playername, if (lua_type(L, -1) != LUA_TFUNCTION) throw LuaError("Authentication handler missing get_auth"); lua_pushstring(L, playername.c_str()); - if (lua_pcall(L, 1, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler)); lua_remove(L, -2); // Remove auth handler // nil = login not allowed @@ -104,8 +103,7 @@ void ScriptApiServer::createAuth(const std::string &playername, throw LuaError("Authentication handler missing create_auth"); lua_pushstring(L, playername.c_str()); lua_pushstring(L, password.c_str()); - if (lua_pcall(L, 2, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); } bool ScriptApiServer::setPassword(const std::string &playername, @@ -120,8 +118,7 @@ bool ScriptApiServer::setPassword(const std::string &playername, throw LuaError("Authentication handler missing set_password"); lua_pushstring(L, playername.c_str()); lua_pushstring(L, password.c_str()); - if (lua_pcall(L, 2, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler)); return lua_toboolean(L, -1); } diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 50c445d50..48c46c079 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -77,8 +77,9 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, pushnode(L, n, env->getGameDef()->ndef()); lua_pushnumber(L, active_object_count); lua_pushnumber(L, active_object_count_wider); - if(lua_pcall(L, 4, 0, errorhandler)) - script_error(L); + + PCALL_RESL(L, lua_pcall(L, 4, 0, errorhandler)); + lua_pop(L, 1); // Pop error handler } @@ -418,8 +419,9 @@ int ModApiEnvMod::l_add_item(lua_State *L) return 0; lua_pushvalue(L, 1); lua_pushstring(L, item.getItemString().c_str()); - if(lua_pcall(L, 2, 1, errorhandler)) - script_error(L); + + PCALL_RESL(L, lua_pcall(L, 2, 1, errorhandler)); + lua_remove(L, errorhandler); // Remove error handler return 1; } diff --git a/src/script/scripting_game.cpp b/src/script/scripting_game.cpp index 8047c58cc..4f0350d41 100644 --- a/src/script/scripting_game.cpp +++ b/src/script/scripting_game.cpp @@ -105,7 +105,7 @@ void GameScripting::InitializeModApi(lua_State *L, int top) LuaSettings::Register(L); } -void log_deprecated(std::string message) +void log_deprecated(const std::string &message) { - log_deprecated(NULL,message); + log_deprecated(NULL, message); } diff --git a/src/script/scripting_game.h b/src/script/scripting_game.h index 16d5dcb37..970b3e80d 100644 --- a/src/script/scripting_game.h +++ b/src/script/scripting_game.h @@ -52,6 +52,6 @@ private: void InitializeModApi(lua_State *L, int top); }; -void log_deprecated(std::string message); +void log_deprecated(const std::string &message); #endif /* SCRIPTING_GAME_H_ */ From 49cf66d78566de128ec8879044e9d9e2fac0ba1c Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 6 Aug 2015 04:59:38 +0200 Subject: [PATCH 275/670] Initialize random for verification key generation too --- src/util/srp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util/srp.cpp b/src/util/srp.cpp index 0d3ddf278..94426db92 100644 --- a/src/util/srp.cpp +++ b/src/util/srp.cpp @@ -593,6 +593,8 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg, if(!ng) goto cleanup_and_exit; + init_random(); /* Only happens once */ + if (*bytes_s == NULL) { *len_s = 16; if (RAND_BUFF_MAX - g_rand_idx < 16) From bd0b469d3d212ae1407233bdb743bfcab31b4dc7 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 5 Aug 2015 23:53:26 -0400 Subject: [PATCH 276/670] Fix critical vulnerabilities and bugs with NetworkPacket --- src/network/networkpacket.cpp | 119 +++++++++++++++++++--------------- src/network/networkpacket.h | 13 ++-- 2 files changed, 69 insertions(+), 63 deletions(-) diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index 1e4b6e23e..0c5604872 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -39,9 +39,9 @@ NetworkPacket::~NetworkPacket() m_data.clear(); } -void NetworkPacket::checkReadOffset(u32 from_offset) +void NetworkPacket::checkReadOffset(u32 from_offset, u32 field_size) { - if (from_offset >= m_datasize) { + if (from_offset + field_size > m_datasize) { std::stringstream ss; ss << "Reading outside packet (offset: " << from_offset << ", packet size: " << getSize() << ")"; @@ -65,7 +65,7 @@ void NetworkPacket::putRawPacket(u8 *data, u32 datasize, u16 peer_id) char* NetworkPacket::getString(u32 from_offset) { - checkReadOffset(from_offset); + checkReadOffset(from_offset, 0); return (char*)&m_data[from_offset]; } @@ -83,6 +83,7 @@ void NetworkPacket::putRawString(const char* src, u32 len) NetworkPacket& NetworkPacket::operator>>(std::string& dst) { + checkReadOffset(m_read_offset, 2); u16 strLen = readU16(&m_data[m_read_offset]); m_read_offset += sizeof(u16); @@ -92,6 +93,8 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) return *this; } + checkReadOffset(m_read_offset, strLen); + dst.reserve(strLen); dst.append((char*)&m_data[m_read_offset], strLen); @@ -127,8 +130,9 @@ void NetworkPacket::putLongString(std::string src) NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) { + checkReadOffset(m_read_offset, 2); u16 strLen = readU16(&m_data[m_read_offset]); - m_read_offset += sizeof(u16); + m_read_offset += 2; dst.clear(); @@ -136,6 +140,8 @@ NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) return *this; } + checkReadOffset(m_read_offset, strLen * 2); + dst.reserve(strLen); for(u16 i=0; i>(char& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 1); dst = readU8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 1; return *this; } char NetworkPacket::getChar(u32 offset) { - checkReadOffset(offset); + checkReadOffset(offset, 1); return readU8(&m_data[offset]); } NetworkPacket& NetworkPacket::operator<<(char src) { - checkDataSize(); + checkDataSize(1); writeU8(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator<<(u8 src) { - checkDataSize(); + checkDataSize(1); writeU8(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator<<(bool src) { - checkDataSize(); + checkDataSize(1); writeU8(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator<<(u16 src) { - checkDataSize(); + checkDataSize(2); writeU16(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 2; return *this; } NetworkPacket& NetworkPacket::operator<<(u32 src) { - checkDataSize(); + checkDataSize(4); writeU32(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator<<(u64 src) { - checkDataSize(); + checkDataSize(8); writeU64(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator<<(float src) { - checkDataSize(); + checkDataSize(4); writeF1000(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator>>(bool& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 1); dst = readU8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator>>(u8& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 1); dst = readU8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 1; return *this; } u8 NetworkPacket::getU8(u32 offset) { - checkReadOffset(offset); + checkReadOffset(offset, 1); return readU8(&m_data[offset]); } @@ -302,85 +311,85 @@ u8* NetworkPacket::getU8Ptr(u32 from_offset) return NULL; } - checkReadOffset(from_offset); + checkReadOffset(from_offset, 1); return (u8*)&m_data[from_offset]; } NetworkPacket& NetworkPacket::operator>>(u16& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 2); dst = readU16(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 2; return *this; } u16 NetworkPacket::getU16(u32 from_offset) { - checkReadOffset(from_offset); + checkReadOffset(from_offset, 2); return readU16(&m_data[from_offset]); } NetworkPacket& NetworkPacket::operator>>(u32& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readU32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator>>(u64& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 8); dst = readU64(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator>>(float& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readF1000(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator>>(v2f& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 8); dst = readV2F1000(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator>>(v3f& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 12); dst = readV3F1000(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 12; return *this; } NetworkPacket& NetworkPacket::operator>>(s16& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 2); dst = readS16(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 2; return *this; } @@ -392,11 +401,11 @@ NetworkPacket& NetworkPacket::operator<<(s16 src) NetworkPacket& NetworkPacket::operator>>(s32& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readS32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } @@ -408,29 +417,31 @@ NetworkPacket& NetworkPacket::operator<<(s32 src) NetworkPacket& NetworkPacket::operator>>(v3s16& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 6); dst = readV3S16(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 6; return *this; } NetworkPacket& NetworkPacket::operator>>(v2s32& dst) { + checkReadOffset(m_read_offset, 8); + dst = readV2S32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator>>(v3s32& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 12); dst = readV3S32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 12; return *this; } @@ -474,21 +485,21 @@ NetworkPacket& NetworkPacket::operator<<(v3s32 src) NetworkPacket& NetworkPacket::operator>>(video::SColor& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readARGB8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator<<(video::SColor src) { - checkDataSize(); + checkDataSize(4); writeU32(&m_data[m_read_offset], src.color); - incrOffset(); + m_read_offset += 4; return *this; } diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 0408b9cac..72f8cabe2 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -111,21 +111,16 @@ public: // Temp, we remove SharedBuffer when migration finished Buffer oldForgePacket(); private: - void checkReadOffset(u32 from_offset); + void checkReadOffset(u32 from_offset, u32 field_size); - template void checkDataSize() + inline void checkDataSize(u32 field_size) { - if (m_read_offset + sizeof(T) > m_datasize) { - m_datasize = m_read_offset + sizeof(T); + if (m_read_offset + field_size > m_datasize) { + m_datasize = m_read_offset + field_size; m_data.resize(m_datasize); } } - template void incrOffset() - { - m_read_offset += sizeof(T); - } - std::vector m_data; u32 m_datasize; u32 m_read_offset; From 8560ece02e36b1e0ee7b86db2a38b8becbb639e4 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 6 Aug 2015 02:15:21 -0400 Subject: [PATCH 277/670] Fix BufferedPacket race condition (fixes #2983) This was caused by the use the non-threadsafe SharedBuffer in a threaded context. --- src/network/connection.h | 2 +- src/util/pointer.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/network/connection.h b/src/network/connection.h index c48da2c70..f15c3e114 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -172,7 +172,7 @@ struct BufferedPacket data(a_size), time(0.0), totaltime(0.0), absolute_send_time(-1), resend_count(0) {} - SharedBuffer data; // Data of the packet, including headers + Buffer data; // Data of the packet, including headers float time; // Seconds from buffering the packet or re-sending float totaltime; // Seconds from buffering the packet unsigned int absolute_send_time; diff --git a/src/util/pointer.h b/src/util/pointer.h index 7922a9b39..7f6654787 100644 --- a/src/util/pointer.h +++ b/src/util/pointer.h @@ -178,6 +178,14 @@ private: unsigned int m_size; }; +/************************************************ + * !!! W A R N I N G !!! * + * !!! A C H T U N G !!! * + * * + * This smart pointer class is NOT thread safe. * + * ONLY use in a single-threaded context! * + * * + ************************************************/ template class SharedBuffer { From 5c3c965c1a6e1fb5957d441c2d04d8470b80d710 Mon Sep 17 00:00:00 2001 From: gregorycu Date: Sun, 1 Feb 2015 14:40:50 +1100 Subject: [PATCH 278/670] Fix detection of sneaking node This fixes bug 1551 --- src/localplayer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 1a59504ef..aee862200 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -230,7 +230,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, player is sneaking from, if any. If the node from under the player has been removed, the player falls. */ - v3s16 current_node = floatToInt(position - v3f(0,BS/2,0), BS); + v3s16 current_node = floatToInt(position - v3f(0, 0.05 * BS, 0), BS); if(m_sneak_node_exists && nodemgr->get(map->getNodeNoEx(m_old_node_below)).name == "air" && m_old_node_below_type != "air") @@ -248,7 +248,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, } if(m_need_to_get_new_sneak_node && physics_override_sneak) { - v3s16 pos_i_bottom = floatToInt(position - v3f(0,BS/2,0), BS); + v3s16 pos_i_bottom = floatToInt(position - v3f(0, 0.05 * BS ,0), BS); v2f player_p2df(position.X, position.Z); f32 min_distance_f = 100000.0*BS; // If already seeking from some node, compare to it. From 63b12f1f048d83632069a4d0b3d2649cf9be7904 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Fri, 7 Aug 2015 06:02:06 +0200 Subject: [PATCH 279/670] Fix camera updates being toggled by N key in release mode (#2762) --- src/defaultsettings.cpp | 2 +- src/keycode.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 4674b2b77..40afc7dd3 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -58,7 +58,7 @@ void set_default_settings(Settings *settings) #if DEBUG "KEY_F4"); #else - "none"); + ""); #endif settings->setDefault("keymap_toggle_debug", "KEY_F5"); settings->setDefault("keymap_toggle_profiler", "KEY_F6"); diff --git a/src/keycode.cpp b/src/keycode.cpp index 1ec325961..990dee339 100644 --- a/src/keycode.cpp +++ b/src/keycode.cpp @@ -256,7 +256,11 @@ KeyPress::KeyPress() : KeyPress::KeyPress(const char *name) { - if (strlen(name) > 4) { + if (name[0] == 0) { + Key = irr::KEY_KEY_CODES_COUNT; + Char = L'\0'; + return; + } else if (strlen(name) > 4) { try { Key = keyname_to_keycode(name); m_name = name; From 5622fb2cee6d86f0220ea5773ec78f5f2f6714c3 Mon Sep 17 00:00:00 2001 From: Jean-Patrick G Date: Fri, 17 Jul 2015 09:55:51 +0200 Subject: [PATCH 280/670] Translated using Weblate (French) Currently translated at 96.2% (260 of 270 strings) --- po/fr/minetest.po | 98 ++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 53 deletions(-) diff --git a/po/fr/minetest.po b/po/fr/minetest.po index 3ede5f212..d2057ac19 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-08 11:41+0200\n" +"PO-Revision-Date: 2015-07-17 09:55+0200\n" "Last-Translator: Jean-Patrick G. \n" -"Language-Team: French \n" +"Language-Team: French " +"\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +21,11 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Une erreur est survenue avec un script Lua, comme un mod :" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Une erreur est survenue :" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -38,6 +38,7 @@ msgstr "Chargement..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Rechargez la liste des serveurs publics et vérifiez votre connexion Internet." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -206,9 +207,8 @@ msgid "Search" msgstr "Rechercher" #: builtin/mainmenu/store.lua:126 -#, fuzzy msgid "Downloading $1, please wait..." -msgstr "veuillez patienter..." +msgstr "Téléchargement de $1, veuillez patienter..." #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" @@ -251,9 +251,8 @@ msgid "Active Contributors" msgstr "Contributeurs actifs" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Développeurs principaux" +msgstr "Anciens développeurs" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -296,14 +295,12 @@ msgid "Mods" msgstr "Mods" #: builtin/mainmenu/tab_multiplayer.lua:23 -#, fuzzy msgid "Address / Port :" -msgstr "Adresse / Port" +msgstr "Adresse / Port :" #: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy msgid "Name / Password :" -msgstr "Nom / Mot de passe" +msgstr "Nom / Mot de passe :" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 @@ -322,21 +319,18 @@ msgstr "Rejoindre" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 -#, fuzzy msgid "Creative mode" msgstr "Mode créatif" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 -#, fuzzy msgid "Damage enabled" -msgstr "activé" +msgstr "Dégâts activés" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 -#, fuzzy msgid "PvP enabled" -msgstr "activé" +msgstr "Combat activé" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" @@ -391,54 +385,48 @@ msgstr "Port du serveur" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "Nom du monde manquant ou aucun jeu sélectionné" +msgstr "Aucun monde créé ou sélectionné !" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Serveur" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Eau opaque" +msgstr "Arbres minimaux" #: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy msgid "Simple Leaves" -msgstr "Feuilles mouvantes" +msgstr "Arbres simples" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" msgstr "Arbres détaillés" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Aucun filtrage" #: builtin/mainmenu/tab_settings.lua:33 -#, fuzzy msgid "Bilinear Filter" msgstr "Filtrage bilinéaire" #: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy msgid "Trilinear Filter" msgstr "Filtrage trilinéaire" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" -msgstr "" +msgstr "Sans MIP map" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" -msgstr "" +msgstr "MIP mapping" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "MIP map + anisotropie" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" @@ -470,15 +458,15 @@ msgstr "Verre connecté" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" -msgstr "" +msgstr "Eclairage des nodes" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "" +msgstr "Textures :" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "" +msgstr "Affichage :" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" @@ -505,10 +493,12 @@ msgid "Scaling factor applied to menu elements: " msgstr "Taille appliquée aux menus : " #: builtin/mainmenu/tab_settings.lua:250 +#, fuzzy msgid "Touch free target" msgstr "" #: builtin/mainmenu/tab_settings.lua:256 +#, fuzzy msgid "Touchthreshold (px)" msgstr "" @@ -577,22 +567,20 @@ msgid "Texturepacks" msgstr "Packs de textures" #: src/client.cpp:1721 -#, fuzzy msgid "Loading textures..." -msgstr "Chargement..." +msgstr "Chargement des textures..." #: src/client.cpp:1736 -#, fuzzy msgid "Rebuilding shaders..." -msgstr "Résolution de l'adresse..." +msgstr "Construction des shaders..." #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "" +msgstr "Initialisation des nodes..." #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "" +msgstr "Initialisation des nodes" #: src/client.cpp:1768 msgid "Item textures..." @@ -600,7 +588,7 @@ msgstr "Textures d'objets..." #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Terminé !" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" @@ -620,7 +608,7 @@ msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "Le chemin du monde spécifié n'existe pas :" +msgstr "Le chemin du monde spécifié n'existe pas : " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" @@ -631,6 +619,7 @@ msgid "Invalid gamespec." msgstr "gamespec invalide." #: src/fontengine.cpp:70 src/fontengine.cpp:226 +#, fuzzy msgid "needs_fallback_font" msgstr "needs_fallback_font" @@ -647,6 +636,7 @@ msgid "Respawn" msgstr "Ressusciter" #: src/game.cpp:1092 +#, fuzzy msgid "" "Default Controls:\n" "No menu visible:\n" @@ -701,7 +691,6 @@ msgid "Sound Volume" msgstr "Volume du son" #: src/game.cpp:1136 -#, fuzzy msgid "Change Keys" msgstr "Changer les touches" @@ -714,12 +703,10 @@ msgid "Exit to OS" msgstr "Quitter le jeu" #: src/game.cpp:1841 -#, fuzzy msgid "Shutting down..." -msgstr "Quitter le jeu..." +msgstr "Fermeture du jeu..." #: src/game.cpp:1948 -#, fuzzy msgid "Creating server..." msgstr "Création du serveur..." @@ -749,11 +736,11 @@ msgstr "Média..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "Ko/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "Mo/s" #: src/game.cpp:4363 msgid "" @@ -848,9 +835,8 @@ msgid "Toggle fast" msgstr "Mode rapide" #: src/guiKeyChangeMenu.cpp:413 -#, fuzzy msgid "Toggle Cinematic" -msgstr "Mode rapide" +msgstr "Mode cinématique" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" @@ -886,7 +872,7 @@ msgstr "Les mots de passe ne correspondent pas !" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " -msgstr "Volume du son :" +msgstr "Volume du son : " #: src/guiVolumeChange.cpp:119 msgid "Exit" @@ -930,13 +916,14 @@ msgstr "Bouton X 2" #: src/keycode.cpp:225 msgid "Capital" -msgstr "Verr. maj." +msgstr "Verr Maj" #: src/keycode.cpp:225 msgid "Control" msgstr "Contrôle" #: src/keycode.cpp:225 +#, fuzzy msgid "Kana" msgstr "Kana" @@ -965,14 +952,17 @@ msgid "Final" msgstr "Final" #: src/keycode.cpp:226 +#, fuzzy msgid "Junja" msgstr "Junja" #: src/keycode.cpp:226 +#, fuzzy msgid "Kanji" msgstr "Kanji" #: src/keycode.cpp:226 +#, fuzzy msgid "Nonconvert" msgstr "Nonconvert" @@ -1106,7 +1096,7 @@ msgstr "Pavé num. 9" #: src/keycode.cpp:239 msgid "Num Lock" -msgstr "Verr. pavé num." +msgstr "Verr Num" #: src/keycode.cpp:239 msgid "Scroll Lock" @@ -1165,10 +1155,12 @@ msgid "Erase OEF" msgstr "Écraser l'OEF" #: src/keycode.cpp:248 +#, fuzzy msgid "ExSel" msgstr "ExSel" #: src/keycode.cpp:248 +#, fuzzy msgid "OEM Clear" msgstr "OEM Clear" From a2f12bf05457096dc43d203540e95c2eed0c0730 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 17 Jul 2015 07:39:41 +0200 Subject: [PATCH 281/670] Translated using Weblate (German) Currently translated at 99.6% (269 of 270 strings) --- po/de/minetest.po | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index ccf9132e6..1f2e74fa3 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,23 +8,24 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-03-16 15:50+0100\n" -"Last-Translator: Wuzzy \n" -"Language-Team: Deutsch <>\n" +"PO-Revision-Date: 2015-07-17 07:39+0200\n" +"Last-Translator: est31 \n" +"Language-Team: German " +"\n" "Language: de\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: Poedit 1.7.1\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Fehler in Lua (z. B. wegen mod):" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Ein Fehler ist aufgetreten:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -251,9 +252,8 @@ msgid "Active Contributors" msgstr "Aktive Mitwirkende" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Hauptentwickler" +msgstr "Ehemalige Hauptentwickler" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -386,28 +386,24 @@ msgstr "Serverport" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "Kein Weltname gegeben oder kein Spiel ausgewählt" +msgstr "Kein Weltname angegeben oder kein Spiel ausgewählt!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Undurchs. Wasser" +msgstr "Undurchs. Blätter" #: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy msgid "Simple Leaves" -msgstr "Wehende Blätter" +msgstr "Einfache Blätter" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Schöne Bäume" +msgstr "Schöne Blätter" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" @@ -582,9 +578,8 @@ msgid "Initializing nodes..." msgstr "Blöcke initialisieren ..." #: src/client.cpp:1760 -#, fuzzy msgid "Initializing nodes" -msgstr "Blöcke initialisieren ..." +msgstr "Blöcke initialisieren" #: src/client.cpp:1768 msgid "Item textures..." @@ -750,11 +745,11 @@ msgstr "Medien ..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" From 0d1243ce0bf0ec5fcff8ac4f6aa47663a129e362 Mon Sep 17 00:00:00 2001 From: Rui Date: Fri, 17 Jul 2015 14:25:05 +0200 Subject: [PATCH 282/670] Translated using Weblate (Japanese) Currently translated at 96.2% (260 of 270 strings) --- po/ja/minetest.po | 183 ++++++++++++++++++++++------------------------ 1 file changed, 88 insertions(+), 95 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index ae26e294f..0061ee943 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -16,11 +16,11 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "以下のModのLuaスクリプト内でエラーが発生しました:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "エラーが発生しました:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -32,7 +32,7 @@ msgstr "読み込み中..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." -msgstr "" +msgstr "インターネット接続を確認し、公開サーバーリストを再有効化してください。" #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -41,12 +41,12 @@ msgstr "ワールド:" #: builtin/mainmenu/dlg_config_world.lua:33 #: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" -msgstr "ゲームを隠す" +msgstr "ゲームを非表示" #: builtin/mainmenu/dlg_config_world.lua:39 #: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" -msgstr "Modパックの簡略化" +msgstr "Modパックを非表示" #: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" @@ -110,23 +110,23 @@ msgstr "ゲームがインストールされていません。" #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "minetest.netから再ダウンロードしてください。" +msgstr "minetest.netから再ダウンロードしてください" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." -msgstr "警告:Minimal development testは開発者のためのゲームです。" +msgstr "警告: Minimal development testは開発者のためのゲームです。" #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください。" +msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" -msgstr "ワールド名\"$1\"はすでに使用されています。" +msgstr "ワールド名\"$1\"はすでに使用されています" #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" -msgstr "ワールド名が入力されていないか、ゲームが選択されていません。" +msgstr "ワールド名が入力されていないか、ゲームが選択されていません" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" @@ -144,15 +144,15 @@ msgstr "いいえ" #: builtin/mainmenu/dlg_delete_mod.lua:41 msgid "Modmgr: failed to delete \"$1\"" -msgstr "Modマネージャ:\"$1\"の削除に失敗しました。" +msgstr "Modマネージャ: \"$1\"の削除に失敗しました" #: builtin/mainmenu/dlg_delete_mod.lua:45 msgid "Modmgr: invalid modpath \"$1\"" -msgstr "Modマネージャ:Mod\"$1\"の場所が不明です。" +msgstr "Modマネージャ: Mod\"$1\"の場所が不明です" #: builtin/mainmenu/dlg_delete_world.lua:24 msgid "Delete World \"$1\"?" -msgstr "ワールド\"$1\"を削除してよろしいですか?" +msgstr "ワールド\"$1\"を削除しますか?" #: builtin/mainmenu/dlg_delete_world.lua:26 msgid "No" @@ -168,7 +168,7 @@ msgstr "決定" #: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" -msgstr "Modインストール:ファイル\"$1\"からModをインストールします。" +msgstr "Modインストール: ファイル\"$1\"からModをインストールします。" #: builtin/mainmenu/modmgr.lua:345 msgid "" @@ -176,21 +176,19 @@ msgid "" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Modインストール:ファイル\"$1\"は非対応の形式か、壊れています。" +"Modインストール: ファイル\"$1\"は非対応の形式か、壊れています。" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" -msgstr "$2へ$1をインストールできませんでした。" +msgstr "$2へ$1をインストールできませんでした" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "" -"Modインストール:Modパック$1に適したフォルダ名を見つけることができませんでし" -"た。" +msgstr "Modインストール: Modパック$1に適したフォルダ名を見つけることができませんでした" #: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" -msgstr "Modインストール:$1の本来のMod名が不明です。" +msgstr "Modインストール: $1の本来のMod名が不明です" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" @@ -206,7 +204,7 @@ msgstr "$1をダウンロードしています。しばらくお待ちくださ #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" -msgstr "インストールが完了しました。:" +msgstr "インストールが完了しました:" #: builtin/mainmenu/store.lua:162 msgid "Shortname:" @@ -230,11 +228,11 @@ msgstr "閉じる" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" -msgstr "ページ $1/$2" +msgstr "ページ $1 / $2" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" -msgstr "クレジット" +msgstr "クレジット" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" @@ -245,9 +243,8 @@ msgid "Active Contributors" msgstr "開発協力者" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "開発者" +msgstr "以前の開発者" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -300,7 +297,7 @@ msgstr "名前とパスワード:" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 msgid "Public Serverlist" -msgstr "公開済みのサーバーの一覧" +msgstr "公開サーバーリスト" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 #: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 @@ -315,21 +312,21 @@ msgstr "接続" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 msgid "Creative mode" -msgstr "クリエイティブモード" +msgstr "クリエイティブモード" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 msgid "Damage enabled" -msgstr "HPあり" +msgstr "ダメージ有効" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 msgid "PvP enabled" -msgstr "PvPあり" +msgstr "PvP有効" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" -msgstr "クライアント" +msgstr "クライアント" #: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" @@ -351,16 +348,16 @@ msgstr "ワールドを選択:" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 #: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" -msgstr "クリエイティブモード" +msgstr "クリエイティブモード" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 #: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" -msgstr "ダメージあり" +msgstr "ダメージ有効" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" -msgstr "サーバーを公開する" +msgstr "公開サーバー" #: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 msgid "Name/Password" @@ -380,28 +377,24 @@ msgstr "サーバーのポート" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "ワールド名が入力されていないか、ゲームが選択されていません。" +msgstr "ワールドが作成または選択されていません!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" -msgstr "サーバー" +msgstr "サーバー" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "不透明な水" +msgstr "不透明な葉" #: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy msgid "Simple Leaves" -msgstr "揺れる葉" +msgstr "シンプルな葉" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "綺麗な木" +msgstr "綺麗な葉" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" @@ -433,7 +426,7 @@ msgstr "シングルプレイヤーのワールドをリセットしてよろし #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "いいえ" +msgstr "いいえ!!!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" @@ -441,11 +434,11 @@ msgstr "滑らかな光" #: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" -msgstr "パーティクル有効化" +msgstr "パーティクル有効化" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" -msgstr "立体の雲" +msgstr "3Dの雲" #: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" @@ -453,11 +446,11 @@ msgstr "不透明な水" #: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" -msgstr "ガラスをつなげる" +msgstr "ガラスを繋げる" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" -msgstr "ノードの強調" +msgstr "ノードをハイライト" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" @@ -469,11 +462,11 @@ msgstr "レンダリング:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" -msgstr "ドライバーを変更するためMinetesを再起動します" +msgstr "ドライバーを変更するためMinetestを再起動します" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" -msgstr "シェーダー" +msgstr "シェーダー" #: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" @@ -497,19 +490,19 @@ msgstr "タッチ位置を自由にする" #: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" -msgstr "タッチのしきい値(ピクセル単位)" +msgstr "タッチのしきい値(ピクセル)" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" -msgstr "バンプマッピング" +msgstr "バンプマッピング" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" -msgstr "ノーマルマップの生成" +msgstr "ノーマルマップの生成" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" -msgstr "視差遮蔽マッピング" +msgstr "視差遮蔽マッピング" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" @@ -525,7 +518,7 @@ msgstr "揺れる草花" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "シェーダーを有効にするにはOpenGLを使用する必要があります。" +msgstr "シェーダーを有効にするにはOpenGLを使用する必要があります。" #: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" @@ -533,7 +526,7 @@ msgstr "設定" #: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" -msgstr "ゲームスタート" +msgstr "シングルプレイ開始" #: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" @@ -545,11 +538,11 @@ msgstr "メイン" #: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" -msgstr "ゲームスタート" +msgstr "プレイ" #: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" -msgstr "シングルプレイヤー" +msgstr "シングルプレイヤー" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" @@ -561,7 +554,7 @@ msgstr "情報がありません。" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" -msgstr "テクスチャパック" +msgstr "テクスチャパック" #: src/client.cpp:1721 msgid "Loading textures..." @@ -581,7 +574,7 @@ msgstr "ノードを設定中" #: src/client.cpp:1768 msgid "Item textures..." -msgstr "アイテムのテクスチャを設定中..." +msgstr "テクスチャを設定中..." #: src/client.cpp:1793 msgid "Done!" @@ -625,11 +618,11 @@ msgstr "決定" #: src/game.cpp:1072 msgid "You died." -msgstr "You died." +msgstr "死にました。" #: src/game.cpp:1073 msgid "Respawn" -msgstr "Respawn" +msgstr "リスポーン" #: src/game.cpp:1092 msgid "" @@ -647,17 +640,17 @@ msgid "" " --> place single item to slot\n" msgstr "" "基本操作:\n" -"タッチによる操作\n" -"- シングルタップ:ブロックの破壊\n" -"- ダブルタップ:設置やアイテムの使用\n" -"- 指でスライド:見回す\n" -"メニュー(インベントリ)の操作\n" -"- ダブルタップ:\n" -"-- 閉じる\n" -"- アイテムスロットをタッチ:\n" -"-- アイテムの移動\n" -"- タッチしてドラッグ:\n" -"-- アイテムを置く\n" +"タッチ操作:\n" +"- シングルタップ: ブロックの破壊\n" +"- ダブルタップ: 設置、使用\n" +"- スライド: 見回す\n" +"メニュー、インベントリの操作:\n" +"- メニューの外をダブルタップ:\n" +" --> 閉じる\n" +"- アイテムをタッチ:\n" +" --> アイテムの移動\n" +"- タッチしてドラッグ、二本指タップ:\n" +" --> アイテムを一つスロットに置く\n" #: src/game.cpp:1106 msgid "" @@ -674,16 +667,16 @@ msgid "" "- T: chat\n" msgstr "" "基本操作:\n" -"- WASD:移動\n" -"- スペース:ジャンプ、登る\n" -"- Shift:スニーク、降りる\n" -"- Q:アイテムを落とす\n" -"- I:インベントリ\n" -"- マウス移動:見回す\n" -"- 左クリック:ブロック破壊\n" -"- 右クリック:設置や使用\n" -"- ホイール:アイテム選択\n" -"- T:チャット画面\n" +"- WASD: 移動\n" +"- スペース: ジャンプ、登る\n" +"- Shift: スニーク、降りる\n" +"- Q: アイテムを落とす\n" +"- I: インベントリ\n" +"- マウス: 見回す\n" +"- 左クリック: 破壊、パンチ\n" +"- 右クリック: 設置、使用\n" +"- ホイール: アイテム選択\n" +"- T: チャット画面\n" #: src/game.cpp:1125 msgid "Continue" @@ -691,7 +684,7 @@ msgstr "再開" #: src/game.cpp:1129 msgid "Change Password" -msgstr "パスワード変更" +msgstr "パスワード変更" #: src/game.cpp:1134 msgid "Sound Volume" @@ -715,11 +708,11 @@ msgstr "終了中..." #: src/game.cpp:1948 msgid "Creating server..." -msgstr "サーバー作成中..." +msgstr "サーバー起動中..." #: src/game.cpp:1984 msgid "Creating client..." -msgstr "クライアント作成中..." +msgstr "クライアント起動中..." #: src/game.cpp:2159 msgid "Resolving address..." @@ -739,15 +732,15 @@ msgstr "ノード定義中..." #: src/game.cpp:2329 msgid "Media..." -msgstr "..." +msgstr "通信中..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KB/秒" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MB/秒" #: src/game.cpp:4363 msgid "" @@ -759,7 +752,7 @@ msgstr "" #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " -msgstr "Enter" +msgstr "エンター" #: src/guiFormSpecMenu.cpp:2875 msgid "ok" @@ -779,7 +772,7 @@ msgstr "「ジャンプ」二回押しで飛行モード" #: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" -msgstr "すでに使われているキーです。" +msgstr "キーが重複しています。" #: src/guiKeyChangeMenu.cpp:373 msgid "press key" @@ -795,11 +788,11 @@ msgstr "後退" #: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" -msgstr "左に進む" +msgstr "左" #: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" -msgstr "右に進む" +msgstr "右" #: src/guiKeyChangeMenu.cpp:403 msgid "Use" @@ -843,7 +836,7 @@ msgstr "高速移動モード" #: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" -msgstr "シネマティックモード" +msgstr "映画風カメラ" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" @@ -1031,7 +1024,7 @@ msgstr "左Windows" #: src/keycode.cpp:233 msgid "Apps" -msgstr "Apps" +msgstr "アプリ" #: src/keycode.cpp:233 msgid "Numpad 0" @@ -1135,7 +1128,7 @@ msgstr "読点" #: src/keycode.cpp:243 msgid "Minus" -msgstr "ー" +msgstr "-" #: src/keycode.cpp:243 msgid "Period" From 5ffb752d3ae4ba14729d7301be544a6e8fbf51ce Mon Sep 17 00:00:00 2001 From: Jean-Patrick G Date: Fri, 17 Jul 2015 22:49:20 +0200 Subject: [PATCH 283/670] Translated using Weblate (French) Currently translated at 96.2% (260 of 270 strings) --- po/fr/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/fr/minetest.po b/po/fr/minetest.po index d2057ac19..b9666ccdf 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-17 09:55+0200\n" +"PO-Revision-Date: 2015-07-17 22:49+0200\n" "Last-Translator: Jean-Patrick G. \n" "Language-Team: French " "\n" @@ -442,7 +442,7 @@ msgstr "Lumière douce" #: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" -msgstr "Activer les particules" +msgstr "Particules" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" From 5447bb4e8346c81058180c48a05757ea5ef911ed Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 17 Jul 2015 16:47:21 +0200 Subject: [PATCH 284/670] Translated using Weblate (German) Currently translated at 99.6% (269 of 270 strings) --- po/de/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 1f2e74fa3..c33e650e7 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-17 07:39+0200\n" +"PO-Revision-Date: 2015-07-17 16:47+0200\n" "Last-Translator: est31 \n" "Language-Team: German " "\n" @@ -253,7 +253,7 @@ msgstr "Aktive Mitwirkende" #: builtin/mainmenu/tab_credits.lua:54 msgid "Previous Core Developers" -msgstr "Ehemalige Hauptentwickler" +msgstr "Frühere Hauptentwickler" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" From a8dbcbc2f29f2ecc73d2c8e9790b31d72487d60f Mon Sep 17 00:00:00 2001 From: Rui Date: Fri, 17 Jul 2015 14:33:04 +0200 Subject: [PATCH 285/670] Translated using Weblate (Japanese) Currently translated at 100.0% (270 of 270 strings) --- po/ja/minetest.po | 68 +++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index 0061ee943..fb68d7304 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,10 +3,10 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-09 15:56+0200\n" -"Last-Translator: sfan5 \n" -"Language-Team: Japanese \n" +"PO-Revision-Date: 2015-07-17 14:33+0200\n" +"Last-Translator: Rui \n" +"Language-Team: Japanese " +"\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -140,7 +140,7 @@ msgstr "はい" #: builtin/mainmenu/dlg_delete_mod.lua:28 msgid "No of course not!" -msgstr "いいえ" +msgstr "いいえ!" #: builtin/mainmenu/dlg_delete_mod.lua:41 msgid "Modmgr: failed to delete \"$1\"" @@ -160,7 +160,7 @@ msgstr "いいえ" #: builtin/mainmenu/dlg_rename_modpack.lua:26 msgid "Rename Modpack:" -msgstr "名前を変更" +msgstr "名前を変更:" #: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" @@ -168,7 +168,7 @@ msgstr "決定" #: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" -msgstr "Modインストール: ファイル\"$1\"からModをインストールします。" +msgstr "Modインストール: ファイル: \"$1\"" #: builtin/mainmenu/modmgr.lua:345 msgid "" @@ -176,7 +176,7 @@ msgid "" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Modインストール: ファイル\"$1\"は非対応の形式か、壊れています。" +"Modインストール: ファイル\"$1\"は非対応の形式か、壊れています" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" @@ -208,7 +208,7 @@ msgstr "インストールが完了しました:" #: builtin/mainmenu/store.lua:162 msgid "Shortname:" -msgstr "省略名" +msgstr "省略名:" #: builtin/mainmenu/store.lua:472 msgid "Rating" @@ -260,7 +260,7 @@ msgstr "オンラインでModを検索" #: builtin/mainmenu/tab_mods.lua:78 msgid "No mod description available" -msgstr "Modの説明がありません。" +msgstr "Modの説明がありません" #: builtin/mainmenu/tab_mods.lua:82 msgid "Mod information:" @@ -280,7 +280,7 @@ msgstr "選択したModを削除" #: builtin/mainmenu/tab_mods.lua:121 msgid "Select Mod File:" -msgstr "Modファイルを選択" +msgstr "Modファイルを選択:" #: builtin/mainmenu/tab_mods.lua:165 msgid "Mods" @@ -482,7 +482,7 @@ msgstr "メニューの大きさ" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " -msgstr "メニューの大きさとして設定する数値:" +msgstr "メニューの大きさとして設定する数値: " #: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" @@ -550,7 +550,7 @@ msgstr "テクスチャパックを選択:" #: builtin/mainmenu/tab_texturepacks.lua:69 msgid "No information available" -msgstr "情報がありません。" +msgstr "情報がありません" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" @@ -598,11 +598,11 @@ msgstr "ワールドが選択されていないアドレスです。続行でき #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "ワールドが存在しません:" +msgstr "ワールドが存在しません: " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" -msgstr "ゲーム\"の読み込みができません。" +msgstr "ゲーム\"の読み込みができません" #: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." @@ -752,7 +752,7 @@ msgstr "" #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " -msgstr "エンター" +msgstr "エンター " #: src/guiFormSpecMenu.cpp:2875 msgid "ok" @@ -760,7 +760,7 @@ msgstr "決定" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "操作の設定を変更します。" +msgstr "操作の設定です。(変更に失敗した場合、minetest.confから該当する設定を削除してください)" #: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" @@ -772,7 +772,7 @@ msgstr "「ジャンプ」二回押しで飛行モード" #: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" -msgstr "キーが重複しています。" +msgstr "キーが重複しています" #: src/guiKeyChangeMenu.cpp:373 msgid "press key" @@ -872,7 +872,7 @@ msgstr "パスワードが一致しません!" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " -msgstr "音量:" +msgstr "音量: " #: src/guiVolumeChange.cpp:119 msgid "Exit" @@ -896,7 +896,7 @@ msgstr "Xボタン1" #: src/keycode.cpp:224 msgid "Back" -msgstr "Back" +msgstr "戻るキー" #: src/keycode.cpp:224 msgid "Clear" @@ -1028,11 +1028,11 @@ msgstr "アプリ" #: src/keycode.cpp:233 msgid "Numpad 0" -msgstr "Numpad 0" +msgstr "テンキー 0" #: src/keycode.cpp:233 msgid "Numpad 1" -msgstr "Numpad 1" +msgstr "テンキー 1" #: src/keycode.cpp:233 msgid "Right Windows" @@ -1044,51 +1044,51 @@ msgstr "スリープ" #: src/keycode.cpp:234 msgid "Numpad 2" -msgstr "Numpad 2" +msgstr "テンキー 2" #: src/keycode.cpp:234 msgid "Numpad 3" -msgstr "Numpad 3" +msgstr "テンキー 3" #: src/keycode.cpp:234 msgid "Numpad 4" -msgstr "Numpad 4" +msgstr "テンキー 4" #: src/keycode.cpp:234 msgid "Numpad 5" -msgstr "Numpad 5" +msgstr "テンキー 5" #: src/keycode.cpp:234 msgid "Numpad 6" -msgstr "Numpad 6" +msgstr "テンキー 6" #: src/keycode.cpp:234 msgid "Numpad 7" -msgstr "Numpad 7" +msgstr "テンキー 7" #: src/keycode.cpp:235 msgid "Numpad *" -msgstr "Numpad *" +msgstr "テンキー *" #: src/keycode.cpp:235 msgid "Numpad +" -msgstr "Numpad +" +msgstr "テンキー +" #: src/keycode.cpp:235 msgid "Numpad -" -msgstr "Numpad -" +msgstr "テンキー -" #: src/keycode.cpp:235 msgid "Numpad /" -msgstr "Numpad /" +msgstr "テンキー /" #: src/keycode.cpp:235 msgid "Numpad 8" -msgstr "Numpad 8" +msgstr "テンキー 8" #: src/keycode.cpp:235 msgid "Numpad 9" -msgstr "Numpad 9" +msgstr "テンキー 9" #: src/keycode.cpp:239 msgid "Num Lock" From f75e6417ad542cc319423d0364cdc8e12d403ba3 Mon Sep 17 00:00:00 2001 From: Jackie Coe Date: Mon, 20 Jul 2015 11:44:09 +0200 Subject: [PATCH 286/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index c33e650e7..fe92c87a8 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-17 16:47+0200\n" -"Last-Translator: est31 \n" +"PO-Revision-Date: 2015-07-20 11:44+0200\n" +"Last-Translator: Jackie Coe \n" "Language-Team: German " "\n" "Language: de\n" @@ -38,6 +38,8 @@ msgstr "Laden ..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Bitte versuchen Sie den öffentliche Server-liste einzuschalten und Ihre " +"Internet Verbindung nachgucken." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" From ad49c96ecffa02cb53a8b751563467471ac97687 Mon Sep 17 00:00:00 2001 From: Jackie Coe Date: Mon, 20 Jul 2015 11:46:14 +0200 Subject: [PATCH 287/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index fe92c87a8..6807567b8 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-20 11:44+0200\n" +"PO-Revision-Date: 2015-07-20 11:46+0200\n" "Last-Translator: Jackie Coe \n" "Language-Team: German " "\n" @@ -21,7 +21,7 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "Fehler in Lua (z. B. wegen mod):" +msgstr "Fehler in Lua ist aufgetreten (z. B. wegen mod):" #: builtin/fstk/ui.lua:84 msgid "An error occured:" @@ -33,7 +33,7 @@ msgstr "OK" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." -msgstr "Laden ..." +msgstr "Lädt..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." @@ -48,7 +48,7 @@ msgstr "Welt:" #: builtin/mainmenu/dlg_config_world.lua:33 #: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" -msgstr "Spiel verstecken" +msgstr "Spiel ausblenden" #: builtin/mainmenu/dlg_config_world.lua:39 #: builtin/mainmenu/dlg_config_world.lua:41 From ba5e4d721702eeda3322c046572a3db238ae8a22 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 21 Jul 2015 16:48:09 +0200 Subject: [PATCH 288/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 6807567b8..9fc02d0b9 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-20 11:46+0200\n" -"Last-Translator: Jackie Coe \n" +"PO-Revision-Date: 2015-07-21 16:48+0200\n" +"Last-Translator: est31 \n" "Language-Team: German " "\n" "Language: de\n" @@ -33,13 +33,13 @@ msgstr "OK" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." -msgstr "Lädt..." +msgstr "Lädt ..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Bitte versuchen Sie den öffentliche Server-liste einzuschalten und Ihre " -"Internet Verbindung nachgucken." +"Bitte versuchen Sie die checkbox \"Öffentliche Serverliste\" neu zu " +"aktivieren, und prüfen Sie Ihre Internetverbindung." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" From 247dda5005ae35f6047008938aadd5efcd78a494 Mon Sep 17 00:00:00 2001 From: Andrey K Date: Thu, 30 Jul 2015 15:32:39 +0200 Subject: [PATCH 289/670] Translated using Weblate (Russian) Currently translated at 100.0% (270 of 270 strings) --- po/ru/minetest.po | 193 ++++++++++++++++++++++------------------------ 1 file changed, 91 insertions(+), 102 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index 7cdc318f7..9675095ae 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -8,28 +8,29 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2013-12-29 16:58+0200\n" -"Last-Translator: Сергей Голубев \n" -"Language-Team: Russian\n" +"PO-Revision-Date: 2015-07-30 15:32+0200\n" +"Last-Translator: Andrey K. \n" +"Language-Team: Russian " +"\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 1.7-dev\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Ошибка в скрипте Lua в моде:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Произошла ошибка:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" -msgstr "Ok" +msgstr "OK" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." @@ -38,6 +39,7 @@ msgstr "Загрузка..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Попробуйте обновить список публичных серверов и проверьте связь с Интернетом." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -95,7 +97,7 @@ msgstr "Название мира" #: builtin/mainmenu/dlg_create_world.lua:53 msgid "Seed" -msgstr "Сид" +msgstr "Зерно" #: builtin/mainmenu/dlg_create_world.lua:56 msgid "Mapgen" @@ -111,19 +113,19 @@ msgstr "Создать" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "" +msgstr "У вас не установлено мини-игр." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "" +msgstr "Загрузите их с minetest.net" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." -msgstr "" +msgstr "Внимание: \"Minimal development test\" для разработчиков." #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Скачайте мини-игры, такие как minetest_game, на minetest.net" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" @@ -176,13 +178,12 @@ msgid "Install Mod: file: \"$1\"" msgstr "Установка мода: файл \"$1\"" #: builtin/mainmenu/modmgr.lua:345 -#, fuzzy msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Установка мода: неподдерживаемый тип \"$1\"" +"Установка мода: неподдерживаемый тип файла \"$1\" или битый архив" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" @@ -199,24 +200,23 @@ msgstr "Установка мода: невозможно определить #: builtin/mainmenu/store.lua:88 msgid "Unsorted" -msgstr "" +msgstr "Не сортировано" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" -msgstr "" +msgstr "Поиск" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." -msgstr "" +msgstr "Загрузка $1..." #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" -msgstr "" +msgstr "Успешно установлено:" #: builtin/mainmenu/store.lua:162 -#, fuzzy msgid "Shortname:" -msgstr "Название мира" +msgstr "Краткое имя:" #: builtin/mainmenu/store.lua:472 msgid "Rating" @@ -232,7 +232,7 @@ msgstr "Установить" #: builtin/mainmenu/store.lua:518 msgid "Close store" -msgstr "" +msgstr "Закрыть хранилище" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" @@ -251,13 +251,12 @@ msgid "Active Contributors" msgstr "Активные контрибьюторы" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Основные разработчики" +msgstr "Разработчики в отставке" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" -msgstr "В отставке" +msgstr "Контрибьюторы в отставке" #: builtin/mainmenu/tab_mods.lua:30 msgid "Installed Mods:" @@ -265,7 +264,7 @@ msgstr "Установленные моды:" #: builtin/mainmenu/tab_mods.lua:39 msgid "Online mod repository" -msgstr "Онлайн хранилище модов" +msgstr "Онлайн-хранилище модов" #: builtin/mainmenu/tab_mods.lua:78 msgid "No mod description available" @@ -296,14 +295,12 @@ msgid "Mods" msgstr "Моды" #: builtin/mainmenu/tab_multiplayer.lua:23 -#, fuzzy msgid "Address / Port :" -msgstr "Адрес/Порт" +msgstr "Адрес / Порт:" #: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy msgid "Name / Password :" -msgstr "Имя/Пароль" +msgstr "Имя / Пароль:" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 @@ -322,21 +319,18 @@ msgstr "Подключиться" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 -#, fuzzy msgid "Creative mode" -msgstr "Режим создания" +msgstr "Режим творчества" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 -#, fuzzy msgid "Damage enabled" -msgstr "включено" +msgstr "Разрешить увечья" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 -#, fuzzy msgid "PvP enabled" -msgstr "включено" +msgstr "PvP разрешён" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" @@ -362,12 +356,12 @@ msgstr "Выберите мир:" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 #: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" -msgstr "Режим создания" +msgstr "Режим творчества" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 #: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" -msgstr "Включить урон" +msgstr "Разрешить увечья" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" @@ -375,77 +369,72 @@ msgstr "Публичные" #: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 msgid "Name/Password" -msgstr "Имя/Пароль" +msgstr "Имя / Пароль" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" -msgstr "" +msgstr "Адрес" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" -msgstr "" +msgstr "Порт" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" -msgstr "Порт" +msgstr "Порт сервера" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "Не задано имя мира или не выбрана игра" +msgstr "Не выбран мир!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Сервер" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Непрозрачная вода" +msgstr "Непрозрачная листва" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" -msgstr "" +msgstr "Упрощённая листва" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Красивые деревья" +msgstr "Красивая листва" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Без фильтраций" #: builtin/mainmenu/tab_settings.lua:33 -#, fuzzy msgid "Bilinear Filter" msgstr "Билинейная фильтрация" #: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy msgid "Trilinear Filter" msgstr "Трилинейная фильтрация" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" -msgstr "" +msgstr "Без Мипмаппинга" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" -msgstr "" +msgstr "Мипмаппинг" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Мипмаппинг с анизотр. фильтром" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr "Уверены, что хотите сбросить мир одиночной игры?" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "" +msgstr "Нет!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" @@ -464,25 +453,24 @@ msgid "Opaque Water" msgstr "Непрозрачная вода" #: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy msgid "Connected Glass" -msgstr "Подключиться" +msgstr "Стёкла без швов" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" -msgstr "" +msgstr "Подсветка нод" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "" +msgstr "Текстуирование:" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "" +msgstr "Отрисовка:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" -msgstr "" +msgstr "Перезапустите Minetest для принятия изменений" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" @@ -493,50 +481,48 @@ msgid "Change keys" msgstr "Смена управления" #: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy msgid "Reset singleplayer world" -msgstr "Одиночная игра" +msgstr "Сброс одиночной игры" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" -msgstr "" +msgstr "Масштаб интерфейса" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " -msgstr "" +msgstr "Коэффициент масштаба интерфейса: " #: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" -msgstr "" +msgstr "Свободный выбор цели" #: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" -msgstr "" +msgstr "Чувствительность (пк)" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 -#, fuzzy msgid "Bumpmapping" -msgstr "Mip-текстурирование" +msgstr "Бампмаппинг" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" -msgstr "" +msgstr "Генерировать карты нормалей" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" -msgstr "" +msgstr "Parallax Occlusion" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" -msgstr "" +msgstr "Волны на воде" #: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" -msgstr "" +msgstr "Покачивание листвы" #: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" -msgstr "" +msgstr "Покачивание растений" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." @@ -547,17 +533,14 @@ msgid "Settings" msgstr "Настройки" #: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy msgid "Start Singleplayer" -msgstr "Одиночная игра" +msgstr "Начать одиночную игру" #: builtin/mainmenu/tab_simple_main.lua:83 -#, fuzzy msgid "Config mods" -msgstr "Настроить" +msgstr "Настройка модов" #: builtin/mainmenu/tab_simple_main.lua:201 -#, fuzzy msgid "Main" msgstr "Главное меню" @@ -578,27 +561,24 @@ msgid "No information available" msgstr "Описание отсутствует" #: builtin/mainmenu/tab_texturepacks.lua:114 -#, fuzzy msgid "Texturepacks" msgstr "Пакеты текстур" #: src/client.cpp:1721 -#, fuzzy msgid "Loading textures..." -msgstr "Загрузка..." +msgstr "Загрузка текстур..." #: src/client.cpp:1736 -#, fuzzy msgid "Rebuilding shaders..." -msgstr "Получение адреса..." +msgstr "Сборка шейдеров..." #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "" +msgstr "Инициирование нод..." #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "" +msgstr "Инициирование нод" #: src/client.cpp:1768 msgid "Item textures..." @@ -606,7 +586,7 @@ msgstr "Текстуры предметов..." #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Готово!" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" @@ -614,7 +594,7 @@ msgstr "Главное меню" #: src/client/clientlauncher.cpp:223 msgid "Player name too long." -msgstr "" +msgstr "Имя игрока слишком длинное." #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" @@ -626,7 +606,7 @@ msgstr "Не выбран мир и не введен адрес." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "По этому пути мира нет: " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" @@ -667,6 +647,19 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"Управление по умолчанию:\n" +"Не в меню:\n" +"- одно нажатие: кнопка активаций\n" +"- двойное нажатие: положить/использовать\n" +"- скольжение пальцем: осмотреться\n" +"В меню/инвертаре:\n" +"- двойное нажатие (вне меню)\n" +"--> закрыть меню\n" +"- Нажать на стопку, затем на ячейку:\n" +"--> Двигать стопку\n" +"- Потащить одним пальцем стопку в нужную ячейку, нажать вторым пальцем на " +"экран:\n" +"--> Положить один предмет в ячейку\n" #: src/game.cpp:1106 msgid "" @@ -707,7 +700,6 @@ msgid "Sound Volume" msgstr "Громкость звука" #: src/game.cpp:1136 -#, fuzzy msgid "Change Keys" msgstr "Смена управления" @@ -720,12 +712,10 @@ msgid "Exit to OS" msgstr "Выход в ОС" #: src/game.cpp:1841 -#, fuzzy msgid "Shutting down..." -msgstr "Завершение работы..." +msgstr "Завершение..." #: src/game.cpp:1948 -#, fuzzy msgid "Creating server..." msgstr "Создание сервера..." @@ -755,11 +745,11 @@ msgstr "Медиафайлы..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "КиБ/с" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "МиБ/с" #: src/game.cpp:4363 msgid "" @@ -771,11 +761,11 @@ msgstr "" #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " -msgstr "" +msgstr "Введите " #: src/guiFormSpecMenu.cpp:2875 msgid "ok" -msgstr "" +msgstr "OK" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" @@ -856,9 +846,8 @@ msgid "Toggle fast" msgstr "Ускорение" #: src/guiKeyChangeMenu.cpp:413 -#, fuzzy msgid "Toggle Cinematic" -msgstr "Ускорение" +msgstr "Киношность" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" From e0a961da5260d17699f0248ba33aecd9430c69fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kisbenedek=20M=C3=A1rton?= Date: Wed, 5 Aug 2015 13:29:22 +0200 Subject: [PATCH 290/670] Translated using Weblate (Hungarian) Currently translated at 91.1% (246 of 270 strings) --- po/hu/minetest.po | 411 +++++++++++++++++++++++----------------------- 1 file changed, 210 insertions(+), 201 deletions(-) diff --git a/po/hu/minetest.po b/po/hu/minetest.po index c3dc182b4..3db7b54e9 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2013-08-11 03:05+0200\n" -"Last-Translator: Sasikaa Lacikaa \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-08-05 13:29+0200\n" +"Last-Translator: Kisbenedek Márton \n" +"Language-Team: Hungarian " +"\n" "Language: hu\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 1.4-dev\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" @@ -24,11 +25,11 @@ msgstr "" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Hiba történt:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" -msgstr "" +msgstr "OK" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." @@ -37,31 +38,31 @@ msgstr "Betöltés..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Próbáld újra engedélyezni a nyilvános szerverlistát és ellenőrizd az " +"internetkapcsolatot." #: builtin/mainmenu/dlg_config_world.lua:29 -#, fuzzy msgid "World:" -msgstr "Világ kiválasztása:" +msgstr "Világ:" #: builtin/mainmenu/dlg_config_world.lua:33 #: builtin/mainmenu/dlg_config_world.lua:35 -#, fuzzy msgid "Hide Game" -msgstr "Játék" +msgstr "Játék elrejtése" #: builtin/mainmenu/dlg_config_world.lua:39 #: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" -msgstr "" +msgstr "Modpakk tartalom elrejtése" #: builtin/mainmenu/dlg_config_world.lua:49 +#, fuzzy msgid "Mod:" -msgstr "" +msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -#, fuzzy msgid "Depends:" -msgstr "Attól függ:" +msgstr "Függ ettől:" #: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" @@ -75,14 +76,12 @@ msgid "Cancel" msgstr "Mégse" #: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy msgid "Enable MP" -msgstr "Összes engedélyezve" +msgstr "Modpakk engedélyezése" #: builtin/mainmenu/dlg_config_world.lua:73 -#, fuzzy msgid "Disable MP" -msgstr "Összes tiltva" +msgstr "Modpakk letiltása" #: builtin/mainmenu/dlg_config_world.lua:77 #: builtin/mainmenu/dlg_config_world.lua:79 @@ -90,21 +89,21 @@ msgid "enabled" msgstr "Engedélyezve" #: builtin/mainmenu/dlg_config_world.lua:85 -#, fuzzy msgid "Enable all" -msgstr "Összes engedélyezve" +msgstr "Összes engedélyezése" #: builtin/mainmenu/dlg_create_world.lua:50 msgid "World name" msgstr "Világ neve" #: builtin/mainmenu/dlg_create_world.lua:53 +#, fuzzy msgid "Seed" -msgstr "" +msgstr "Seed" #: builtin/mainmenu/dlg_create_world.lua:56 msgid "Mapgen" -msgstr "" +msgstr "Térkép generátor" #: builtin/mainmenu/dlg_create_world.lua:59 msgid "Game" @@ -116,32 +115,32 @@ msgstr "Létrehozás" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "" +msgstr "Nincsenek al-játékok telepítve." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "" +msgstr "Letöltés a minetest.net-ről" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." msgstr "" +"Figyelmeztetés: A \"minimal development test\" csak fejlesztőknek ajánlott." #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Tölts le egy al-játékot (pl. minetest_game) a minetest.net-ről" #: builtin/mainmenu/dlg_create_world.lua:99 -#, fuzzy msgid "A world named \"$1\" already exists" -msgstr "Nem sikerült a viág létrehozása: A világ neve már használva van" +msgstr "\"$1\" nevű világ már létezik" #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" -msgstr "" +msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr "Biztosan törölni akarod: \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 @@ -151,20 +150,19 @@ msgstr "Igen" #: builtin/mainmenu/dlg_delete_mod.lua:28 msgid "No of course not!" -msgstr "" +msgstr "Persze, hogy nem!" #: builtin/mainmenu/dlg_delete_mod.lua:41 msgid "Modmgr: failed to delete \"$1\"" -msgstr "" +msgstr "Modmgr: \"$1\" törlése meghiúsult" #: builtin/mainmenu/dlg_delete_mod.lua:45 msgid "Modmgr: invalid modpath \"$1\"" -msgstr "" +msgstr "Modmgr: érvénytelen mod útvonal: \"$1\"" #: builtin/mainmenu/dlg_delete_world.lua:24 -#, fuzzy msgid "Delete World \"$1\"?" -msgstr "Világ törlése" +msgstr "\"$1\" világ törlése?" #: builtin/mainmenu/dlg_delete_world.lua:26 msgid "No" @@ -172,148 +170,145 @@ msgstr "Nem" #: builtin/mainmenu/dlg_rename_modpack.lua:26 msgid "Rename Modpack:" -msgstr "" +msgstr "Modpakk átnevezése:" #: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" -msgstr "Elfogadva" +msgstr "Elfogad" #: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" -msgstr "" +msgstr "Mod telepítés: fájl: \"$1\"" #: builtin/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" +"\n" +"Mod telepítés: \"$1\" nem támogatott fájltípus, vagy hibás archívum" #: builtin/mainmenu/modmgr.lua:365 -#, fuzzy msgid "Failed to install $1 to $2" -msgstr "A világ betöltése közben hiba" +msgstr "$1 telepítése meghiúsult" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" +"Mod telepítése: nem található megfelelő mappanév ehhez a modpakk-hoz: $1" #: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" -msgstr "" +msgstr "Mod telepítése: nem található megfelelő mod név ehhez: $1" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" -msgstr "" +msgstr "Rendezetlen" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" -msgstr "" +msgstr "Keresés" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." -msgstr "" +msgstr "$1 letöltése, kérlek várj..." #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" -msgstr "" +msgstr "Sikeresen telepítve:" #: builtin/mainmenu/store.lua:162 -#, fuzzy msgid "Shortname:" -msgstr "Világ neve" +msgstr "Rövid név:" #: builtin/mainmenu/store.lua:472 msgid "Rating" -msgstr "" +msgstr "Értékelés" #: builtin/mainmenu/store.lua:497 msgid "re-Install" -msgstr "" +msgstr "Újratelepítés" #: builtin/mainmenu/store.lua:499 msgid "Install" -msgstr "" +msgstr "Telepítés" #: builtin/mainmenu/store.lua:518 msgid "Close store" -msgstr "" +msgstr "Áruház bezárása" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" -msgstr "" +msgstr "Oldal $1 ennyiből: $2" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" -msgstr "Stáblista" +msgstr "Készítők" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" -msgstr "" +msgstr "Belső fejlesztők" #: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" -msgstr "" +msgstr "Tevékeny hozzájárulók" #: builtin/mainmenu/tab_credits.lua:54 msgid "Previous Core Developers" -msgstr "" +msgstr "Korábbi belső fejlesztők" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" -msgstr "" +msgstr "Korábbi hozzájárulók" #: builtin/mainmenu/tab_mods.lua:30 msgid "Installed Mods:" -msgstr "" +msgstr "Telepített modok:" #: builtin/mainmenu/tab_mods.lua:39 msgid "Online mod repository" -msgstr "" +msgstr "Online mod tároló" #: builtin/mainmenu/tab_mods.lua:78 msgid "No mod description available" -msgstr "" +msgstr "Nincs elérhető mod leírás" #: builtin/mainmenu/tab_mods.lua:82 msgid "Mod information:" -msgstr "" +msgstr "Mod ismertető:" #: builtin/mainmenu/tab_mods.lua:93 msgid "Rename" -msgstr "" +msgstr "Átnevez" #: builtin/mainmenu/tab_mods.lua:95 msgid "Uninstall selected modpack" -msgstr "" +msgstr "Kiválasztott modpakk törlése" #: builtin/mainmenu/tab_mods.lua:106 msgid "Uninstall selected mod" -msgstr "" +msgstr "Kiválasztott mod törlése" #: builtin/mainmenu/tab_mods.lua:121 -#, fuzzy msgid "Select Mod File:" -msgstr "Világ kiválasztása:" +msgstr "Mod fájl kiválasztása:" #: builtin/mainmenu/tab_mods.lua:165 msgid "Mods" -msgstr "" +msgstr "Modok" #: builtin/mainmenu/tab_multiplayer.lua:23 -#, fuzzy msgid "Address / Port :" -msgstr "Cím/Port" +msgstr "Cím / Port:" #: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy msgid "Name / Password :" -msgstr "Név/jelszó" +msgstr "Név / jelszó:" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 -#, fuzzy msgid "Public Serverlist" -msgstr "Publikus Szerver Lista:" +msgstr "Nyilvános szerverlista" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 #: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 @@ -327,25 +322,22 @@ msgstr "Csatlakozás" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 -#, fuzzy msgid "Creative mode" msgstr "Kreatív mód" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 -#, fuzzy msgid "Damage enabled" -msgstr "Engedélyezve" +msgstr "Sérülés engedélyezve" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 -#, fuzzy msgid "PvP enabled" -msgstr "Engedélyezve" +msgstr "PvP engedélyezve" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" -msgstr "" +msgstr "Kliens" #: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" @@ -356,9 +348,8 @@ msgid "Configure" msgstr "Beállítás" #: builtin/mainmenu/tab_server.lua:29 -#, fuzzy msgid "Start Game" -msgstr "Játék indítása / Csatlakozás" +msgstr "Játék indítása" #: builtin/mainmenu/tab_server.lua:30 #: builtin/mainmenu/tab_singleplayer.lua:100 @@ -377,80 +368,80 @@ msgstr "Sérülés engedélyezése" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" -msgstr "Publikus" +msgstr "Nyilvános" #: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 msgid "Name/Password" msgstr "Név/jelszó" #: builtin/mainmenu/tab_server.lua:45 +#, fuzzy msgid "Bind Address" -msgstr "" +msgstr "Bind Address" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" -msgstr "" +msgstr "Port" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" -msgstr "" +msgstr "Szerver port" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 msgid "No world created or selected!" -msgstr "" +msgstr "Nincs létrehozva, vagy kiválasztva világ!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" -msgstr "" +msgstr "Szerver" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Átlátszó víz" +msgstr "Áttetsző levelek" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" -msgstr "" +msgstr "Egyszerű levelek" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Szép fák" +msgstr "Szép levelek" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Nincs szűrés" #: builtin/mainmenu/tab_settings.lua:33 -#, fuzzy msgid "Bilinear Filter" -msgstr "Bi-Linear Szűrés" +msgstr "Bi-lineáris szűrés" #: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy msgid "Trilinear Filter" -msgstr "Tri-Linear Szűrés" +msgstr "Tri-lineáris szűrés" #: builtin/mainmenu/tab_settings.lua:43 +#, fuzzy msgid "No Mipmap" -msgstr "" +msgstr "No Mipmap" #: builtin/mainmenu/tab_settings.lua:44 +#, fuzzy msgid "Mipmap" -msgstr "" +msgstr "Mipmap" #: builtin/mainmenu/tab_settings.lua:45 +#, fuzzy msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Mipmap + Aniso. Filter" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr "Biztosan visszaállítod az egyjátékos világod?" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "" +msgstr "Nem!!!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" @@ -462,33 +453,31 @@ msgstr "Részecskék engedélyezése" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" -msgstr "3D Felhők" +msgstr "3D felhők" #: builtin/mainmenu/tab_settings.lua:208 -#, fuzzy msgid "Opaque Water" -msgstr "Átlátszó víz" +msgstr "Áttetsző víz" #: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy msgid "Connected Glass" -msgstr "Csatlakozás" +msgstr "Tiszta (csatlakozó) üveg" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" -msgstr "" +msgstr "Node kiemelés" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "" +msgstr "Textúrázás:" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "" +msgstr "Renderelés:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" -msgstr "" +msgstr "A driver változások életbe lépéséhez indítsd újra a Minetestet" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" @@ -496,76 +485,76 @@ msgstr "Shaderek" #: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" -msgstr "Gomb választása" +msgstr "Gombok változtatása" #: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy msgid "Reset singleplayer world" -msgstr "Egyjátékos mód" +msgstr "Egyjátékos világ visszaállítása" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" -msgstr "" +msgstr "Felhasználói felület méretaránya" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " -msgstr "" +msgstr "A méretarány alkalmazva a menü elemekre: " #: builtin/mainmenu/tab_settings.lua:250 +#, fuzzy msgid "Touch free target" -msgstr "" +msgstr "Touch free target" #: builtin/mainmenu/tab_settings.lua:256 +#, fuzzy msgid "Touchthreshold (px)" -msgstr "" +msgstr "Touchthreshold (px)" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" -msgstr "Mip-mapping" +msgstr "Bumpmapping" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#, fuzzy msgid "Generate Normalmaps" -msgstr "" +msgstr "Generate Normalmaps" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#, fuzzy msgid "Parallax Occlusion" -msgstr "" +msgstr "Parallax Occlusion" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" -msgstr "" +msgstr "Hullámzó víz" #: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" -msgstr "" +msgstr "Hullámzó levelek" #: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" -msgstr "" +msgstr "Hullámzó növények" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" +msgstr "A shaderek engedélyezéséhez OpenGL driver használata szükséges." #: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Beállítások" #: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy msgid "Start Singleplayer" -msgstr "Egyjátékos mód" +msgstr "Egyjátékos mód indítása" #: builtin/mainmenu/tab_simple_main.lua:83 -#, fuzzy msgid "Config mods" -msgstr "Beállítás" +msgstr "Modok beállítása" #: builtin/mainmenu/tab_simple_main.lua:201 -#, fuzzy msgid "Main" -msgstr "Fő menü" +msgstr "Főmenü" #: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" @@ -577,77 +566,76 @@ msgstr "Egyjátékos mód" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" -msgstr "" +msgstr "Textúra pakk kiválasztása:" #: builtin/mainmenu/tab_texturepacks.lua:69 msgid "No information available" -msgstr "" +msgstr "Nincs elérhető információ" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" -msgstr "" +msgstr "Textúra pakkok" #: src/client.cpp:1721 -#, fuzzy msgid "Loading textures..." -msgstr "Betöltés..." +msgstr "Textúrák betöltése..." #: src/client.cpp:1736 -#, fuzzy msgid "Rebuilding shaders..." -msgstr "Cím létrehozása..." +msgstr "Shaderek újraépítése..." #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "" +msgstr "Csomópontok inicializálása..." #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "" +msgstr "Csomópontok inicializálása" #: src/client.cpp:1768 msgid "Item textures..." -msgstr "Tárgy textúrák..." +msgstr "Elem textúrák..." #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Kész!" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" -msgstr "Fő menü" +msgstr "Főmenü" #: src/client/clientlauncher.cpp:223 msgid "Player name too long." -msgstr "" +msgstr "Túl hosszú játékosnév." #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" -msgstr "Csatlakozási hiba (Idő lejárt?)" +msgstr "Csatlakozási hiba (idő lejárt?)" #: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." -msgstr "Nincs kiválasztott világ, nincs cím. Nincs mit tenni." +msgstr "Nincs világ kiválasztva és nincs cím megadva. Nincs mit tenni." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "A megadott világ útvonala nem létezik: " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" -msgstr "Nem található, vagy nem betöltött játék \"" +msgstr "Nem lehet betölteni, vagy nem található játék \"" #: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "Nem valós játék spec." #: src/fontengine.cpp:70 src/fontengine.cpp:226 +#, fuzzy msgid "needs_fallback_font" -msgstr "" +msgstr "needs_fallback_font" #: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" -msgstr "Elfogadva" +msgstr "Folytatás" #: src/game.cpp:1072 msgid "You died." @@ -655,7 +643,7 @@ msgstr "Meghaltál." #: src/game.cpp:1073 msgid "Respawn" -msgstr "Újra éledés" +msgstr "Újraéledés" #: src/game.cpp:1092 msgid "" @@ -672,6 +660,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"Alapértelmezett irányítás:\n" +"Nem látható menü:\n" +"- egy érintés: gomb aktiválás\n" +"- dupla érintés: helyez/használat\n" +"- ujj csúsztatás: körbenéz\n" +"Menü/Inventory látható:\n" +"- dupla érintés (külső):\n" +" -->bezár\n" +"- stack, vagy slot érintése:\n" +" --> stack mozgatása\n" +"- érint&megfogás, érintés 2. ujjal\n" +" --> egy elem slotba helyezése\n" #: src/game.cpp:1106 msgid "" @@ -687,15 +687,15 @@ msgid "" "- Mouse wheel: select item\n" "- T: chat\n" msgstr "" -"Alap beállítások:\n" +"Alapértelmezett irányítás:\n" "- WASD: Mozgás\n" "- Space: Ugrás/Mászás\n" "- Shift: Lopakodás/Lefele menés\n" "- Q: Tárgyak eldobása\n" "- I: Invertory\n" "- Egér: Forgás/Nézelődés\n" -"- Egér Bal-gomb: Ásás/ütés\n" -"- Egér jobb-gomb: elhejezés/használat\n" +"- Egér Bal-gomb: Ásás/Ütés\n" +"- Egér jobb-gomb: Helyezés/Használat\n" "- Egér görgő: Tárgyak kiválasztása\n" "- T: Beszélgetés\n" @@ -712,9 +712,8 @@ msgid "Sound Volume" msgstr "Hangerő" #: src/game.cpp:1136 -#, fuzzy msgid "Change Keys" -msgstr "Gomb választása" +msgstr "Gombok változtatása" #: src/game.cpp:1139 msgid "Exit to Menu" @@ -725,12 +724,10 @@ msgid "Exit to OS" msgstr "Kilépés az OP-rendszerbe" #: src/game.cpp:1841 -#, fuzzy msgid "Shutting down..." -msgstr "Dolog leállítása..." +msgstr "Leállítás..." #: src/game.cpp:1948 -#, fuzzy msgid "Creating server..." msgstr "Szerver létrehozása..." @@ -740,7 +737,7 @@ msgstr "Kliens létrehozása..." #: src/game.cpp:2159 msgid "Resolving address..." -msgstr "Cím létrehozása..." +msgstr "Cím feloldása..." #: src/game.cpp:2261 msgid "Connecting to server..." @@ -748,43 +745,45 @@ msgstr "Csatlakozás a szerverhez..." #: src/game.cpp:2317 msgid "Item definitions..." -msgstr "" +msgstr "Elem definíciók..." #: src/game.cpp:2322 msgid "Node definitions..." -msgstr "" +msgstr "Csomópont definíciók..." #: src/game.cpp:2329 msgid "Media..." -msgstr "" +msgstr "Média..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/mp" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/mp" #: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" +"\n" +"Részletekért tekintsd meg a debug.txt fájlt." #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " -msgstr "" +msgstr "Belépés " #: src/guiFormSpecMenu.cpp:2875 msgid "ok" -msgstr "" +msgstr "Ok" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -"Gombkiosztás. (Amíg ez a menü fejlesztve van, el van távolítva a minetest." -"conf-ból)" +"Gombkiosztás. (Ha elfuserálod ezt a menüt, távolíts el néhány cuccot a " +"minetest.conf-ból)" #: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" @@ -792,7 +791,7 @@ msgstr "\"Használat\" = Lemászás" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" -msgstr "Duplán nyomd meg az \"ugrás\" gombot ahhoz hogy repülj" +msgstr "Az \"ugrás\" gomb duplán a repüléshez" #: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" @@ -804,11 +803,11 @@ msgstr "Nyomj meg egy gombot" #: src/guiKeyChangeMenu.cpp:399 msgid "Forward" -msgstr "Vissza" +msgstr "Előre" #: src/guiKeyChangeMenu.cpp:400 msgid "Backward" -msgstr "Előre" +msgstr "Vissza" #: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" @@ -820,7 +819,7 @@ msgstr "Jobb" #: src/guiKeyChangeMenu.cpp:403 msgid "Use" -msgstr "Használni" +msgstr "Használat" #: src/guiKeyChangeMenu.cpp:404 msgid "Jump" @@ -832,11 +831,12 @@ msgstr "Lopakodás" #: src/guiKeyChangeMenu.cpp:406 msgid "Drop" -msgstr "Dobás" +msgstr "Eldobás" #: src/guiKeyChangeMenu.cpp:407 +#, fuzzy msgid "Inventory" -msgstr "Invertory" +msgstr "Inventory" #: src/guiKeyChangeMenu.cpp:408 msgid "Chat" @@ -861,15 +861,15 @@ msgstr "Gyorsaság bekapcsolása" #: src/guiKeyChangeMenu.cpp:413 #, fuzzy msgid "Toggle Cinematic" -msgstr "Gyorsaság bekapcsolása" +msgstr "Toggle Cinematic" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" -msgstr "váltás noclip-re" +msgstr "Váltás noclip-re" #: src/guiKeyChangeMenu.cpp:415 msgid "Range select" -msgstr "Távolság választása" +msgstr "Látótávolság választása" #: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" @@ -885,7 +885,7 @@ msgstr "Új jelszó" #: src/guiPasswordChange.cpp:139 msgid "Confirm Password" -msgstr "Jelszó visszaigazolás" +msgstr "Jelszó megerősítés" #: src/guiPasswordChange.cpp:155 msgid "Change" @@ -893,7 +893,7 @@ msgstr "Változtat" #: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" -msgstr "Nem eggyeznek a jelszavak!" +msgstr "Nem egyeznek a jelszavak!" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " @@ -941,15 +941,17 @@ msgstr "X Gomb 2" #: src/keycode.cpp:225 msgid "Capital" -msgstr "Kapital" +msgstr "Nagybetű" #: src/keycode.cpp:225 +#, fuzzy msgid "Control" -msgstr "Controll" +msgstr "Control" #: src/keycode.cpp:225 +#, fuzzy msgid "Kana" -msgstr "Kanaa" +msgstr "Kana" #: src/keycode.cpp:225 msgid "Menu" @@ -957,11 +959,12 @@ msgstr "Menü" #: src/keycode.cpp:225 msgid "Pause" -msgstr "Pillanat-álj" +msgstr "Szünet" #: src/keycode.cpp:225 +#, fuzzy msgid "Shift" -msgstr "váltás" +msgstr "Shift" #: src/keycode.cpp:226 msgid "Convert" @@ -1005,11 +1008,11 @@ msgstr "Következő" #: src/keycode.cpp:227 msgid "Prior" -msgstr "Priorr" +msgstr "Elsődleges" #: src/keycode.cpp:227 msgid "Space" -msgstr "Hely" +msgstr "Szóköz" #: src/keycode.cpp:228 msgid "Down" @@ -1017,7 +1020,7 @@ msgstr "Le" #: src/keycode.cpp:228 msgid "Execute" -msgstr "Tömörít" +msgstr "Végrehajt" #: src/keycode.cpp:228 msgid "Print" @@ -1041,7 +1044,7 @@ msgstr "Beilleszt" #: src/keycode.cpp:229 msgid "Snapshot" -msgstr "Verzió" +msgstr "Pillanatkép" #: src/keycode.cpp:232 msgid "Left Windows" @@ -1049,7 +1052,7 @@ msgstr "Bal Windows" #: src/keycode.cpp:233 msgid "Apps" -msgstr "Prog" +msgstr "Alkalmazások" #: src/keycode.cpp:233 msgid "Numpad 0" @@ -1117,11 +1120,11 @@ msgstr "Numerikus billentyű 9" #: src/keycode.cpp:239 msgid "Num Lock" -msgstr "Numerikus lock" +msgstr "Numlock" #: src/keycode.cpp:239 msgid "Scroll Lock" -msgstr "Skroll Lock" +msgstr "ScrollLock" #: src/keycode.cpp:240 msgid "Left Shift" @@ -1141,7 +1144,7 @@ msgstr "Bal menü" #: src/keycode.cpp:241 msgid "Right Control" -msgstr "Jobb Controll" +msgstr "Jobb Control" #: src/keycode.cpp:241 msgid "Right Menu" @@ -1153,39 +1156,45 @@ msgstr "Vessző" #: src/keycode.cpp:243 msgid "Minus" -msgstr "Minusz" +msgstr "Mínusz" #: src/keycode.cpp:243 msgid "Period" -msgstr "tizedes" +msgstr "Pont" #: src/keycode.cpp:243 msgid "Plus" msgstr "Plusz" #: src/keycode.cpp:247 +#, fuzzy msgid "Attn" -msgstr "Attnn" +msgstr "Attn" #: src/keycode.cpp:247 +#, fuzzy msgid "CrSel" -msgstr "CrSell" +msgstr "CrSel" #: src/keycode.cpp:248 +#, fuzzy msgid "Erase OEF" -msgstr "Erase OEFF" +msgstr "Erase OEF" #: src/keycode.cpp:248 +#, fuzzy msgid "ExSel" -msgstr "ExSell" +msgstr "ExSel" #: src/keycode.cpp:248 +#, fuzzy msgid "OEM Clear" -msgstr "OEM Clearr" +msgstr "OEM Clear" #: src/keycode.cpp:248 +#, fuzzy msgid "PA1" -msgstr "PA11" +msgstr "PA1" #: src/keycode.cpp:248 msgid "Zoom" From 35cc90b0865469a10dd43786b07f4e39503a2663 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Wed, 5 Aug 2015 23:39:41 +0200 Subject: [PATCH 291/670] Remove unused file --- src/mapchunk.h | 77 -------------------------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 src/mapchunk.h diff --git a/src/mapchunk.h b/src/mapchunk.h deleted file mode 100644 index a70de8711..000000000 --- a/src/mapchunk.h +++ /dev/null @@ -1,77 +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. -*/ - -#ifndef MAPCHUNK_HEADER -#define MAPCHUNK_HEADER - -/* - TODO: Remove -*/ - -#if 0 -/* - MapChunk contains map-generation-time metadata for an area of - some MapSectors. (something like 16x16) -*/ - -// These should fit in 8 bits, as they are saved as such. -enum{ - GENERATED_FULLY = 0, - GENERATED_PARTLY = 10, - GENERATED_NOT = 20 -}; - -class MapChunk -{ -public: - MapChunk(): - m_generation_level(GENERATED_NOT), - m_modified(true) - { - } - - /* - Generation level. Possible values: - GENERATED_FULLY = 0 = fully generated - GENERATED_PARTLY = partly generated - GENERATED_NOT = not generated - */ - u16 getGenLevel(){ return m_generation_level; } - void setGenLevel(u16 lev){ m_generation_level = lev; } - - void serialize(std::ostream &os, u8 version) - { - os.write((char*)&m_generation_level, 1); - } - void deSerialize(std::istream &is, u8 version) - { - is.read((char*)&m_generation_level, 1); - } - - bool isModified(){ return m_modified; } - void setModified(bool modified){ m_modified = modified; } - -private: - u8 m_generation_level; - bool m_modified; -}; -#endif - -#endif - From 46e4970918f078c7c7f4a9020e39982707b9088d Mon Sep 17 00:00:00 2001 From: Diego Martinez Date: Sat, 31 Oct 2015 09:33:43 -0300 Subject: [PATCH 292/670] Update Spanish translation. --- po/es/minetest.po | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 6a8bc411e..29dca2f2d 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" "PO-Revision-Date: 2015-02-14 13:35+0100\n" -"Last-Translator: Diego de las Heras \n" +"Last-Translator: Diego Martínez \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" @@ -20,11 +20,11 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Ha ocurrido un error en una script de Lua, como en un mod:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Ha ocurrido un error:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -36,7 +36,7 @@ msgstr "Cargando..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." -msgstr "" +msgstr "Intenta re-habilitar la lista de servidores públicos y verifica tu conexión a Internet." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -252,9 +252,8 @@ msgid "Active Contributors" msgstr "Colaboradores activos" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Desarrolladores principales" +msgstr "Antiguos desarrolladores" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -389,7 +388,6 @@ msgstr "Puerto del servidor:" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" @@ -398,14 +396,12 @@ msgid "Server" msgstr "Servidor" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Agua opaca" +msgstr "Hojas opacas" #: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy msgid "Simple Leaves" -msgstr "Movimiento de hojas" +msgstr "Hojas simples" #: builtin/mainmenu/tab_settings.lua:23 #, fuzzy @@ -586,9 +582,8 @@ msgid "Initializing nodes..." msgstr "Inicializando nodos..." #: src/client.cpp:1760 -#, fuzzy msgid "Initializing nodes" -msgstr "Inicializando nodos..." +msgstr "Inicializando nodos" #: src/client.cpp:1768 msgid "Item textures..." @@ -857,9 +852,8 @@ msgid "Toggle fast" msgstr "Activar rápido" #: src/guiKeyChangeMenu.cpp:413 -#, fuzzy msgid "Toggle Cinematic" -msgstr "Activar rápido" +msgstr "Activar cinemático" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" From 6b39bc686548baa110672c0fd4c18e9a23dca7ad Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 9 Aug 2015 21:51:21 +0200 Subject: [PATCH 293/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 9fc02d0b9..698f6920e 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-21 16:48+0200\n" -"Last-Translator: est31 \n" +"PO-Revision-Date: 2015-08-09 21:51+0200\n" +"Last-Translator: sfan5 \n" "Language-Team: German " "\n" "Language: de\n" @@ -21,7 +21,7 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "Fehler in Lua ist aufgetreten (z. B. wegen mod):" +msgstr "Ein Fehler ist in Lua aufgetreten (z.B. aufgrund eines Mods):" #: builtin/fstk/ui.lua:84 msgid "An error occured:" @@ -38,8 +38,8 @@ msgstr "Lädt ..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Bitte versuchen Sie die checkbox \"Öffentliche Serverliste\" neu zu " -"aktivieren, und prüfen Sie Ihre Internetverbindung." +"Bitte versuchen Sie die Öffentliche Serverliste neu zu aktivieren, und " +"prüfen Sie Ihre Internetverbindung." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" From a953ff4dfc9f786ee379643b6b498a5699203ff1 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 9 Aug 2015 21:10:37 +0100 Subject: [PATCH 294/670] Fix segfaults caused by the Environment not being initialized yet --- doc/lua_api.txt | 2 +- src/server.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 673eed620..9f435fd44 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2192,7 +2192,7 @@ These functions return the leftover itemstack. * `minetest.add_particlespawner(particlespawner definition)` * Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds - * Returns an `id` + * Returns an `id`, and -1 if adding didn't succeed * `Deprecated: minetest.add_particlespawner(amount, time, minpos, maxpos, minvel, maxvel, diff --git a/src/server.cpp b/src/server.cpp index 8a1465faa..144107675 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2857,6 +2857,10 @@ std::string Server::getBanDescription(const std::string &ip_or_name) void Server::notifyPlayer(const char *name, const std::wstring &msg) { + // m_env will be NULL if the server is initializing + if (!m_env) + return; + Player *player = m_env->getPlayer(name); if (!player) return; @@ -2870,6 +2874,10 @@ void Server::notifyPlayer(const char *name, const std::wstring &msg) bool Server::showFormspec(const char *playername, const std::string &formspec, const std::string &formname) { + // m_env will be NULL if the server is initializing + if (!m_env) + return false; + Player *player = m_env->getPlayer(playername); if (!player) return false; @@ -3039,6 +3047,10 @@ void Server::spawnParticle(const std::string &playername, v3f pos, float expirationtime, float size, bool collisiondetection, bool vertical, const std::string &texture) { + // m_env will be NULL if the server is initializing + if (!m_env) + return; + u16 peer_id = PEER_ID_INEXISTENT; if (playername != "") { Player* player = m_env->getPlayer(playername.c_str()); @@ -3057,6 +3069,10 @@ u32 Server::addParticleSpawner(u16 amount, float spawntime, bool collisiondetection, bool vertical, const std::string &texture, const std::string &playername) { + // m_env will be NULL if the server is initializing + if (!m_env) + return -1; + u16 peer_id = PEER_ID_INEXISTENT; if (playername != "") { Player* player = m_env->getPlayer(playername.c_str()); @@ -3088,6 +3104,10 @@ u32 Server::addParticleSpawner(u16 amount, float spawntime, void Server::deleteParticleSpawner(const std::string &playername, u32 id) { + // m_env will be NULL if the server is initializing + if (!m_env) + throw ServerError("Can't delete particle spawners during initialisation!"); + u16 peer_id = PEER_ID_INEXISTENT; if (playername != "") { Player* player = m_env->getPlayer(playername.c_str()); From 18cfd89a86af550b3c4663def77a5fac46e895ae Mon Sep 17 00:00:00 2001 From: kwolekr Date: Mon, 10 Aug 2015 01:38:09 -0400 Subject: [PATCH 295/670] Display Lua memory usage at the time of Out-of-Memory error Also misc. minor cleanups --- src/script/common/c_internal.cpp | 12 +++++++++--- src/script/cpp_api/s_async.cpp | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index bebf6ee69..0df0a7270 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -113,6 +113,11 @@ void script_error(lua_State *L, int pcall_result, const char *fxn) } err_msg += err_descr; + if (pcall_result == LUA_ERRMEM) { + err_msg += "\nCurrent Lua memory usage: " + + itos(lua_gc(L, LUA_GCCOUNT, 0) >> 10) + " MB"; + } + throw LuaError(err_msg); } @@ -145,7 +150,9 @@ void script_run_callbacks_f(lua_State *L, int nargs, // Stack now looks like this: // ...
... - script_error(L, lua_pcall(L, nargs + 2, 1, errorhandler), fxn); + int result = lua_pcall(L, nargs + 2, 1, errorhandler); + if (result != 0) + script_error(L, result, fxn); lua_remove(L, -2); // Remove error handler } @@ -161,8 +168,7 @@ void log_deprecated(lua_State *L, const std::string &message) std::string value = g_settings->get("deprecated_lua_api_handling"); if (value == "log") { dolog = true; - } - if (value == "error") { + } else if (value == "error") { dolog = true; doerror = true; } diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index 0e2a006ca..c00b22f98 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -255,7 +255,7 @@ void* AsyncWorkerThread::Thread() std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua"; if (!loadScript(script)) { errorstream - << "AsyncWorkderThread execution of async base environment failed!" + << "AsyncWorkerThread execution of async base environment failed!" << std::endl; abort(); } From 1c408c4f1df25ecec0dd8ea8b6cb00534e08bc66 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Mon, 10 Aug 2015 02:16:55 -0400 Subject: [PATCH 296/670] Make NetworkPacket respect serialized string size limits --- src/network/networkpacket.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index 0c5604872..b5e451cdb 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -85,7 +85,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) { checkReadOffset(m_read_offset, 2); u16 strLen = readU16(&m_data[m_read_offset]); - m_read_offset += sizeof(u16); + m_read_offset += 2; dst.clear(); @@ -105,8 +105,8 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) NetworkPacket& NetworkPacket::operator<<(std::string src) { u16 msgsize = src.size(); - if (msgsize > 0xFFFF) { - msgsize = 0xFFFF; + if (msgsize > STRING_MAX_LEN) { + throw PacketError("String too long"); } *this << msgsize; @@ -119,8 +119,8 @@ NetworkPacket& NetworkPacket::operator<<(std::string src) void NetworkPacket::putLongString(std::string src) { u32 msgsize = src.size(); - if (msgsize > 0xFFFFFFFF) { - msgsize = 0xFFFFFFFF; + if (msgsize > LONG_STRING_MAX_LEN) { + throw PacketError("String too long"); } *this << msgsize; @@ -155,8 +155,8 @@ NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) NetworkPacket& NetworkPacket::operator<<(std::wstring src) { u16 msgsize = src.size(); - if (msgsize > 0xFFFF) { - msgsize = 0xFFFF; + if (msgsize > WIDE_STRING_MAX_LEN) { + throw PacketError("String too long"); } *this << msgsize; @@ -179,6 +179,10 @@ std::string NetworkPacket::readLongString() return ""; } + if (strLen > LONG_STRING_MAX_LEN) { + throw PacketError("String too long"); + } + checkReadOffset(m_read_offset, strLen); std::string dst; From 6c0c27f662dc1a41f3e9490eac32735b4e486a30 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Mon, 10 Aug 2015 08:36:55 +0200 Subject: [PATCH 297/670] Fix intlGUIEditBox leak and uninitialized value in Mapper (reported by valgrind) --- src/guiFormSpecMenu.cpp | 2 ++ src/minimap.cpp | 13 +++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index f16830619..62a84460f 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -1020,6 +1020,7 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data, if (g_settings->getBool("freetype")) { e = (gui::IGUIElement *) new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment, this, spec.fid, rect); + e->drop(); } else { #else { @@ -1119,6 +1120,7 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, if (g_settings->getBool("freetype")) { e = (gui::IGUIEditBox *) new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment, this, spec.fid, rect); + e->drop(); } else { #else { diff --git a/src/minimap.cpp b/src/minimap.cpp index 950202c6a..d1fb3867d 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -224,12 +224,13 @@ Mapper::Mapper(IrrlichtDevice *device, Client *client) // Initialize minimap data data = new MinimapData; - data->mode = MINIMAP_MODE_OFF; - data->is_radar = false; - data->map_invalidated = true; - data->heightmap_image = NULL; - data->minimap_image = NULL; - data->texture = NULL; + data->mode = MINIMAP_MODE_OFF; + data->is_radar = false; + data->map_invalidated = true; + data->heightmap_image = NULL; + data->minimap_image = NULL; + data->texture = NULL; + data->heightmap_texture = NULL; data->minimap_shape_round = g_settings->getBool("minimap_shape_round"); // Get round minimap textures From f0b325254fdf76f988f0d2ae83a8aa6825b6d60e Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 9 Aug 2015 09:17:11 +0100 Subject: [PATCH 298/670] Treegen: Rename pine tree mapgen alias --- src/treegen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/treegen.cpp b/src/treegen.cpp index 39cb1ca06..208f34552 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -755,7 +755,7 @@ void make_pine_tree(MMVManip &vmanip, v3s16 p0, INodeDefManager *ndef, int seed) and in games that have saplings; both are deprecated but not replaced yet */ - content_t c_tree = ndef->getId("mapgen_pinetree"); + content_t c_tree = ndef->getId("mapgen_pine_tree"); content_t c_leaves = ndef->getId("mapgen_pine_needles"); content_t c_snow = ndef->getId("mapgen_snow"); if (c_tree == CONTENT_IGNORE) From 738fbc66d096575bb9a1694056ce2d627a70c03d Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 11 Aug 2015 19:07:56 +0200 Subject: [PATCH 299/670] Fix Lua PcgRandom Before, this lua code led to a crash: local pcg = PcgRandom(42) local value = pcg:next() This was because if you called s32 PcgRandom::range(min, max) with the minimum and maximum possible values for s32 integers (which the lua binding code did), u32 PcgRandom::range(bound) got called with 0 as the bound. The bound however is one above the maximum value, so 0 is a "special" value to pass to this function. This commit fixes the lua crash by assigning the RNG's full range to the bound 0, which is also fits to the "maximum is bound - 1" principle, as (u32)-1 is the maximum value in the u32 range. --- src/noise.cpp | 3 +++ src/unittest/test_random.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/noise.cpp b/src/noise.cpp index 443c405ce..2948fb765 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -90,6 +90,9 @@ u32 PcgRandom::next() u32 PcgRandom::range(u32 bound) { + // If the bound is 0, we cover the whole RNG's range + if (bound == 0) + return next(); /* If the bound is not a multiple of the RNG's range, it may cause bias, e.g. a RNG has a range from 0 to 3 and we take want a number 0 to 2. diff --git a/src/unittest/test_random.cpp b/src/unittest/test_random.cpp index 20cfca334..bbee57719 100644 --- a/src/unittest/test_random.cpp +++ b/src/unittest/test_random.cpp @@ -101,6 +101,9 @@ void TestRandom::testPcgRandomRange() EXCEPTION_CHECK(PrngException, pr.range(5, 1)); + // Regression test for bug 3027 + pr.range(pr.RANDOM_MIN, pr.RANDOM_MAX); + for (u32 i = 0; i != 32768; i++) { int min = (pr.next() % 3000) - 500; int max = (pr.next() % 3000) - 500; From 2b04ab874d75711bc021a0cd8dc7fca68f4e6929 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 11 Aug 2015 22:27:54 -0400 Subject: [PATCH 300/670] SAPI: Track last executed mod and include in error messages --- builtin/game/auth.lua | 1 + builtin/game/chatcommands.lua | 2 + builtin/game/detached_inventory.lua | 1 + builtin/game/item.lua | 9 +++++ builtin/game/misc.lua | 15 +++++++- builtin/game/register.lua | 40 ++++++++++++++++++- src/script/common/c_internal.cpp | 25 ++++++------ src/script/common/c_internal.h | 12 +++--- src/script/cpp_api/s_base.cpp | 60 +++++++++++++++++++++++++++-- src/script/cpp_api/s_base.h | 15 ++++++++ src/script/cpp_api/s_entity.cpp | 20 +++++++--- src/script/cpp_api/s_env.cpp | 6 +-- src/script/cpp_api/s_inventory.cpp | 3 ++ src/script/cpp_api/s_item.cpp | 3 ++ src/script/cpp_api/s_player.cpp | 18 ++++----- src/script/cpp_api/s_server.cpp | 7 +++- src/script/lua_api/l_env.cpp | 6 ++- src/script/lua_api/l_server.cpp | 27 +++++++++++++ src/script/lua_api/l_server.h | 6 +++ 19 files changed, 231 insertions(+), 45 deletions(-) diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua index 93b009981..423eb3134 100644 --- a/builtin/game/auth.lua +++ b/builtin/game/auth.lua @@ -171,6 +171,7 @@ function core.register_authentication_handler(handler) end core.registered_auth_handler = handler core.registered_auth_handler_modname = core.get_current_modname() + handler.mod_origin = core.registered_auth_handler_modname end function core.get_auth_handler() diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index 6c8ca8699..5d317de4b 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -10,6 +10,7 @@ function core.register_chatcommand(cmd, def) def.params = def.params or "" def.description = def.description or "" def.privs = def.privs or {} + def.mod_origin = core.get_current_modname() or "??" core.chatcommands[cmd] = def end @@ -37,6 +38,7 @@ core.register_on_chat_message(function(name, message) end local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs) if has_privs then + core.set_last_run_mod(cmd_def.mod_origin) local success, message = cmd_def.func(name, param) if message then core.chat_send_player(name, message) diff --git a/builtin/game/detached_inventory.lua b/builtin/game/detached_inventory.lua index e8f03b56c..b5d106b04 100644 --- a/builtin/game/detached_inventory.lua +++ b/builtin/game/detached_inventory.lua @@ -13,6 +13,7 @@ function core.create_detached_inventory(name, callbacks) stuff.on_put = callbacks.on_put stuff.on_take = callbacks.on_take end + stuff.mod_origin = core.get_current_modname() or "??" core.detached_inventories[name] = stuff return core.create_detached_inventory_raw(name) end diff --git a/builtin/game/item.lua b/builtin/game/item.lua index d25f4eff0..6628a4081 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -479,6 +479,15 @@ function core.node_dig(pos, node, digger) -- Run script hook local _, callback for _, callback in ipairs(core.registered_on_dignodes) do + local origin = core.callback_origins[callback] + if origin then + core.set_last_run_mod(origin.mod) + --print("Running " .. tostring(callback) .. + -- " (a " .. origin.name .. " callback in " .. origin.mod .. ")") + else + --print("No data associated with callback") + end + -- Copy pos and node because callback can modify them local pos_copy = {x=pos.x, y=pos.y, z=pos.z} local node_copy = {name=node.name, param1=node.param1, param2=node.param2} diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index 7fa95742e..e3b7d82bc 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -14,6 +14,7 @@ local function update_timers(delay) local timer = timers[index] timer.time = timer.time - delay if timer.time <= 0 then + core.set_last_run_mod(timer.mod_origin) timer.func(unpack(timer.args or {})) table.remove(timers, index) sub = sub + 1 @@ -55,12 +56,22 @@ function core.after(time, func, ...) "Invalid core.after invocation") if not mintime then mintime = time - timers_to_add = {{time=time+delay, func=func, args={...}}} + timers_to_add = {{ + time = time+delay, + func = func, + args = {...}, + mod_origin = core.get_last_run_mod(), + }} return end mintime = math.min(mintime, time) timers_to_add = timers_to_add or {} - timers_to_add[#timers_to_add+1] = {time=time+delay, func=func, args={...}} + timers_to_add[#timers_to_add+1] = { + time = time+delay, + func = func, + args = {...}, + mod_origin = core.get_last_run_mod(), + } end function core.check_player_privs(name, privs) diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 3a13abfb3..d0e04bfc3 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -72,6 +72,7 @@ end function core.register_abm(spec) -- Add to core.registered_abms core.registered_abms[#core.registered_abms+1] = spec + spec.mod_origin = core.get_current_modname() or "??" end function core.register_entity(name, prototype) @@ -86,6 +87,7 @@ function core.register_entity(name, prototype) -- Add to core.registered_entities core.registered_entities[name] = prototype + prototype.mod_origin = core.get_current_modname() or "??" end function core.register_item(name, itemdef) @@ -147,6 +149,8 @@ function core.register_item(name, itemdef) end -- END Legacy stuff + itemdef.mod_origin = core.get_current_modname() or "??" + -- Disable all further modifications getmetatable(itemdef).__newindex = {} @@ -326,6 +330,8 @@ function core.override_item(name, redefinition) end +core.callback_origins = {} + function core.run_callbacks(callbacks, mode, ...) assert(type(callbacks) == "table") local cb_len = #callbacks @@ -338,6 +344,14 @@ function core.run_callbacks(callbacks, mode, ...) end local ret = nil for i = 1, cb_len do + local origin = core.callback_origins[callbacks[i]] + if origin then + core.set_last_run_mod(origin.mod) + --print("Running " .. tostring(callbacks[i]) .. + -- " (a " .. origin.name .. " callback in " .. origin.mod .. ")") + else + --print("No data associated with callback") + end local cb_ret = callbacks[i](...) if mode == 0 and i == 1 then @@ -370,13 +384,29 @@ end local function make_registration() local t = {} - local registerfunc = function(func) table.insert(t, func) end + local registerfunc = function(func) + table.insert(t, func) + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } + --local origin = core.callback_origins[func] + --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func)) + end return t, registerfunc end local function make_registration_reverse() local t = {} - local registerfunc = function(func) table.insert(t, 1, func) end + local registerfunc = function(func) + table.insert(t, 1, func) + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } + --local origin = core.callback_origins[func] + --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func)) + end return t, registerfunc end @@ -408,6 +438,7 @@ local function make_registration_wrap(reg_fn_name, clear_fn_name) end core.registered_on_player_hpchanges = { modifiers = { }, loggers = { } } + function core.registered_on_player_hpchange(player, hp_change) local last = false for i = #core.registered_on_player_hpchanges.modifiers, 1, -1 do @@ -427,12 +458,17 @@ function core.registered_on_player_hpchange(player, hp_change) end return hp_change end + function core.register_on_player_hpchange(func, modifier) if modifier then table.insert(core.registered_on_player_hpchanges.modifiers, func) else table.insert(core.registered_on_player_hpchanges.loggers, func) end + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } end core.registered_biomes = make_registration_wrap("register_biome", "clear_registered_biomes") diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index 0df0a7270..2a10ce0f2 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -79,7 +79,7 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f) * to gather a coherent backtrace. Realistically, the best we can do here is * print which C function performed the failing pcall. */ -void script_error(lua_State *L, int pcall_result, const char *fxn) +void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn) { if (pcall_result == 0) return; @@ -99,18 +99,21 @@ void script_error(lua_State *L, int pcall_result, const char *fxn) err_type = "Unknown"; } + if (!mod) + mod = "??"; + + if (!fxn) + fxn = "??"; + const char *err_descr = lua_tostring(L, -1); if (!err_descr) err_descr = ""; - std::string err_msg(err_type); - if (fxn) { - err_msg += " error in "; - err_msg += fxn; - err_msg += "(): "; - } else { - err_msg += " error: "; - } + char buf[256]; + snprintf(buf, sizeof(buf), "%s error from mod '%s' in callback %s(): ", + err_type, mod, fxn); + + std::string err_msg(buf); err_msg += err_descr; if (pcall_result == LUA_ERRMEM) { @@ -152,7 +155,7 @@ void script_run_callbacks_f(lua_State *L, int nargs, int result = lua_pcall(L, nargs + 2, 1, errorhandler); if (result != 0) - script_error(L, result, fxn); + script_error(L, result, NULL, fxn); lua_remove(L, -2); // Remove error handler } @@ -176,7 +179,7 @@ void log_deprecated(lua_State *L, const std::string &message) if (doerror) { if (L != NULL) { - script_error(L, LUA_ERRRUN, NULL); + script_error(L, LUA_ERRRUN, NULL, NULL); } else { FATAL_ERROR("Can't do a scripterror for this deprecated message, " "so exit completely!"); diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index 54cdd7da7..ecb514c8f 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -34,11 +34,11 @@ extern "C" { #include "common/c_types.h" -#define PCALL_RESL(L, RES) do { \ - int result_ = (RES); \ - if (result_ != 0) { \ - script_error((L), result_, __FUNCTION__); \ - } \ +#define PCALL_RESL(L, RES) do { \ + int result_ = (RES); \ + if (result_ != 0) { \ + script_error((L), result_, NULL, __FUNCTION__); \ + } \ } while (0) #define script_run_callbacks(L, nargs, mode) \ @@ -77,7 +77,7 @@ enum RunCallbacksMode std::string script_get_backtrace(lua_State *L); int script_error_handler(lua_State *L); int script_exception_wrapper(lua_State *L, lua_CFunction f); -void script_error(lua_State *L, int pcall_result, const char *fxn); +void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn); void script_run_callbacks_f(lua_State *L, int nargs, RunCallbacksMode mode, const char *fxn); void log_deprecated(lua_State *L, const std::string &message); diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 680e661ea..dcfbac4bf 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_internal.h" #include "cpp_api/s_security.h" #include "lua_api/l_object.h" +#include "common/c_converter.h" #include "serverobject.h" #include "debug.h" #include "filesys.h" @@ -68,9 +69,9 @@ public: ScriptApiBase::ScriptApiBase() { - #ifdef SCRIPTAPI_LOCK_DEBUG +#ifdef SCRIPTAPI_LOCK_DEBUG m_locked = false; - #endif +#endif m_luastack = luaL_newstate(); FATAL_ERROR_IF(!m_luastack, "luaL_newstate() failed"); @@ -154,6 +155,43 @@ bool ScriptApiBase::loadScript(const std::string &script_path, std::string *erro return true; } +// Push the list of callbacks (a lua table). +// Then push nargs arguments. +// Then call this function, which +// - runs the callbacks +// - replaces the table and arguments with the return value, +// computed depending on mode +void ScriptApiBase::runCallbacksRaw(int nargs, + RunCallbacksMode mode, const char *fxn) +{ + lua_State *L = getStack(); + FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments"); + + // Insert error handler + lua_pushcfunction(L, script_error_handler); + int errorhandler = lua_gettop(L) - nargs - 1; + lua_insert(L, errorhandler); + + // Insert run_callbacks between error handler and table + lua_getglobal(L, "core"); + lua_getfield(L, -1, "run_callbacks"); + lua_remove(L, -2); + lua_insert(L, errorhandler + 1); + + // Insert mode after table + lua_pushnumber(L, (int)mode); + lua_insert(L, errorhandler + 3); + + // Stack now looks like this: + // ...
... + + int result = lua_pcall(L, nargs + 2, 1, errorhandler); + if (result != 0) + scriptError(result, fxn); + + lua_remove(L, -2); // Remove error handler +} + void ScriptApiBase::realityCheck() { int top = lua_gettop(m_luastack); @@ -167,7 +205,7 @@ void ScriptApiBase::realityCheck() void ScriptApiBase::scriptError(int result, const char *fxn) { - script_error(getStack(), result, fxn); + script_error(getStack(), result, m_last_run_mod.c_str(), fxn); } void ScriptApiBase::stackDump(std::ostream &o) @@ -197,6 +235,22 @@ void ScriptApiBase::stackDump(std::ostream &o) o << std::endl; } +void ScriptApiBase::setOriginDirect(const char *origin) +{ + m_last_run_mod = origin ? origin : "??"; +} + +void ScriptApiBase::setOriginFromTableRaw(int index, const char *fxn) +{ +#ifdef SCRIPTAPI_DEBUG + lua_State *L = getStack(); + + m_last_run_mod = lua_istable(L, index) ? + getstringfield_default(L, index, "mod_origin", "") : ""; + //printf(">>>> running %s for mod: %s\n", fxn, m_last_run_mod.c_str()); +#endif +} + void ScriptApiBase::addObjectReference(ServerActiveObject *cobj) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index 0c2dfafd1..d653b5bac 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -34,6 +34,7 @@ extern "C" { #include "common/c_internal.h" #define SCRIPTAPI_LOCK_DEBUG +#define SCRIPTAPI_DEBUG #define SCRIPT_MOD_NAME_FIELD "current_mod_name" // MUST be an invalid mod name so that mods can't @@ -47,6 +48,12 @@ extern "C" { } \ } while (0) +#define runCallbacks(nargs, mode) \ + runCallbacksRaw((nargs), (mode), __FUNCTION__) + +#define setOriginFromTable(index) \ + setOriginFromTableRaw(index, __FUNCTION__) + class Server; class Environment; class GUIEngine; @@ -61,12 +68,19 @@ public: std::string *error=NULL); bool loadScript(const std::string &script_path, std::string *error=NULL); + void runCallbacksRaw(int nargs, + RunCallbacksMode mode, const char *fxn); + /* object */ void addObjectReference(ServerActiveObject *cobj); void removeObjectReference(ServerActiveObject *cobj); Server* getServer() { return m_server; } + std::string getOrigin() { return m_last_run_mod; } + void setOriginDirect(const char *origin); + void setOriginFromTableRaw(int index, const char *fxn); + protected: friend class LuaABM; friend class InvRef; @@ -95,6 +109,7 @@ protected: void objectrefGet(lua_State *L, u16 id); JMutex m_luastackmutex; + std::string m_last_run_mod; // Stack index of Lua error handler int m_errorhandler; bool m_secure; diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp index 08e06ccbc..0d159846a 100644 --- a/src/script/cpp_api/s_entity.cpp +++ b/src/script/cpp_api/s_entity.cpp @@ -91,7 +91,8 @@ void ScriptApiEntity::luaentity_Activate(u16 id, lua_pushvalue(L, object); // self lua_pushlstring(L, staticdata.c_str(), staticdata.size()); lua_pushinteger(L, dtime_s); - // Call with 3 arguments, 0 results + + setOriginFromTable(object); PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler)); } else { lua_pop(L, 1); @@ -135,11 +136,12 @@ std::string ScriptApiEntity::luaentity_GetStaticdata(u16 id) lua_pop(L, 2); // Pop entity and get_staticdata return ""; } - luaL_checktype(L, -1, LUA_TFUNCTION); lua_pushvalue(L, object); // self - // Call with 1 arguments, 1 results + + setOriginFromTable(object); PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler)); + lua_remove(L, object); // Remove object size_t len = 0; @@ -207,8 +209,10 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime) luaL_checktype(L, -1, LUA_TFUNCTION); lua_pushvalue(L, object); // self lua_pushnumber(L, dtime); // dtime - // Call with 2 arguments, 0 results + + setOriginFromTable(object); PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); + lua_pop(L, 1); // Pop object } @@ -238,8 +242,10 @@ void ScriptApiEntity::luaentity_Punch(u16 id, lua_pushnumber(L, time_from_last_punch); push_tool_capabilities(L, *toolcap); push_v3f(L, dir); - // Call with 5 arguments, 0 results + + setOriginFromTable(object); PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); + lua_pop(L, 1); // Pop object } @@ -264,8 +270,10 @@ void ScriptApiEntity::luaentity_Rightclick(u16 id, luaL_checktype(L, -1, LUA_TFUNCTION); lua_pushvalue(L, object); // self objectrefGetOrCreate(L, clicker); // Clicker reference - // Call with 2 arguments, 0 results + + setOriginFromTable(object); PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); + lua_pop(L, 1); // Pop object } diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp index c171bbf02..9c733773a 100644 --- a/src/script/cpp_api/s_env.cpp +++ b/src/script/cpp_api/s_env.cpp @@ -38,7 +38,7 @@ void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp, push_v3s16(L, minp); push_v3s16(L, maxp); lua_pushnumber(L, blockseed); - script_run_callbacks(L, 3, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(3, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiEnv::environment_Step(float dtime) @@ -52,7 +52,7 @@ void ScriptApiEnv::environment_Step(float dtime) // Call callbacks lua_pushnumber(L, dtime); try { - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } catch (LuaError &e) { getServer()->setAsyncFatalError(e.what()); } @@ -73,7 +73,7 @@ void ScriptApiEnv::player_event(ServerActiveObject* player, std::string type) objectrefGetOrCreate(L, player); // player lua_pushstring(L,type.c_str()); // event type try { - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(2, RUN_CALLBACKS_MODE_FIRST); } catch (LuaError &e) { getServer()->setAsyncFatalError(e.what()); } diff --git a/src/script/cpp_api/s_inventory.cpp b/src/script/cpp_api/s_inventory.cpp index c8c90fd8f..019d1ccc0 100644 --- a/src/script/cpp_api/s_inventory.cpp +++ b/src/script/cpp_api/s_inventory.cpp @@ -209,6 +209,9 @@ bool ScriptApiDetached::getDetachedInventoryCallback( lua_pop(L, 1); return false; } + + setOriginFromTable(-1); + lua_getfield(L, -1, callbackname); lua_remove(L, -2); // Should be a function or nil diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp index 1ca06de76..4d4d416ec 100644 --- a/src/script/cpp_api/s_item.cpp +++ b/src/script/cpp_api/s_item.cpp @@ -193,6 +193,9 @@ bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname) lua_remove(L, -2); luaL_checktype(L, -1, LUA_TTABLE); } + + setOriginFromTable(-1); + lua_getfield(L, -1, callbackname); lua_remove(L, -2); // Remove item def // Should be a function or nil diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index 676b07537..ef3c31cfd 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -32,7 +32,7 @@ void ScriptApiPlayer::on_newplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_newplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_dieplayer(ServerActiveObject *player) @@ -44,7 +44,7 @@ void ScriptApiPlayer::on_dieplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_dieplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, @@ -65,7 +65,7 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, push_tool_capabilities(L, *toolcap); push_v3f(L, dir); lua_pushnumber(L, damage); - script_run_callbacks(L, 6, RUN_CALLBACKS_MODE_OR); + runCallbacks(6, RUN_CALLBACKS_MODE_OR); return lua_toboolean(L, -1); } @@ -96,7 +96,7 @@ bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_respawnplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_OR); + runCallbacks(1, RUN_CALLBACKS_MODE_OR); bool positioning_handled_by_some = lua_toboolean(L, -1); return positioning_handled_by_some; } @@ -113,7 +113,7 @@ bool ScriptApiPlayer::on_prejoinplayer( lua_getfield(L, -1, "registered_on_prejoinplayers"); lua_pushstring(L, name.c_str()); lua_pushstring(L, ip.c_str()); - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR); + runCallbacks(2, RUN_CALLBACKS_MODE_OR); if (lua_isstring(L, -1)) { reason->assign(lua_tostring(L, -1)); return true; @@ -130,7 +130,7 @@ void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_joinplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_leaveplayer(ServerActiveObject *player) @@ -142,7 +142,7 @@ void ScriptApiPlayer::on_leaveplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_leaveplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_cheat(ServerActiveObject *player, @@ -158,7 +158,7 @@ void ScriptApiPlayer::on_cheat(ServerActiveObject *player, lua_newtable(L); lua_pushlstring(L, cheat_type.c_str(), cheat_type.size()); lua_setfield(L, -2, "type"); - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(2, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player, @@ -185,7 +185,7 @@ void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player, lua_pushlstring(L, value.c_str(), value.size()); lua_settable(L, -3); } - script_run_callbacks(L, 3, RUN_CALLBACKS_MODE_OR_SC); + runCallbacks(3, RUN_CALLBACKS_MODE_OR_SC); } ScriptApiPlayer::~ScriptApiPlayer() diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index 5b4626f40..ec2f9c0af 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -67,6 +67,9 @@ void ScriptApiServer::getAuthHandler() lua_pop(L, 1); lua_getfield(L, -1, "builtin_auth_handler"); } + + setOriginFromTable(-1); + lua_remove(L, -2); // Remove core if (lua_type(L, -1) != LUA_TTABLE) throw LuaError("Authentication handler table not valid"); @@ -133,7 +136,7 @@ bool ScriptApiServer::on_chat_message(const std::string &name, // Call callbacks lua_pushstring(L, name.c_str()); lua_pushstring(L, message.c_str()); - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR_SC); + runCallbacks(2, RUN_CALLBACKS_MODE_OR_SC); bool ate = lua_toboolean(L, -1); return ate; } @@ -146,6 +149,6 @@ void ScriptApiServer::on_shutdown() lua_getglobal(L, "core"); lua_getfield(L, -1, "registered_on_shutdown"); // Call callbacks - script_run_callbacks(L, 0, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); } diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 48c46c079..9d1936769 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -68,6 +68,8 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, FATAL_ERROR(""); lua_remove(L, -2); // Remove registered_abms + scriptIface->setOriginFromTable(-1); + // Call action luaL_checktype(L, -1, LUA_TTABLE); lua_getfield(L, -1, "action"); @@ -78,7 +80,9 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, lua_pushnumber(L, active_object_count); lua_pushnumber(L, active_object_count_wider); - PCALL_RESL(L, lua_pcall(L, 4, 0, errorhandler)); + int result = lua_pcall(L, 4, 0, errorhandler); + if (result) + scriptIface->scriptError(result, "LuaABM::trigger"); lua_pop(L, 1); // Pop error handler } diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 96c0327df..73eca9d60 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -438,6 +438,31 @@ int ModApiServer::l_notify_authentication_modified(lua_State *L) return 0; } +// get_last_run_mod() +int ModApiServer::l_get_last_run_mod(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + const char *current_mod = lua_tostring(L, -1); + if (current_mod == NULL || current_mod[0] == '\0') { + lua_pop(L, 1); + lua_pushstring(L, getScriptApiBase(L)->getOrigin().c_str()); + } + return 1; +} + +// set_last_run_mod(modname) +int ModApiServer::l_set_last_run_mod(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; +#ifdef SCRIPTAPI_DEBUG + const char *mod = lua_tostring(L, 1); + getScriptApiBase(L)->setOriginDirect(mod); + //printf(">>>> last mod set from Lua: %s\n", mod); +#endif + return 0; +} + #ifndef NDEBUG // cause_error(type_of_error) int ModApiServer::l_cause_error(lua_State *L) @@ -495,6 +520,8 @@ void ModApiServer::Initialize(lua_State *L, int top) API_FCT(unban_player_or_ip); API_FCT(notify_authentication_modified); + API_FCT(get_last_run_mod); + API_FCT(set_last_run_mod); #ifndef NDEBUG API_FCT(cause_error); #endif diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index e14bef043..df31f325f 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -88,6 +88,12 @@ private: // notify_authentication_modified(name) static int l_notify_authentication_modified(lua_State *L); + // get_last_run_mod() + static int l_get_last_run_mod(lua_State *L); + + // set_last_run_mod(modname) + static int l_set_last_run_mod(lua_State *L); + #ifndef NDEBUG // cause_error(type_of_error) static int l_cause_error(lua_State *L); From a8e238ed06ee8285ed4459e9deda3117419837f6 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 10 Aug 2015 22:24:47 +0200 Subject: [PATCH 301/670] Add count based unload limit for mapblocks --- minetest.conf.example | 3 + src/client.cpp | 5 +- src/defaultsettings.cpp | 1 + src/map.cpp | 142 ++++++++++++++++++++++++++++++---------- src/map.h | 2 +- src/mapsector.cpp | 35 +++++----- src/mapsector.h | 28 ++++---- src/server.cpp | 3 +- 8 files changed, 154 insertions(+), 65 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index f4b905700..de3cf3243 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -94,6 +94,9 @@ #random_input = false # Timeout for client to remove unused map data from memory #client_unload_unused_data_timeout = 600 +# Maximum number of mapblocks for client to be kept in memory +# Set to -1 for unlimited amount +#client_mapblock_limit = 1000 # Whether to fog out the end of the visible area #enable_fog = true # Whether to show the client debug info (has the same effect as hitting F5) diff --git a/src/client.cpp b/src/client.cpp index d4d3b6df6..946f4f1c4 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -421,8 +421,9 @@ void Client::step(float dtime) ScopeProfiler sp(g_profiler, "Client: map timer and unload"); std::vector deleted_blocks; m_env.getMap().timerUpdate(map_timer_and_unload_dtime, - g_settings->getFloat("client_unload_unused_data_timeout"), - &deleted_blocks); + g_settings->getFloat("client_unload_unused_data_timeout"), + g_settings->getS32("client_mapblock_limit"), + &deleted_blocks); /* Send info to server diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 40afc7dd3..92d85c830 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -104,6 +104,7 @@ void set_default_settings(Settings *settings) settings->setDefault("address", ""); settings->setDefault("random_input", "false"); settings->setDefault("client_unload_unused_data_timeout", "600"); + settings->setDefault("client_mapblock_limit", "1000"); settings->setDefault("enable_fog", "true"); settings->setDefault("fov", "72"); settings->setDefault("view_bobbing", "true"); diff --git a/src/map.cpp b/src/map.cpp index 50b50220d..38a700e3c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "database-dummy.h" #include "database-sqlite3.h" #include +#include #if USE_LEVELDB #include "database-leveldb.h" #endif @@ -1399,10 +1400,25 @@ bool Map::getDayNightDiff(v3s16 blockpos) return false; } +struct TimeOrderedMapBlock { + MapSector *sect; + MapBlock *block; + + TimeOrderedMapBlock(MapSector *sect, MapBlock *block) : + sect(sect), + block(block) + {} + + bool operator<(const TimeOrderedMapBlock &b) const + { + return block->getUsageTimer() < b.block->getUsageTimer(); + }; +}; + /* Updates usage timers */ -void Map::timerUpdate(float dtime, float unload_timeout, +void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks, std::vector *unloaded_blocks) { bool save_before_unloading = (mapType() == MAPTYPE_SERVER); @@ -1416,48 +1432,108 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 block_count_all = 0; beginSave(); - for(std::map::iterator si = m_sectors.begin(); - si != m_sectors.end(); ++si) { - MapSector *sector = si->second; - bool all_blocks_deleted = true; + // If there is no practical limit, we spare creation of mapblock_queue + if (max_loaded_blocks == (u32)-1) { + for (std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) { + MapSector *sector = si->second; - MapBlockVect blocks; - sector->getBlocks(blocks); + bool all_blocks_deleted = true; - for(MapBlockVect::iterator i = blocks.begin(); - i != blocks.end(); ++i) { - MapBlock *block = (*i); + MapBlockVect blocks; + sector->getBlocks(blocks); - block->incrementUsageTimer(dtime); + for (MapBlockVect::iterator i = blocks.begin(); + i != blocks.end(); ++i) { + MapBlock *block = (*i); - if(block->refGet() == 0 && block->getUsageTimer() > unload_timeout) { - v3s16 p = block->getPos(); + block->incrementUsageTimer(dtime); - // Save if modified - if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) { - modprofiler.add(block->getModifiedReasonString(), 1); - if (!saveBlock(block)) - continue; - saved_blocks_count++; + if (block->refGet() == 0 + && block->getUsageTimer() > unload_timeout) { + v3s16 p = block->getPos(); + + // Save if modified + if (block->getModified() != MOD_STATE_CLEAN + && save_before_unloading) { + modprofiler.add(block->getModifiedReasonString(), 1); + if (!saveBlock(block)) + continue; + saved_blocks_count++; + } + + // Delete from memory + sector->deleteBlock(block); + + if (unloaded_blocks) + unloaded_blocks->push_back(p); + + deleted_blocks_count++; + } else { + all_blocks_deleted = false; + block_count_all++; } - - // Delete from memory - sector->deleteBlock(block); - - if(unloaded_blocks) - unloaded_blocks->push_back(p); - - deleted_blocks_count++; } - else { - all_blocks_deleted = false; - block_count_all++; + + if (all_blocks_deleted) { + sector_deletion_queue.push_back(si->first); } } + } else { + std::priority_queue mapblock_queue; + for (std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) { + MapSector *sector = si->second; - if(all_blocks_deleted) { - sector_deletion_queue.push_back(si->first); + MapBlockVect blocks; + sector->getBlocks(blocks); + + for(MapBlockVect::iterator i = blocks.begin(); + i != blocks.end(); ++i) { + MapBlock *block = (*i); + + block->incrementUsageTimer(dtime); + mapblock_queue.push(TimeOrderedMapBlock(sector, block)); + } + } + block_count_all = mapblock_queue.size(); + // Delete old blocks, and blocks over the limit from the memory + while (mapblock_queue.size() > max_loaded_blocks + || mapblock_queue.top().block->getUsageTimer() > unload_timeout) { + TimeOrderedMapBlock b = mapblock_queue.top(); + mapblock_queue.pop(); + + MapBlock *block = b.block; + + if (block->refGet() != 0) + continue; + + v3s16 p = block->getPos(); + + // Save if modified + if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) { + modprofiler.add(block->getModifiedReasonString(), 1); + if (!saveBlock(block)) + continue; + saved_blocks_count++; + } + + // Delete from memory + b.sect->deleteBlock(block); + + if (unloaded_blocks) + unloaded_blocks->push_back(p); + + deleted_blocks_count++; + block_count_all--; + } + // Delete empty sectors + for (std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) { + if (si->second->empty()) { + sector_deletion_queue.push_back(si->first); + } } } endSave(); @@ -1484,7 +1560,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, void Map::unloadUnreferencedBlocks(std::vector *unloaded_blocks) { - timerUpdate(0.0, -1.0, unloaded_blocks); + timerUpdate(0.0, -1.0, 0, unloaded_blocks); } void Map::deleteSectors(std::vector §orList) diff --git a/src/map.h b/src/map.h index 5500ccf91..2afd09639 100644 --- a/src/map.h +++ b/src/map.h @@ -277,7 +277,7 @@ public: Updates usage timers and unloads unused blocks and sectors. Saves modified blocks before unloading on MAPTYPE_SERVER. */ - void timerUpdate(float dtime, float unload_timeout, + void timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks, std::vector *unloaded_blocks=NULL); /* diff --git a/src/mapsector.cpp b/src/mapsector.cpp index 3fe81dc90..9ce3c8eb3 100644 --- a/src/mapsector.cpp +++ b/src/mapsector.cpp @@ -59,7 +59,7 @@ MapBlock * MapSector::getBlockBuffered(s16 y) if(m_block_cache != NULL && y == m_block_cache_y){ return m_block_cache; } - + // If block doesn't exist, return NULL std::map::iterator n = m_blocks.find(y); if(n == m_blocks.end()) @@ -70,11 +70,11 @@ MapBlock * MapSector::getBlockBuffered(s16 y) else{ block = n->second; } - + // Cache the last result m_block_cache_y = y; m_block_cache = block; - + return block; } @@ -88,16 +88,16 @@ MapBlock * MapSector::createBlankBlockNoInsert(s16 y) assert(getBlockBuffered(y) == NULL); // Pre-condition v3s16 blockpos_map(m_pos.X, y, m_pos.Y); - + MapBlock *block = new MapBlock(m_parent, blockpos_map, m_gamedef); - + return block; } MapBlock * MapSector::createBlankBlock(s16 y) { MapBlock *block = createBlankBlockNoInsert(y); - + m_blocks[y] = block; return block; @@ -114,7 +114,7 @@ void MapSector::insertBlock(MapBlock *block) v2s16 p2d(block->getPos().X, block->getPos().Z); assert(p2d == m_pos); - + // Insert into container m_blocks[block_y] = block; } @@ -125,7 +125,7 @@ void MapSector::deleteBlock(MapBlock *block) // Clear from cache m_block_cache = NULL; - + // Remove from container m_blocks.erase(block_y); @@ -142,6 +142,11 @@ void MapSector::getBlocks(MapBlockVect &dest) } } +bool MapSector::empty() +{ + return m_blocks.empty(); +} + /* ServerMapSector */ @@ -159,18 +164,18 @@ void ServerMapSector::serialize(std::ostream &os, u8 version) { if(!ser_ver_supported(version)) throw VersionMismatchException("ERROR: MapSector format not supported"); - + /* [0] u8 serialization version + heightmap data */ - + // Server has both of these, no need to support not having them. //assert(m_objects != NULL); // Write version os.write((char*)&version, 1); - + /* Add stuff here, if needed */ @@ -193,18 +198,18 @@ ServerMapSector* ServerMapSector::deSerialize( /* Read stuff */ - + // Read version u8 version = SER_FMT_VER_INVALID; is.read((char*)&version, 1); - + if(!ser_ver_supported(version)) throw VersionMismatchException("ERROR: MapSector format not supported"); - + /* Add necessary reading stuff here */ - + /* Get or create sector */ diff --git a/src/mapsector.h b/src/mapsector.h index e89247a92..4c1ce86a3 100644 --- a/src/mapsector.h +++ b/src/mapsector.h @@ -40,7 +40,7 @@ class IGameDef; class MapSector { public: - + MapSector(Map *parent, v2s16 pos, IGameDef *gamedef); virtual ~MapSector(); @@ -58,16 +58,18 @@ public: MapBlock * createBlankBlock(s16 y); void insertBlock(MapBlock *block); - + void deleteBlock(MapBlock *block); - + void getBlocks(MapBlockVect &dest); - + + bool empty(); + // Always false at the moment, because sector contains no metadata. bool differs_from_disk; protected: - + // The pile of MapBlocks std::map m_blocks; @@ -76,12 +78,12 @@ protected: v2s16 m_pos; IGameDef *m_gamedef; - + // Last-used block is cached here for quicker access. - // Be sure to set this to NULL when the cached block is deleted + // Be sure to set this to NULL when the cached block is deleted MapBlock *m_block_cache; s16 m_block_cache_y; - + /* Private methods */ @@ -94,7 +96,7 @@ class ServerMapSector : public MapSector public: ServerMapSector(Map *parent, v2s16 pos, IGameDef *gamedef); ~ServerMapSector(); - + u32 getId() const { return MAPSECTOR_SERVER; @@ -106,7 +108,7 @@ public: */ void serialize(std::ostream &os, u8 version); - + static ServerMapSector* deSerialize( std::istream &is, Map *parent, @@ -114,7 +116,7 @@ public: std::map & sectors, IGameDef *gamedef ); - + private: }; @@ -124,7 +126,7 @@ class ClientMapSector : public MapSector public: ClientMapSector(Map *parent, v2s16 pos, IGameDef *gamedef); ~ClientMapSector(); - + u32 getId() const { return MAPSECTOR_CLIENT; @@ -133,6 +135,6 @@ public: private: }; #endif - + #endif diff --git a/src/server.cpp b/src/server.cpp index 144107675..dc7b101a6 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -594,7 +594,8 @@ void Server::AsyncRunStep(bool initial_step) // Run Map's timers and unload unused data ScopeProfiler sp(g_profiler, "Server: map timer and unload"); m_env->getMap().timerUpdate(map_timer_and_unload_dtime, - g_settings->getFloat("server_unload_unused_data_timeout")); + g_settings->getFloat("server_unload_unused_data_timeout"), + (u32)-1); } /* From def274a583909a695580509028bd2f393b9c5cf9 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Thu, 13 Aug 2015 19:02:48 +0300 Subject: [PATCH 302/670] Fix segfault caused by a8e238ed06ee8285ed4459e9deda3117419837f6 --- src/map.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 38a700e3c..76a558d43 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1499,8 +1499,8 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks, } block_count_all = mapblock_queue.size(); // Delete old blocks, and blocks over the limit from the memory - while (mapblock_queue.size() > max_loaded_blocks - || mapblock_queue.top().block->getUsageTimer() > unload_timeout) { + while (!mapblock_queue.empty() && (mapblock_queue.size() > max_loaded_blocks + || mapblock_queue.top().block->getUsageTimer() > unload_timeout)) { TimeOrderedMapBlock b = mapblock_queue.top(); mapblock_queue.pop(); From a670ecfde4eccc0184089bac551b2c480ff35cda Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 13 Aug 2015 12:03:30 +0200 Subject: [PATCH 303/670] game.cpp: Update cached settings --- src/game.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 09b8aab42..6655fe820 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1545,6 +1545,9 @@ protected: void showOverlayMessage(const wchar_t *msg, float dtime, int percent, bool draw_clouds = true); + static void settingChangedCallback(const std::string &setting_name, void *data); + void readSettings(); + private: InputHandler *input; @@ -1616,10 +1619,7 @@ private: IntervalLimiter profiler_interval; - /* TODO: Add a callback function so these can be updated when a setting - * changes. At this point in time it doesn't matter (e.g. /set - * is documented to change server settings only) - * + /* * TODO: Local caching of settings is not optimal and should at some stage * be updated to use a global settings object for getting thse values * (as opposed to the this local caching). This can be addressed in @@ -1662,15 +1662,22 @@ Game::Game() : hud(NULL), mapper(NULL) { - m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); - m_cache_enable_node_highlighting = g_settings->getBool("enable_node_highlighting"); - m_cache_enable_clouds = g_settings->getBool("enable_clouds"); - m_cache_enable_particles = g_settings->getBool("enable_particles"); - m_cache_enable_fog = g_settings->getBool("enable_fog"); - m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity"); - m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); + g_settings->registerChangedCallback("doubletap_jump", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_node_highlighting", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_clouds", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_particles", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_fog", + &settingChangedCallback, this); + g_settings->registerChangedCallback("mouse_sensitivity", + &settingChangedCallback, this); + g_settings->registerChangedCallback("repeat_rightclick_time", + &settingChangedCallback, this); - m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0); + readSettings(); #ifdef __ANDROID__ m_cache_hold_aux1 = false; // This is initialised properly later @@ -1705,6 +1712,21 @@ Game::~Game() delete draw_control; extendedResourceCleanup(); + + g_settings->deregisterChangedCallback("doubletap_jump", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_node_highlighting", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_clouds", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_particles", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_fog", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("mouse_sensitivity", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("repeat_rightclick_time", + &settingChangedCallback, this); } bool Game::startup(bool *kill, @@ -4287,6 +4309,23 @@ void Game::showOverlayMessage(const wchar_t *msg, float dtime, delete[] msg; } +void Game::settingChangedCallback(const std::string &setting_name, void *data) +{ + ((Game *)data)->readSettings(); +} + +void Game::readSettings() +{ + m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); + m_cache_enable_node_highlighting = g_settings->getBool("enable_node_highlighting"); + m_cache_enable_clouds = g_settings->getBool("enable_clouds"); + m_cache_enable_particles = g_settings->getBool("enable_particles"); + m_cache_enable_fog = g_settings->getBool("enable_fog"); + m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity"); + m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); + + m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0); +} /****************************************************************************/ /**************************************************************************** From be9024a397506dff1151b16e5f7a91e393b00d7e Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 13 Aug 2015 03:16:50 -0400 Subject: [PATCH 304/670] minimap: Add ability to disable from server --- doc/lua_api.txt | 6 ++- src/game.cpp | 85 +++++++++++++++++++-------------- src/hud.h | 12 +++-- src/player.cpp | 10 ++-- src/script/lua_api/l_object.cpp | 3 ++ 5 files changed, 69 insertions(+), 47 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 9f435fd44..f771a360d 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2519,11 +2519,13 @@ This is basically a reference to a C++ `ServerActiveObject` * element `stat` values: `position`, `name`, `scale`, `text`, `number`, `item`, `dir` * `hud_get(id)`: gets the HUD element definition structure of the specified ID * `hud_set_flags(flags)`: sets specified HUD flags to `true`/`false` - * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem` + * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem`, `minimap` * pass a table containing a `true`/`false` value of each flag to be set or unset * if a flag equals `nil`, the flag is not modified + * note that setting `minimap` modifies the client's permission to view the minimap - + * the client may locally elect to not view the minimap * `hud_get_flags()`: returns a table containing status of hud flags - * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true }` + * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true, minimap=true }` * `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar * `count`: number of items, must be between `1` and `23` * `hud_get_hotbar_itemcount`: returns number of visible items diff --git a/src/game.cpp b/src/game.cpp index 6655fe820..11e868a80 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1497,7 +1497,7 @@ protected: void toggleChat(float *statustext_time, bool *flag); void toggleHud(float *statustext_time, bool *flag); - void toggleMinimap(float *statustext_time, bool *flag1, bool *flag2, + void toggleMinimap(float *statustext_time, bool *flag, bool show_hud, bool shift_pressed); void toggleFog(float *statustext_time, bool *flag); void toggleDebug(float *statustext_time, bool *show_debug, @@ -2642,7 +2642,7 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_HUD])) { toggleHud(statustext_time, &flags->show_hud); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_MINIMAP])) { - toggleMinimap(statustext_time, &flags->show_minimap, &flags->show_hud, + toggleMinimap(statustext_time, &flags->show_minimap, flags->show_hud, input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SNEAK])); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_CHAT])) { toggleChat(statustext_time, &flags->show_chat); @@ -2864,43 +2864,54 @@ void Game::toggleHud(float *statustext_time, bool *flag) client->setHighlighted(client->getHighlighted(), *flag); } -void Game::toggleMinimap(float *statustext_time, bool *flag, bool *show_hud, bool shift_pressed) +void Game::toggleMinimap(float *statustext_time, bool *flag, + bool show_hud, bool shift_pressed) { - if (*show_hud && g_settings->getBool("enable_minimap")) { - if (shift_pressed) { - mapper->toggleMinimapShape(); - return; - } - MinimapMode mode = mapper->getMinimapMode(); - mode = (MinimapMode)((int)(mode) + 1); - *flag = true; - switch (mode) { - case MINIMAP_MODE_SURFACEx1: - statustext = L"Minimap in surface mode, Zoom x1"; - break; - case MINIMAP_MODE_SURFACEx2: - statustext = L"Minimap in surface mode, Zoom x2"; - break; - case MINIMAP_MODE_SURFACEx4: - statustext = L"Minimap in surface mode, Zoom x4"; - break; - case MINIMAP_MODE_RADARx1: - statustext = L"Minimap in radar mode, Zoom x1"; - break; - case MINIMAP_MODE_RADARx2: - statustext = L"Minimap in radar mode, Zoom x2"; - break; - case MINIMAP_MODE_RADARx4: - statustext = L"Minimap in radar mode, Zoom x4"; - break; - default: - mode = MINIMAP_MODE_OFF; - *flag = false; - statustext = L"Minimap hidden"; - } - *statustext_time = 0; - mapper->setMinimapMode(mode); + if (!show_hud || !g_settings->getBool("enable_minimap")) + return; + + if (shift_pressed) { + mapper->toggleMinimapShape(); + return; } + + u32 hud_flags = client->getEnv().getLocalPlayer()->hud_flags; + + MinimapMode mode = MINIMAP_MODE_OFF; + if (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) { + mode = mapper->getMinimapMode(); + mode = (MinimapMode)((int)mode + 1); + } + + *flag = true; + switch (mode) { + case MINIMAP_MODE_SURFACEx1: + statustext = L"Minimap in surface mode, Zoom x1"; + break; + case MINIMAP_MODE_SURFACEx2: + statustext = L"Minimap in surface mode, Zoom x2"; + break; + case MINIMAP_MODE_SURFACEx4: + statustext = L"Minimap in surface mode, Zoom x4"; + break; + case MINIMAP_MODE_RADARx1: + statustext = L"Minimap in radar mode, Zoom x1"; + break; + case MINIMAP_MODE_RADARx2: + statustext = L"Minimap in radar mode, Zoom x2"; + break; + case MINIMAP_MODE_RADARx4: + statustext = L"Minimap in radar mode, Zoom x4"; + break; + default: + mode = MINIMAP_MODE_OFF; + *flag = false; + statustext = (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) ? + L"Minimap hidden" : L"Minimap disabled by server"; + } + + *statustext_time = 0; + mapper->setMinimapMode(mode); } void Game::toggleFog(float *statustext_time, bool *flag) diff --git a/src/hud.h b/src/hud.h index 2e6838eb1..614e7c92d 100644 --- a/src/hud.h +++ b/src/hud.h @@ -32,11 +32,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #define HUD_CORNER_LOWER 1 #define HUD_CORNER_CENTER 2 +// Note that these visibility flags do not determine if the hud items are +// actually drawn, but rather, allows the item to be drawn should the rest of +// the game state permit it. #define HUD_FLAG_HOTBAR_VISIBLE (1 << 0) #define HUD_FLAG_HEALTHBAR_VISIBLE (1 << 1) #define HUD_FLAG_CROSSHAIR_VISIBLE (1 << 2) #define HUD_FLAG_WIELDITEM_VISIBLE (1 << 3) #define HUD_FLAG_BREATHBAR_VISIBLE (1 << 4) +#define HUD_FLAG_MINIMAP_VISIBLE (1 << 5) #define HUD_PARAM_HOTBAR_ITEMCOUNT 1 #define HUD_PARAM_HOTBAR_IMAGE 2 @@ -116,11 +120,11 @@ public: std::string hotbar_selected_image; bool use_hotbar_selected_image; v3s16 camera_offset; - + Hud(video::IVideoDriver *driver,scene::ISceneManager* smgr, gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player, Inventory *inventory); - + void drawHotbar(u16 playeritem); void resizeHotbar(); void drawCrosshair(); @@ -129,12 +133,12 @@ public: private: void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture, s32 count, v2s32 offset, v2s32 size=v2s32()); - + void drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset, InventoryList *mainlist, u16 selectitem, u16 direction); void drawItem(const ItemStack &item, const core::rect& rect, bool selected); - + v2u32 m_screensize; v2s32 m_displaycenter; s32 m_hotbar_imagesize; diff --git a/src/player.cpp b/src/player.cpp index 0e8fd86d2..cb2286ef6 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -75,7 +75,8 @@ Player::Player(IGameDef *gamedef, const char *name): "listring[]" "list[current_player;craftpreview;7,1;1,1;]"; - // Initialize movement settings at default values, so movement can work if the server fails to send them + // Initialize movement settings at default values, so movement can work + // if the server fails to send them movement_acceleration_default = 3 * BS; movement_acceleration_air = 2 * BS; movement_acceleration_fast = 10 * BS; @@ -97,9 +98,10 @@ Player::Player(IGameDef *gamedef, const char *name): physics_override_sneak = true; physics_override_sneak_glitch = true; - hud_flags = HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE | - HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE | - HUD_FLAG_BREATHBAR_VISIBLE; + hud_flags = + HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE | + HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE | + HUD_FLAG_BREATHBAR_VISIBLE | HUD_FLAG_MINIMAP_VISIBLE; hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT; } diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index fca69b996..3ac8eeefb 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -68,6 +68,7 @@ struct EnumString es_HudBuiltinElement[] = {HUD_FLAG_CROSSHAIR_VISIBLE, "crosshair"}, {HUD_FLAG_WIELDITEM_VISIBLE, "wielditem"}, {HUD_FLAG_BREATHBAR_VISIBLE, "breathbar"}, + {HUD_FLAG_MINIMAP_VISIBLE, "minimap"}, {0, NULL}, }; @@ -1384,6 +1385,8 @@ int ObjectRef::l_hud_get_flags(lua_State *L) lua_setfield(L, -2, "wielditem"); lua_pushboolean(L, player->hud_flags & HUD_FLAG_BREATHBAR_VISIBLE); lua_setfield(L, -2, "breathbar"); + lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE); + lua_setfield(L, -2, "minimap"); return 1; } From 25dfd1bbf5cfdcf863e3281f87164915bccc4299 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 14 Aug 2015 15:38:35 +0200 Subject: [PATCH 305/670] Don't do formspec escaping twice for loading description --- builtin/mainmenu/common.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index 14a64361d..6266d0220 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -224,10 +224,10 @@ function menu_handle_key_up_down(fields,textlist,settingname) configure_selected_world_params(newidx) end - + return true end - + return false end @@ -237,7 +237,7 @@ function asyncOnlineFavourites() if not menudata.public_known then menudata.public_known = {{ name = fgettext("Loading..."), - description = fgettext("Try reenabling public serverlist and check your internet connection.") + description = fgettext_ne("Try reenabling public serverlist and check your internet connection.") }} end menudata.favorites = menudata.public_known @@ -262,22 +262,22 @@ end -------------------------------------------------------------------------------- function text2textlist(xpos,ypos,width,height,tl_name,textlen,text,transparency) local textlines = core.splittext(text,textlen) - + local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width .. "," .. height .. ";" .. tl_name .. ";" - + for i=1, #textlines, 1 do textlines[i] = textlines[i]:gsub("\r","") retval = retval .. core.formspec_escape(textlines[i]) .. "," end - + retval = retval .. ";0;" - + if transparency then retval = retval .. "true" end - + retval = retval .. "]" return retval From c4b5561b3fdf4c2cac401774e7c54856c1546855 Mon Sep 17 00:00:00 2001 From: nerzhul Date: Fri, 14 Aug 2015 14:00:36 +0200 Subject: [PATCH 306/670] Remove unused function from connection.{cpp,h} --- src/network/connection.cpp | 10 ---------- src/network/connection.h | 1 - 2 files changed, 11 deletions(-) diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 93dcf4ca2..7794ce10f 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -2817,16 +2817,6 @@ bool Connection::deletePeer(u16 peer_id, bool timeout) /* Interface */ -ConnectionEvent Connection::getEvent() -{ - if (m_event_queue.empty()) { - ConnectionEvent e; - e.type = CONNEVENT_NONE; - return e; - } - return m_event_queue.pop_frontNoEx(); -} - ConnectionEvent Connection::waitEvent(u32 timeout_ms) { try { diff --git a/src/network/connection.h b/src/network/connection.h index f15c3e114..15ea7e20f 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -1018,7 +1018,6 @@ public: ~Connection(); /* Interface */ - ConnectionEvent getEvent(); ConnectionEvent waitEvent(u32 timeout_ms); void putCommand(ConnectionCommand &c); From 7238df4c5952ed9eec491f424b8ca4b790cf7558 Mon Sep 17 00:00:00 2001 From: BlockMen Date: Wed, 12 Aug 2015 23:25:26 +0200 Subject: [PATCH 307/670] Fix sneaking (fixes #665 and #3045) --- src/localplayer.cpp | 72 +++++++++++++++++++++++++++------------------ src/localplayer.h | 7 +++-- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/src/localplayer.cpp b/src/localplayer.cpp index aee862200..77e7a9e16 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -48,9 +48,10 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name): light_color(255,255,255,255), m_sneak_node(32767,32767,32767), m_sneak_node_exists(false), + m_need_to_get_new_sneak_node(true), + m_sneak_node_bb_ymax(0), m_old_node_below(32767,32767,32767), m_old_node_below_type("air"), - m_need_to_get_new_sneak_node(true), m_can_jump(false), m_cao(NULL) { @@ -179,25 +180,26 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, If sneaking, keep in range from the last walked node and don't fall off from it */ - if(control.sneak && m_sneak_node_exists && + if (control.sneak && m_sneak_node_exists && !(fly_allowed && g_settings->getBool("free_move")) && !in_liquid && - physics_override_sneak) - { - f32 maxd = 0.5*BS + sneak_max; + physics_override_sneak) { + f32 maxd = 0.5 * BS + sneak_max; v3f lwn_f = intToFloat(m_sneak_node, BS); position.X = rangelim(position.X, lwn_f.X-maxd, lwn_f.X+maxd); position.Z = rangelim(position.Z, lwn_f.Z-maxd, lwn_f.Z+maxd); - if(!is_climbing) - { - f32 min_y = lwn_f.Y + 0.5*BS; - if(position.Y < min_y) - { - position.Y = min_y; - - if(m_speed.Y < 0) - m_speed.Y = 0; - } + if (!is_climbing) { + // Move up if necessary + f32 new_y = (lwn_f.Y - 0.5 * BS) + m_sneak_node_bb_ymax; + if (position.Y < new_y) + position.Y = new_y; + /* + Collision seems broken, since player is sinking when + sneaking over the edges of current sneaking_node. + TODO (when fixed): Set Y-speed only to 0 when position.Y < new_y. + */ + if (m_speed.Y < 0) + m_speed.Y = 0; } } @@ -230,27 +232,28 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, player is sneaking from, if any. If the node from under the player has been removed, the player falls. */ - v3s16 current_node = floatToInt(position - v3f(0, 0.05 * BS, 0), BS); - if(m_sneak_node_exists && - nodemgr->get(map->getNodeNoEx(m_old_node_below)).name == "air" && - m_old_node_below_type != "air") - { + f32 position_y_mod = 0.05 * BS; + if (m_sneak_node_bb_ymax > 0) + position_y_mod = m_sneak_node_bb_ymax - position_y_mod; + v3s16 current_node = floatToInt(position - v3f(0, position_y_mod, 0), BS); + if (m_sneak_node_exists && + nodemgr->get(map->getNodeNoEx(m_old_node_below)).name == "air" && + m_old_node_below_type != "air") { // Old node appears to have been removed; that is, // it wasn't air before but now it is m_need_to_get_new_sneak_node = false; m_sneak_node_exists = false; - } - else if(nodemgr->get(map->getNodeNoEx(current_node)).name != "air") - { + } else if (nodemgr->get(map->getNodeNoEx(current_node)).name != "air") { // We are on something, so make sure to recalculate the sneak // node. m_need_to_get_new_sneak_node = true; } - if(m_need_to_get_new_sneak_node && physics_override_sneak) - { - v3s16 pos_i_bottom = floatToInt(position - v3f(0, 0.05 * BS ,0), BS); + + if (m_need_to_get_new_sneak_node && physics_override_sneak) { + m_sneak_node_bb_ymax = 0; + v3s16 pos_i_bottom = floatToInt(position - v3f(0, position_y_mod, 0), BS); v2f player_p2df(position.X, position.Z); - f32 min_distance_f = 100000.0*BS; + f32 min_distance_f = 100000.0 * BS; // If already seeking from some node, compare to it. /*if(m_sneak_node_exists) { @@ -298,11 +301,24 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, new_sneak_node = p; } - bool sneak_node_found = (min_distance_f < 100000.0*BS*0.9); + bool sneak_node_found = (min_distance_f < 100000.0 * BS * 0.9); m_sneak_node = new_sneak_node; m_sneak_node_exists = sneak_node_found; + if (sneak_node_found) { + f32 cb_max = 0; + MapNode n = map->getNodeNoEx(m_sneak_node); + std::vector nodeboxes = n.getCollisionBoxes(nodemgr); + for (std::vector::iterator it = nodeboxes.begin(); + it != nodeboxes.end(); ++it) { + aabb3f box = *it; + if (box.MaxEdge.Y > cb_max) + cb_max = box.MaxEdge.Y; + } + m_sneak_node_bb_ymax = cb_max; + } + /* If sneaking, the player's collision box can be in air, so this has to be set explicitly diff --git a/src/localplayer.h b/src/localplayer.h index b71253275..40a7f089e 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -85,12 +85,15 @@ private: v3s16 m_sneak_node; // Whether the player is allowed to sneak bool m_sneak_node_exists; + // Whether recalculation of the sneak node is needed + bool m_need_to_get_new_sneak_node; + // Stores the max player uplift by m_sneak_node and is updated + // when m_need_to_get_new_sneak_node == true + f32 m_sneak_node_bb_ymax; // Node below player, used to determine whether it has been removed, // and its old type v3s16 m_old_node_below; std::string m_old_node_below_type; - // Whether recalculation of the sneak node is needed - bool m_need_to_get_new_sneak_node; bool m_can_jump; GenericCAO* m_cao; From 0ba1cf82033a810dd2e6178e23794bb135ede46a Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 15 Aug 2015 14:45:44 -0400 Subject: [PATCH 308/670] Rollback: Fail on bad precondition instead of causing assertion error --- src/rollback_interface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index 028bd0424..b3f457029 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -210,6 +210,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam << inventory_index << " too large in " << "inventory list \"" << inventory_list << "\" in " << inventory_location << std::endl; + return false; } // If item was added, take away item, otherwise add removed item if (inventory_add) { From ee6cad154699959193d9a0395eb1d144a495c377 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 15 Aug 2015 00:21:15 +0100 Subject: [PATCH 309/670] Defaultsettings: Increase client_mapblock_limit to 5000 --- minetest.conf.example | 2 +- src/defaultsettings.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index de3cf3243..50893c578 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -96,7 +96,7 @@ #client_unload_unused_data_timeout = 600 # Maximum number of mapblocks for client to be kept in memory # Set to -1 for unlimited amount -#client_mapblock_limit = 1000 +#client_mapblock_limit = 5000 # Whether to fog out the end of the visible area #enable_fog = true # Whether to show the client debug info (has the same effect as hitting F5) diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 92d85c830..f0b02b2d9 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -104,7 +104,7 @@ void set_default_settings(Settings *settings) settings->setDefault("address", ""); settings->setDefault("random_input", "false"); settings->setDefault("client_unload_unused_data_timeout", "600"); - settings->setDefault("client_mapblock_limit", "1000"); + settings->setDefault("client_mapblock_limit", "5000"); settings->setDefault("enable_fog", "true"); settings->setDefault("fov", "72"); settings->setDefault("view_bobbing", "true"); @@ -271,7 +271,6 @@ void set_default_settings(Settings *settings) settings->setDefault("max_clearobjects_extra_loaded_blocks", "4096"); settings->setDefault("time_send_interval", "5"); settings->setDefault("time_speed", "72"); - settings->setDefault("year_days", "30"); settings->setDefault("server_unload_unused_data_timeout", "29"); settings->setDefault("max_objects_per_block", "49"); settings->setDefault("server_map_save_interval", "5.3"); From 5556ba168fb8bb3c234311564de36c4b130c8ab1 Mon Sep 17 00:00:00 2001 From: onkrot Date: Sun, 16 Aug 2015 00:25:27 +0500 Subject: [PATCH 310/670] Remove unused functions. --- src/content_mapnode.cpp | 13 ------------- src/content_mapnode.h | 3 --- src/mapgen.cpp | 24 ------------------------ src/mapgen.h | 2 -- src/unittest/test_mapnode.cpp | 2 -- 5 files changed, 44 deletions(-) diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 5e2a5c816..3a4a4652a 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -233,16 +233,3 @@ std::string content_mapnode_get_new_name(const std::string &oldname) { return newnamegetter.get(oldname); } - -content_t legacy_get_id(const std::string &oldname, INodeDefManager *ndef) -{ - std::string newname = content_mapnode_get_new_name(oldname); - if(newname == "") - return CONTENT_IGNORE; - content_t id; - bool found = ndef->getId(newname, id); - if(!found) - return CONTENT_IGNORE; - return id; -} - diff --git a/src/content_mapnode.h b/src/content_mapnode.h index 5c9c0b66d..5d68afe59 100644 --- a/src/content_mapnode.h +++ b/src/content_mapnode.h @@ -37,8 +37,5 @@ void content_mapnode_get_name_id_mapping(NameIdMapping *nimap); // Convert "CONTENT_STONE"-style names to dynamic ids std::string content_mapnode_get_new_name(const std::string &oldname); class INodeDefManager; -content_t legacy_get_id(const std::string &oldname, INodeDefManager *ndef); -#define LEGN(ndef, oldname) legacy_get_id(oldname, ndef) #endif - diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 1843e953d..f8e9477c5 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -342,30 +342,6 @@ void Mapgen::spreadLight(v3s16 nmin, v3s16 nmax) -void Mapgen::calcLightingOld(v3s16 nmin, v3s16 nmax) -{ - enum LightBank banks[2] = {LIGHTBANK_DAY, LIGHTBANK_NIGHT}; - VoxelArea a(nmin, nmax); - bool block_is_underground = (water_level > nmax.Y); - bool sunlight = !block_is_underground; - - ScopeProfiler sp(g_profiler, "EmergeThread: mapgen lighting update", SPT_AVG); - - for (int i = 0; i < 2; i++) { - enum LightBank bank = banks[i]; - std::set light_sources; - std::map unlight_from; - - voxalgo::clearLightAndCollectSources(*vm, a, bank, ndef, - light_sources, unlight_from); - voxalgo::propagateSunlight(*vm, a, sunlight, light_sources, ndef); - - vm->unspreadLight(bank, unlight_from, light_sources, ndef); - vm->spreadLight(bank, light_sources, ndef); - } -} - - /////////////////////////////////////////////////////////////////////////////// GenerateNotifier::GenerateNotifier() diff --git a/src/mapgen.h b/src/mapgen.h index b0758ba41..46328ba92 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -179,8 +179,6 @@ public: void propagateSunlight(v3s16 nmin, v3s16 nmax); void spreadLight(v3s16 nmin, v3s16 nmax); - void calcLightingOld(v3s16 nmin, v3s16 nmax); - virtual void makeChunk(BlockMakeData *data) {} virtual int getGroundLevelAtPoint(v2s16 p) { return 0; } }; diff --git a/src/unittest/test_mapnode.cpp b/src/unittest/test_mapnode.cpp index fc1a94916..9ecc2f82d 100644 --- a/src/unittest/test_mapnode.cpp +++ b/src/unittest/test_mapnode.cpp @@ -53,6 +53,4 @@ void TestMapNode::testNodeProperties(INodeDefManager *nodedef) // Transparency n.setContent(CONTENT_AIR); UASSERT(nodedef->get(n).light_propagates == true); - n.setContent(LEGN(nodedef, "CONTENT_STONE")); - UASSERT(nodedef->get(n).light_propagates == false); } From bcf38a2ad19116b50d0456bdd6f79d0d218e39d1 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 15 Aug 2015 14:03:36 -0400 Subject: [PATCH 311/670] SEnv: Remove static_exists from ActiveObjects in deleted blocks --- src/environment.cpp | 28 +++++++++++++++++++++++++++- src/environment.h | 5 +++++ src/script/lua_api/l_env.cpp | 6 ++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 5bed11476..dbbfc6f1f 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1424,6 +1424,33 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, } } +void ServerEnvironment::setStaticForActiveObjectsInBlock( + v3s16 blockpos, bool static_exists, v3s16 static_block) +{ + MapBlock *block = m_map->getBlockNoCreateNoEx(blockpos); + if (!block) + return; + + for (std::map::iterator + so_it = block->m_static_objects.m_active.begin(); + so_it != block->m_static_objects.m_active.end(); ++so_it) { + // Get the ServerActiveObject counterpart to this StaticObject + std::map::iterator ao_it; + ao_it = m_active_objects.find(so_it->first); + if (ao_it == m_active_objects.end()) { + // If this ever happens, there must be some kind of nasty bug. + errorstream << "ServerEnvironment::setStaticForObjectsInBlock(): " + "Object from MapBlock::m_static_objects::m_active not found " + "in m_active_objects"; + continue; + } + + ServerActiveObject *sao = ao_it->second; + sao->m_static_exists = static_exists; + sao->m_static_block = static_block; + } +} + ActiveObjectMessage ServerEnvironment::getActiveObjectMessage() { if(m_active_object_messages.empty()) @@ -1960,7 +1987,6 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) } } - #ifndef SERVER #include "clientsimpleobject.h" diff --git a/src/environment.h b/src/environment.h index 2bc128f40..c70694316 100644 --- a/src/environment.h +++ b/src/environment.h @@ -327,6 +327,11 @@ public: std::set* getForceloadedBlocks() { return &m_active_blocks.m_forceloaded_list; }; + // Sets the static object status all the active objects in the specified block + // This is only really needed for deleting blocks from the map + void setStaticForActiveObjectsInBlock(v3s16 blockpos, + bool static_exists, v3s16 static_block=v3s16(0,0,0)); + private: /* diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 9d1936769..28afdd071 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -773,10 +773,12 @@ int ModApiEnvMod::l_delete_area(lua_State *L) for (s16 y = bpmin.Y; y <= bpmax.Y; y++) for (s16 x = bpmin.X; x <= bpmax.X; x++) { v3s16 bp(x, y, z); - if (map.deleteBlock(bp)) + if (map.deleteBlock(bp)) { + env->setStaticForActiveObjectsInBlock(bp, false); event.modified_blocks.insert(bp); - else + } else { success = false; + } } map.dispatchEvent(&event); From c2d23ff9ccf04dd0e4c2ba8a8026857c034bc947 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 18 Aug 2015 01:26:11 -0400 Subject: [PATCH 312/670] SAPI: Disable unlockable time profiling --- src/script/lua_api/l_internal.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h index e8a029b86..1e40c5c4a 100644 --- a/src/script/lua_api/l_internal.h +++ b/src/script/lua_api/l_internal.h @@ -33,12 +33,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #define API_FCT(name) registerFunction(L, #name, l_##name,top) #define ASYNC_API_FCT(name) engine.registerFunction(#name, l_##name) -#if (defined(WIN32) || defined(_WIN32_WCE)) #define NO_MAP_LOCK_REQUIRED + +/* +#if (defined(WIN32) || defined(_WIN32_WCE)) + #define NO_MAP_LOCK_REQUIRED #else -#include "profiler.h" -#define NO_MAP_LOCK_REQUIRED \ - ScopeProfiler nolocktime(g_profiler,"Scriptapi: unlockable time",SPT_ADD) + #include "profiler.h" + #define NO_MAP_LOCK_REQUIRED \ + ScopeProfiler nolocktime(g_profiler,"Scriptapi: unlockable time",SPT_ADD) #endif +*/ #endif /* L_INTERNAL_H_ */ From 1fadf7f21eb5fd7a09037d92f87cd0154e9306c1 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 19 Aug 2015 02:28:37 +0200 Subject: [PATCH 313/670] Fix inventory replace bug --- src/inventory.cpp | 12 ++++++++---- src/inventory.h | 2 +- src/inventorymanager.cpp | 5 +++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/inventory.cpp b/src/inventory.cpp index 6c7c8cdd1..af8b1b301 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -163,7 +163,7 @@ void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef) std::getline(is, tmp, ' '); if(!tmp.empty()) throw SerializationError("Unexpected text after item name"); - + if(name == "MaterialItem") { // Obsoleted on 2011-07-30 @@ -478,7 +478,7 @@ void InventoryList::setName(const std::string &name) void InventoryList::serialize(std::ostream &os) const { //os.imbue(std::locale("C")); - + os<<"Width "<moveItem(from_i, - list_to, to_i, count, !caused_by_move_somewhere); + list_to, to_i, count, !caused_by_move_somewhere, &did_swap); // If source is infinite, reset it's stack if (src_can_take_count == -1) { @@ -397,7 +398,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame } } } - if (move_count > 0) { + if (move_count > 0 || did_swap) { list_from->deleteItem(from_i); list_from->addItem(from_i, from_stack_was); } From 457d42c5997cc430231ed221f06d8f4bba2100e7 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 14 Jun 2015 06:38:02 +0200 Subject: [PATCH 314/670] Android: bypass broken wide_to_utf8 with wide_to_narrow (again) This bypass had to be re-enabled as some users reported issues, even after the iconv build fix. While utf8_to_wide works well, wide_to_utf8 is quite broken on android, for some reason, and some devices (unrelated from build configuration). --- src/util/string.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/util/string.cpp b/src/util/string.cpp index 6d1eda078..c2724aa58 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -102,6 +102,13 @@ std::wstring utf8_to_wide(const std::string &input) return out; } +#ifdef __ANDROID__ +// TODO: this is an ugly fix for wide_to_utf8 somehow not working on android +std::string wide_to_utf8(const std::wstring &input) +{ + return wide_to_narrow(input); +} +#else std::string wide_to_utf8(const std::wstring &input) { size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t); @@ -128,6 +135,7 @@ std::string wide_to_utf8(const std::wstring &input) return out; } +#endif #else // _WIN32 std::wstring utf8_to_wide(const std::string &input) From d565ce95395ec514d48b86910ae333bd5bfaa951 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 19 Aug 2015 18:56:44 +0200 Subject: [PATCH 315/670] Client: disable mmdb modstore The service isn't online, and on the long term, mmdb will likekly be replaced with other services from the modding community. --- builtin/mainmenu/tab_mods.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua index 901f14553..2ddc9b07c 100644 --- a/builtin/mainmenu/tab_mods.lua +++ b/builtin/mainmenu/tab_mods.lua @@ -36,7 +36,10 @@ local function get_formspec(tabview, name, tabdata) -- "label[0.8,4.2;" .. fgettext("Add mod:") .. "]" .. -- TODO Disabled due to upcoming release 0.4.8 and irrlicht messing up localization -- "button[0.75,4.85;1.8,0.5;btn_mod_mgr_install_local;".. fgettext("Local install") .. "]" .. - "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]" + +-- TODO Disabled due to service being offline, and not likely to come online again, in this form +-- "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]" + "" local selected_mod = nil From a64d887275535ca805c6e26768a09407a3ea1c4a Mon Sep 17 00:00:00 2001 From: Rui Date: Sat, 15 Aug 2015 17:41:42 +0900 Subject: [PATCH 316/670] Add Japanese translation of desktop file --- misc/minetest.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/minetest.desktop b/misc/minetest.desktop index cd99cb02a..4257cef37 100644 --- a/misc/minetest.desktop +++ b/misc/minetest.desktop @@ -5,6 +5,7 @@ Comment=Multiplayer infinite-world block sandbox Comment[de]=Mehrspieler-Sandkastenspiel mit unendlichen Blockwelten Comment[es]=Juego sandbox multijugador con mundos infinitos Comment[fr]=Jeu multijoueurs de type bac à sable avec des mondes infinis +Comment[ja]=マルチプレイに対応した、無限の世界のブロック型サンドボックスゲームです Comment[ru]=Игра-песочница с безграничным миром, состоящим из блоков Comment[tr]=Tek-Çok oyuncuyla küplerden sonsuz dünyalar inşa et Exec=minetest @@ -14,4 +15,3 @@ Type=Application Categories=Game; StartupNotify=false Keywords=sandbox;world;mining;crafting;blocks;nodes;multiplayer;roleplaying; - From 3a2bfd4548398aa0a0014fdaee91ce4a12c5963b Mon Sep 17 00:00:00 2001 From: Rui Date: Tue, 18 Aug 2015 19:57:55 +0900 Subject: [PATCH 317/670] Fix indianred and indigo of color-string --- src/util/string.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/string.cpp b/src/util/string.cpp index c2724aa58..2c4143c76 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -587,8 +587,8 @@ ColorContainer::ColorContainer() colors["greenyellow"] = 0xadff2f; colors["honeydew"] = 0xf0fff0; colors["hotpink"] = 0xff69b4; - colors["indianred "] = 0xcd5c5c; - colors["indigo "] = 0x4b0082; + colors["indianred"] = 0xcd5c5c; + colors["indigo"] = 0x4b0082; colors["ivory"] = 0xfffff0; colors["khaki"] = 0xf0e68c; colors["lavender"] = 0xe6e6fa; From f3c16ab3731957fae5ac12b0c3463995d083e03e Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 19 Aug 2015 15:14:27 -0400 Subject: [PATCH 318/670] Update credits tab --- builtin/mainmenu/tab_credits.lua | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index ff100dac7..538ef5808 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -32,26 +32,29 @@ tab_credits = { ",Perttu Ahola (celeron55) ,".. ",Ryan Kwolek (kwolekr) ,".. ",PilzAdam ," .. - ",Maciej Kasatkin (RealBadAngel) ,".. ",sfan5 ,".. ",kahrl ,".. - ",sapier,".. + ",sapier ,".. ",ShadowNinja ,".. ",Nathanael Courant (Nore/Ekdohibs) ,".. - ",BlockMen,".. + ",BlockMen ,".. ",Craig Robbins (Zeno),".. - ",Loic Blot (nerzhul/nrz),".. - ",paramat,".. + ",Loic Blot (nerzhul/nrz) ,".. + ",Mat Gregory (paramat) ,".. ",est31 ," .. ",,".. "#FFFF00," .. fgettext("Active Contributors") .. "," .. ",SmallJoker ," .. - ",gregorycu," .. ",Andrew Ward (rubenwardy) ," .. ",Aaron Suen ," .. - ",TeTpaAka," .. + ",Sokomine ," .. + ",Břetislav Štec (TeTpaAka) ," .. + ",Jean-Patrick G (kilbith) ," .. + ",Rui ," .. + ",Diego Martinez (kaeza) ," .. ",," .. "#FFFF00," .. fgettext("Previous Core Developers") .."," .. + ",Maciej Kasatkin (RealBadAngel) ,".. ",Lisa Milne (darkrose) ," .. ",proller ," .. ",Ilya Zhuravlev (xyz) ," .. @@ -59,6 +62,7 @@ tab_credits = { "#FFFF00," .. fgettext("Previous Contributors") .. "," .. ",Vanessa Ezekowitz (VanessaE) ,".. ",Jurgen Doser (doserj) ,".. + ",Gregory Currie (gregorycu) ," .. ",Jeija ,".. ",MirceaKitsune ,".. ",dannydark ,".. From 5009d31a333a8e1fff8c97bed69873164c72c600 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 19 Aug 2015 15:56:08 -0400 Subject: [PATCH 319/670] Remove some emails from credits tab --- builtin/mainmenu/tab_credits.lua | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 538ef5808..33c84f58f 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -34,13 +34,13 @@ tab_credits = { ",PilzAdam ," .. ",sfan5 ,".. ",kahrl ,".. - ",sapier ,".. + ",sapier,".. ",ShadowNinja ,".. ",Nathanael Courant (Nore/Ekdohibs) ,".. - ",BlockMen ,".. + ",BlockMen,".. ",Craig Robbins (Zeno),".. ",Loic Blot (nerzhul/nrz) ,".. - ",Mat Gregory (paramat) ,".. + ",Mat Gregory (paramat),".. ",est31 ," .. ",,".. "#FFFF00," .. fgettext("Active Contributors") .. "," .. @@ -48,21 +48,21 @@ tab_credits = { ",Andrew Ward (rubenwardy) ," .. ",Aaron Suen ," .. ",Sokomine ," .. - ",Břetislav Štec (TeTpaAka) ," .. + ",Břetislav Štec (TeTpaAka)," .. ",Jean-Patrick G (kilbith) ," .. ",Rui ," .. ",Diego Martinez (kaeza) ," .. ",," .. "#FFFF00," .. fgettext("Previous Core Developers") .."," .. - ",Maciej Kasatkin (RealBadAngel) ,".. + ",Maciej Kasatkin (RealBadAngel) ,".. ",Lisa Milne (darkrose) ," .. - ",proller ," .. + ",proller," .. ",Ilya Zhuravlev (xyz) ," .. ",," .. "#FFFF00," .. fgettext("Previous Contributors") .. "," .. ",Vanessa Ezekowitz (VanessaE) ,".. ",Jurgen Doser (doserj) ,".. - ",Gregory Currie (gregorycu) ," .. + ",Gregory Currie (gregorycu)," .. ",Jeija ,".. ",MirceaKitsune ,".. ",dannydark ,".. From 8b8d17b22b5853c7d32bdb8b369f4523f6c57b95 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Tue, 18 Aug 2015 23:59:44 +0200 Subject: [PATCH 320/670] Remove use of engine sent texture tiling flags - theyre no longer needed --- .../shaders/nodes_shader/opengl_fragment.glsl | 57 +------------------ .../shaders/nodes_shader/opengl_vertex.glsl | 2 +- src/client/tile.cpp | 16 ++---- src/client/tile.h | 16 +----- src/nodedef.cpp | 4 +- src/wieldmesh.cpp | 2 +- 6 files changed, 13 insertions(+), 84 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 02bf2c124..424d32177 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -16,9 +16,6 @@ varying vec3 lightVec; varying vec3 tsLightVec; bool normalTexturePresent = false; -bool texTileableHorizontal = false; -bool texTileableVertical = false; -bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; @@ -29,45 +26,6 @@ void get_texture_flags() 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; - } -} - -vec2 validate_displacement(vec2 uv, vec2 ds, float dist) -{ - if (texSeamless) { - uv += dist * ds; - } else if (texTileableVertical == false) { - vec2 uv2 = uv + dist * ds; - // limit vertical texure displacement - if ((uv.y + uv2.y) < 0.0) { - uv.y = 0.0; - } else if ((uv.y + uv2.y) > 1.999) { - uv.y = 0.999; - } else { - uv.y = uv2.y; - } - uv.x = uv2.x; - } else { - vec2 uv2 = uv + dist * ds; - // limit horizontal texure displacement - if ((uv.x + uv2.x) < 0.0) { - uv.x = 0.0; - } else if ((uv.x + uv2.x) > 1.999) { - uv.x = 0.999; - } else { - uv.x = uv2.x; - } - uv.y = uv2.y; - } - return uv; } float intensity(vec3 color) @@ -77,11 +35,7 @@ float intensity(vec3 color) 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); - } + return intensity(texture2D(baseTexture, uv).rgb); } vec4 get_normal_map(vec2 uv) @@ -144,18 +98,13 @@ void main(void) // Relief mapping if (normalTexturePresent && area_enable_parallax > 0.0) { vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; - // offset the texture by maximum possible displacement, - // this will help align seamless and non seamless textures - uv -= ds; float dist = find_intersection(uv, ds); - uv = validate_displacement(uv, ds, dist); - + uv += dist * ds; #endif } else if (GENERATE_NORMALMAPS == 1 && area_enable_parallax > 0.0) { vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; - uv -= ds; float dist = find_intersectionRGB(uv, ds); - uv = validate_displacement(uv, ds, dist); + uv += dist * ds; } #endif diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index acdaa47d1..53d5c92d0 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -94,7 +94,7 @@ void main(void) // Don't generate heightmaps when too far from the eye float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); - if (dist > 300.0) { + if (dist > 150.0) { area_enable_parallax = 0.0; } diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 79ed4a072..a28b40c65 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -385,8 +385,7 @@ public: video::ITexture* getNormalTexture(const std::string &name); video::SColor getTextureAverageColor(const std::string &name); - video::ITexture *getShaderFlagsTexture( - bool normamap_present, bool tileable_vertical, bool tileable_horizontal); + video::ITexture *getShaderFlagsTexture(bool normamap_present); private: @@ -2054,14 +2053,11 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) } -video::ITexture *TextureSource::getShaderFlagsTexture( - bool normalmap_present, bool tileable_vertical, bool tileable_horizontal) +video::ITexture *TextureSource::getShaderFlagsTexture(bool normalmap_present) { std::string tname = "__shaderFlagsTexture"; tname += normalmap_present ? "1" : "0"; - tname += tileable_horizontal ? "1" : "0"; - tname += tileable_vertical ? "1" : "0"; - + if (isKnownSourceImage(tname)) { return getTexture(tname); } else { @@ -2069,11 +2065,7 @@ video::ITexture *TextureSource::getShaderFlagsTexture( video::IImage *flags_image = driver->createImage( video::ECF_A8R8G8B8, core::dimension2d(1, 1)); sanity_check(flags_image != NULL); - video::SColor c( - 255, - normalmap_present ? 255 : 0, - tileable_horizontal ? 255 : 0, - tileable_vertical ? 255 : 0); + video::SColor c(255, normalmap_present ? 255 : 0, 0, 0); flags_image->setPixel(0, 0, c); insertSourceImage(tname, flags_image); flags_image->drop(); diff --git a/src/client/tile.h b/src/client/tile.h index c08ffc8ad..3098a79b9 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -113,8 +113,7 @@ public: const TextureFromMeshParams ¶ms)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(bool normamap_present, - bool tileable_vertical, bool tileable_horizontal)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; class IWritableTextureSource : public ITextureSource @@ -137,8 +136,7 @@ public: virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(bool normamap_present, - bool tileable_vertical, bool tileable_horizontal)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); @@ -218,9 +216,7 @@ struct TileSpec alpha == other.alpha && material_type == other.material_type && material_flags == other.material_flags && - rotation == other.rotation && - (material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL) && - (material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL) + rotation == other.rotation ); } @@ -254,12 +250,6 @@ struct TileSpec } material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; - if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { - material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; - } - if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { - material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; - } } void applyMaterialOptionsWithShaders(video::SMaterial &material) const diff --git a/src/nodedef.cpp b/src/nodedef.cpp index daaa871f9..269c2b9d6 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1012,9 +1012,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, if (use_normal_texture) { tile->normal_texture = tsrc->getNormalTexture(tiledef->name); } - tile->flags_texture = tsrc->getShaderFlagsTexture( - tile->normal_texture ? true : false, - tiledef->tileable_vertical, tiledef->tileable_horizontal); + tile->flags_texture = tsrc->getShaderFlagsTexture(tile->normal_texture ? true : false); // Material flags tile->material_flags = 0; diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 391a456ab..bc2977a0e 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -302,7 +302,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, material.setFlag(video::EMF_USE_MIP_MAPS, false); #endif if (m_enable_shaders) { - material.setTexture(2, tsrc->getShaderFlagsTexture(false, true, true)); + material.setTexture(2, tsrc->getShaderFlagsTexture(false)); } } From 980d095e32c5441ca8a6aa7b2f8a07eb64c99190 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Thu, 20 Aug 2015 03:39:26 +0200 Subject: [PATCH 321/670] tileable flags are needed also without shaders because of filters --- src/client/tile.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client/tile.h b/src/client/tile.h index 3098a79b9..7796e801d 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -250,6 +250,12 @@ struct TileSpec } material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; + if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + } + if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + } } void applyMaterialOptionsWithShaders(video::SMaterial &material) const From d44fceac7e1237b00c6431ee1bb5805b602d0dcd Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 20 Aug 2015 04:02:00 +0200 Subject: [PATCH 322/670] Bump version to 0.4.13 --- CMakeLists.txt | 4 ++-- build/android/Makefile | 2 +- doc/lua_api.txt | 2 +- doc/menu_lua_api.txt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82073c7f2..b9dfd8ace 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,11 +13,11 @@ set(PROJECT_NAME_CAPITALIZED "Minetest") # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing set(VERSION_MAJOR 0) set(VERSION_MINOR 4) -set(VERSION_PATCH 12) +set(VERSION_PATCH 13) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") # Change to false for releases -set(DEVELOPMENT_BUILD TRUE) +set(DEVELOPMENT_BUILD FALSE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) diff --git a/build/android/Makefile b/build/android/Makefile index 021652d73..6d3791550 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -28,7 +28,7 @@ VERSION_PATCH := $(shell cat $(ROOT)/../../CMakeLists.txt | \ # Increase for each build! ################################################################################ # Play Store actual version (16/03/15): 11 -ANDROID_VERSION_CODE = 12 +ANDROID_VERSION_CODE = 13 ################################################################################ # toolchain config for arm old processors diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f771a360d..5372cb834 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1,4 +1,4 @@ -Minetest Lua Modding API Reference 0.4.12 +Minetest Lua Modding API Reference 0.4.13 ========================================= * More information at * Developer Wiki: diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index 76c329de6..7d46c6526 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -1,4 +1,4 @@ -Minetest Lua Mainmenu API Reference 0.4.12 +Minetest Lua Mainmenu API Reference 0.4.13 ======================================== Introduction From ffe3f03bc514d5cd2a0a520ea6fb69594c7dff77 Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 20 Aug 2015 04:02:00 +0200 Subject: [PATCH 323/670] Continue with 0.4.13-dev --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9dfd8ace..92ef53ef3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ set(VERSION_PATCH 13) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") # Change to false for releases -set(DEVELOPMENT_BUILD FALSE) +set(DEVELOPMENT_BUILD TRUE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) From 6a1047d8c116f793890b63427d53f04ceca95d54 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 21 Aug 2015 22:43:40 +0200 Subject: [PATCH 324/670] Fix wrong android versionName Before, android versionName was set to "...13", which made the f-droid build fail. --- build/android/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/android/Makefile b/build/android/Makefile index 6d3791550..0a55c324c 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -867,7 +867,7 @@ $(ROOT)/jni/src/android_version.h : prep_srcdir fi manifest : - @BASE_VERSION="${VERS_MAJOR}.${VERS_MINOR}.${VERS_PATCH}"; \ + @BASE_VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \ if [ "${NDEBUG}x" != "x" ] ; then \ DBG=''; \ DBG_FLAG="android:debuggable=\"false\""; \ From e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Tue, 7 Apr 2015 06:13:12 -0400 Subject: [PATCH 325/670] Clean up threading * Rename everything. * Strip J prefix. * Change UpperCamelCase functions to lowerCamelCase. * Remove global (!) semaphore count mutex on OSX. * Remove semaphore count getter (unused, unsafe, depended on internal API functions on Windows, and used a hack on OSX). * Add `Atomic`. * Make `Thread` handle thread names. * Add support for C++11 multi-threading. * Combine pthread and win32 sources. * Remove `ThreadStarted` (unused, unneeded). * Move some includes from the headers to the sources. * Move all of `Event` into its header (allows inlining with no new includes). * Make `Event` use `Semaphore` (except on Windows). * Move some porting functions into `Thread`. * Integrate logging with `Thread`. * Add threading test. --- .gitignore | 46 +-- build/android/jni/Android.mk | 15 +- src/CMakeLists.txt | 2 +- src/ban.cpp | 18 +- src/ban.h | 8 +- src/client.cpp | 20 +- src/client.h | 13 +- src/client/clientlauncher.cpp | 6 +- src/client/tile.cpp | 14 +- src/clientiface.cpp | 24 +- src/clientiface.h | 12 +- src/clientmap.cpp | 22 +- src/clientmap.h | 4 +- src/debug.cpp | 14 +- src/emerge.cpp | 41 +- src/emerge.h | 2 +- src/environment.cpp | 12 +- src/environment.h | 6 +- src/httpfetch.cpp | 38 +- src/jthread/CMakeLists.txt | 14 - src/jthread/jevent.h | 59 --- src/jthread/jmutex.h | 79 ---- src/jthread/jmutexautolock.h | 43 --- src/jthread/jthread.h | 117 ------ src/jthread/pthread/jevent.cpp | 67 ---- src/jthread/pthread/jmutex.cpp | 58 --- src/jthread/pthread/jsemaphore.cpp | 156 -------- src/jthread/pthread/jthread.cpp | 168 --------- src/jthread/win32/jevent.cpp | 43 --- src/jthread/win32/jmutex.cpp | 68 ---- src/jthread/win32/jsemaphore.cpp | 104 ----- src/jthread/win32/jthread.cpp | 146 -------- src/log.cpp | 22 +- src/main.cpp | 2 +- src/mapblock.cpp | 2 +- src/mg_decoration.cpp | 6 +- src/mg_decoration.h | 2 +- src/minimap.cpp | 20 +- src/minimap.h | 17 +- src/network/clientpackethandler.cpp | 8 +- src/network/connection.cpp | 128 +++---- src/network/connection.h | 62 +-- src/particles.cpp | 16 +- src/particles.h | 4 +- src/player.cpp | 10 +- src/player.h | 4 +- src/porting.cpp | 124 ------ src/porting.h | 89 ----- src/porting_android.cpp | 17 +- src/profiler.h | 20 +- src/quicktune.cpp | 14 +- src/script/cpp_api/s_async.cpp | 68 ++-- src/script/cpp_api/s_async.h | 27 +- src/script/cpp_api/s_base.h | 6 +- src/script/cpp_api/s_internal.h | 6 +- src/server.cpp | 106 +++--- src/server.h | 4 +- src/settings.cpp | 36 +- src/settings.h | 6 +- src/shader.cpp | 8 +- src/threading/CMakeLists.txt | 6 + src/threading/atomic.h | 96 +++++ src/threading/event.h | 57 +++ src/threading/mutex.cpp | 83 ++++ src/threading/mutex.h | 66 ++++ .../mutex_auto_lock.h} | 44 ++- src/threading/semaphore.cpp | 161 ++++++++ .../jsemaphore.h => threading/semaphore.h} | 48 +-- src/threading/thread.cpp | 354 ++++++++++++++++++ src/threading/thread.h | 119 ++++++ src/threads.h | 6 +- src/unittest/CMakeLists.txt | 1 + src/unittest/test_threading.cpp | 85 +++++ src/util/container.h | 171 +++------ src/util/numeric.cpp | 6 +- src/util/numeric.h | 4 +- src/util/thread.h | 60 ++- 77 files changed, 1594 insertions(+), 2046 deletions(-) delete mode 100644 src/jthread/CMakeLists.txt delete mode 100644 src/jthread/jevent.h delete mode 100644 src/jthread/jmutex.h delete mode 100644 src/jthread/jmutexautolock.h delete mode 100644 src/jthread/jthread.h delete mode 100644 src/jthread/pthread/jevent.cpp delete mode 100644 src/jthread/pthread/jmutex.cpp delete mode 100644 src/jthread/pthread/jsemaphore.cpp delete mode 100644 src/jthread/pthread/jthread.cpp delete mode 100644 src/jthread/win32/jevent.cpp delete mode 100644 src/jthread/win32/jmutex.cpp delete mode 100644 src/jthread/win32/jsemaphore.cpp delete mode 100755 src/jthread/win32/jthread.cpp create mode 100644 src/threading/CMakeLists.txt create mode 100644 src/threading/atomic.h create mode 100644 src/threading/event.h create mode 100644 src/threading/mutex.cpp create mode 100644 src/threading/mutex.h rename src/{jthread/LICENSE.MIT => threading/mutex_auto_lock.h} (52%) create mode 100644 src/threading/semaphore.cpp rename src/{jthread/jsemaphore.h => threading/semaphore.h} (57%) create mode 100644 src/threading/thread.cpp create mode 100644 src/threading/thread.h create mode 100644 src/unittest/test_threading.cpp diff --git a/.gitignore b/.gitignore index 7b2b030af..77b6a2b00 100644 --- a/.gitignore +++ b/.gitignore @@ -36,45 +36,18 @@ doc/html/ doc/doxygen_* ## Build files -CMakeFiles/* -src/CMakeFiles/* -src/Makefile -src/android_version_githash.h -src/android_version.h -src/cmake_config.h -src/cmake_config_githash.h -src/cmake_install.cmake -src/script/CMakeFiles/* -src/script/common/CMakeFiles/* -src/script/cpp_api/CMakeFiles/* -src/script/lua_api/CMakeFiles/* -src/util/CMakeFiles/* -src/unittest/CMakeFiles/* -src/jthread/CMakeFiles/* -src/jthread/Makefile -src/jthread/cmake_config.h -src/jthread/cmake_install.cmake -src/jthread/libjthread.a -src/json/libjson.a -src/lua/build/ -src/lua/CMakeFiles/ -src/cguittfont/CMakeFiles/ -src/cguittfont/libcguittfont.a -src/cguittfont/cmake_install.cmake -src/cguittfont/Makefile -src/gmp/CMakeFiles/ -src/gmp/libgmp.a -src/json/CMakeFiles/ -src/json/libjsoncpp.a -src/sqlite/CMakeFiles/* -src/sqlite/libsqlite3.a -src/client/CMakeFiles/ -src/network/CMakeFiles/ +CMakeFiles +Makefile +!build/android/Makefile +cmake_install.cmake CMakeCache.txt CPackConfig.cmake CPackSourceConfig.cmake -Makefile -cmake_install.cmake +src/android_version.h +src/android_version_githash.h +src/cmake_config.h +src/cmake_config_githash.h +src/lua/build/ locale/ .directory .kdev4/ @@ -82,6 +55,7 @@ locale/ *.kdev4 *.layout *.o +*.a ## Android build files build/android/assets diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 61ba1d0f0..cf7094ca8 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -342,17 +342,16 @@ LOCAL_SRC_FILES += \ jni/src/lua/src/lzio.c \ jni/src/lua/src/print.c -# sqlite +# SQLite3 LOCAL_SRC_FILES += deps/sqlite/sqlite3.c -# jthread -LOCAL_SRC_FILES += \ - jni/src/jthread/pthread/jevent.cpp \ - jni/src/jthread/pthread/jmutex.cpp \ - jni/src/jthread/pthread/jsemaphore.cpp \ - jni/src/jthread/pthread/jthread.cpp +# Threading +LOCAL_SRC_FILES += \ + jni/src/threading/Mutex.cpp \ + jni/src/threading/Semaphore.cpp \ + jni/src/threading/Thread.cpp -# json +# JSONCPP LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 614e81908..2d52de68b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -297,7 +297,7 @@ add_custom_target(GenerateVersion WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") -add_subdirectory(jthread) +add_subdirectory(threading) add_subdirectory(network) add_subdirectory(script) add_subdirectory(unittest) diff --git a/src/ban.cpp b/src/ban.cpp index 7c1a68d45..108319953 100644 --- a/src/ban.cpp +++ b/src/ban.cpp @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "ban.h" #include -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include #include #include "strfnd.h" @@ -48,7 +48,7 @@ BanManager::~BanManager() void BanManager::load() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); infostream<<"BanManager: loading from "<first == ip_or_name || it->second == ip_or_name @@ -110,7 +110,7 @@ std::string BanManager::getBanDescription(const std::string &ip_or_name) std::string BanManager::getBanName(const std::string &ip) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); StringMap::iterator it = m_ips.find(ip); if (it == m_ips.end()) return ""; @@ -119,14 +119,14 @@ std::string BanManager::getBanName(const std::string &ip) void BanManager::add(const std::string &ip, const std::string &name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_ips[ip] = name; m_modified = true; } void BanManager::remove(const std::string &ip_or_name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for (StringMap::iterator it = m_ips.begin(); it != m_ips.end();) { if ((it->first == ip_or_name) || (it->second == ip_or_name)) { m_ips.erase(it++); @@ -140,7 +140,7 @@ void BanManager::remove(const std::string &ip_or_name) bool BanManager::isModified() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return m_modified; } diff --git a/src/ban.h b/src/ban.h index 5db7179de..d1a49cb15 100644 --- a/src/ban.h +++ b/src/ban.h @@ -21,9 +21,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #define BAN_HEADER #include "util/string.h" -#include "jthread/jthread.h" -#include "jthread/jmutex.h" +#include "threading/thread.h" +#include "threading/mutex.h" #include "exceptions.h" +#include +#include class BanManager { @@ -40,7 +42,7 @@ public: void remove(const std::string &ip_or_name); bool isModified(); private: - JMutex m_mutex; + Mutex m_mutex; std::string m_banfilepath; StringMap m_ips; bool m_modified; diff --git a/src/client.cpp b/src/client.cpp index 946f4f1c4..2a253fd75 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "util/auth.h" #include "util/directiontables.h" #include "util/pointedthing.h" @@ -82,7 +82,7 @@ MeshUpdateQueue::MeshUpdateQueue() MeshUpdateQueue::~MeshUpdateQueue() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for(std::vector::iterator i = m_queue.begin(); @@ -102,7 +102,7 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se assert(data); // pre-condition - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); if(urgent) m_urgents.insert(p); @@ -141,7 +141,7 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se // Returns NULL if queue is empty QueuedMeshUpdate *MeshUpdateQueue::pop() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); bool must_be_urgent = !m_urgents.empty(); for(std::vector::iterator @@ -269,7 +269,7 @@ Client::Client( void Client::Stop() { //request all client managed threads to stop - m_mesh_update_thread.Stop(); + m_mesh_update_thread.stop(); // Save local server map if (m_localdb) { infostream << "Local map saving ended." << std::endl; @@ -280,7 +280,7 @@ void Client::Stop() bool Client::isShutdown() { - if (!m_mesh_update_thread.IsRunning()) return true; + if (!m_mesh_update_thread.isRunning()) return true; return false; } @@ -289,8 +289,8 @@ Client::~Client() { m_con.Disconnect(); - m_mesh_update_thread.Stop(); - m_mesh_update_thread.Wait(); + m_mesh_update_thread.stop(); + m_mesh_update_thread.wait(); while (!m_mesh_update_thread.m_queue_out.empty()) { MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx(); delete r.mesh; @@ -1270,7 +1270,7 @@ void Client::sendPlayerPos() u16 our_peer_id; { - //JMutexAutoLock lock(m_con_mutex); //bulk comment-out + //MutexAutoLock lock(m_con_mutex); //bulk comment-out our_peer_id = m_con.GetPeerID(); } @@ -1794,7 +1794,7 @@ void Client::afterContentReceived(IrrlichtDevice *device) // Start mesh update thread after setting up content definitions infostream<<"- Starting mesh update thread"< #include #include @@ -89,14 +89,14 @@ public: u32 size() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return m_queue.size(); } private: std::vector m_queue; std::set m_urgents; - JMutex m_mutex; + Mutex m_mutex; }; struct MeshUpdateResult @@ -119,19 +119,14 @@ private: MeshUpdateQueue m_queue_in; protected: - const char *getName() - { return "MeshUpdateThread"; } virtual void doUpdate(); public: - MeshUpdateThread() - { - } + MeshUpdateThread() : UpdateThread("Mesh") {} void enqueueUpdate(v3s16 p, MeshMakeData *data, bool ack_block_to_server, bool urgent); - MutexedQueue m_queue_out; v3s16 m_camera_offset; diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index bad5c384c..60eb21674 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -651,14 +651,14 @@ void ClientLauncher::speed_tests() infostream << "Around 5000/ms should do well here." << std::endl; TimeTaker timer("Testing mutex speed"); - JMutex m; + Mutex m; u32 n = 0; u32 i = 0; do { n += 10000; for (; i < n; i++) { - m.Lock(); - m.Unlock(); + m.lock(); + m.unlock(); } } // Do at least 10ms diff --git a/src/client/tile.cpp b/src/client/tile.cpp index a28b40c65..1f1e9d38c 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -414,7 +414,7 @@ private: // Maps a texture name to an index in the former. std::map m_name_to_id; // The two former containers are behind this mutex - JMutex m_textureinfo_cache_mutex; + Mutex m_textureinfo_cache_mutex; // Queued texture fetches (to be processed by the main thread) RequestQueue m_get_texture_queue; @@ -490,7 +490,7 @@ u32 TextureSource::getTextureId(const std::string &name) /* See if texture already exists */ - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); std::map::iterator n; n = m_name_to_id.find(name); if (n != m_name_to_id.end()) @@ -593,7 +593,7 @@ u32 TextureSource::generateTexture(const std::string &name) /* See if texture already exists */ - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); std::map::iterator n; n = m_name_to_id.find(name); if (n != m_name_to_id.end()) { @@ -631,7 +631,7 @@ u32 TextureSource::generateTexture(const std::string &name) Add texture to caches (add NULL textures too) */ - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); u32 id = m_textureinfo_cache.size(); TextureInfo ti(name, tex); @@ -643,7 +643,7 @@ u32 TextureSource::generateTexture(const std::string &name) std::string TextureSource::getTextureName(u32 id) { - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); if (id >= m_textureinfo_cache.size()) { @@ -658,7 +658,7 @@ std::string TextureSource::getTextureName(u32 id) video::ITexture* TextureSource::getTexture(u32 id) { - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); if (id >= m_textureinfo_cache.size()) return NULL; @@ -712,7 +712,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im void TextureSource::rebuildImagesAndTextures() { - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); video::IVideoDriver* driver = m_device->getVideoDriver(); sanity_check(driver); diff --git a/src/clientiface.cpp b/src/clientiface.cpp index 3330e0af9..d4efe60ef 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -593,7 +593,7 @@ ClientInterface::~ClientInterface() Delete clients */ { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); for(std::map::iterator i = m_clients.begin(); @@ -609,7 +609,7 @@ ClientInterface::~ClientInterface() std::vector ClientInterface::getClientIDs(ClientState min_state) { std::vector reply; - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); for(std::map::iterator i = m_clients.begin(); @@ -660,7 +660,7 @@ void ClientInterface::UpdatePlayerList() infostream << "* " << player->getName() << "\t"; { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); RemoteClient* client = lockedGetClientNoEx(*i); if(client != NULL) client->PrintInfo(infostream); @@ -680,7 +680,7 @@ void ClientInterface::send(u16 peer_id, u8 channelnum, void ClientInterface::sendToAll(u16 channelnum, NetworkPacket* pkt, bool reliable) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); for(std::map::iterator i = m_clients.begin(); i != m_clients.end(); ++i) { @@ -694,7 +694,7 @@ void ClientInterface::sendToAll(u16 channelnum, RemoteClient* ClientInterface::getClientNoEx(u16 peer_id, ClientState state_min) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); std::map::iterator n; n = m_clients.find(peer_id); // The client may not exist; clients are immediately removed if their @@ -725,7 +725,7 @@ RemoteClient* ClientInterface::lockedGetClientNoEx(u16 peer_id, ClientState stat ClientState ClientInterface::getClientState(u16 peer_id) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); std::map::iterator n; n = m_clients.find(peer_id); // The client may not exist; clients are immediately removed if their @@ -738,7 +738,7 @@ ClientState ClientInterface::getClientState(u16 peer_id) void ClientInterface::setPlayerName(u16 peer_id,std::string name) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); std::map::iterator n; n = m_clients.find(peer_id); // The client may not exist; clients are immediately removed if their @@ -749,7 +749,7 @@ void ClientInterface::setPlayerName(u16 peer_id,std::string name) void ClientInterface::DeleteClient(u16 peer_id) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; @@ -784,7 +784,7 @@ void ClientInterface::DeleteClient(u16 peer_id) void ClientInterface::CreateClient(u16 peer_id) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; @@ -801,7 +801,7 @@ void ClientInterface::CreateClient(u16 peer_id) void ClientInterface::event(u16 peer_id, ClientStateEvent event) { { - JMutexAutoLock clientlock(m_clients_mutex); + MutexAutoLock clientlock(m_clients_mutex); // Error check std::map::iterator n; @@ -823,7 +823,7 @@ void ClientInterface::event(u16 peer_id, ClientStateEvent event) u16 ClientInterface::getProtocolVersion(u16 peer_id) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; @@ -838,7 +838,7 @@ u16 ClientInterface::getProtocolVersion(u16 peer_id) void ClientInterface::setClientVersion(u16 peer_id, u8 major, u8 minor, u8 patch, std::string full) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; diff --git a/src/clientiface.h b/src/clientiface.h index f6c4294e2..9be8bda61 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "serialization.h" // for SER_FMT_VER_INVALID -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include "network/networkpacket.h" #include @@ -487,10 +487,8 @@ public: protected: //TODO find way to avoid this functions - void Lock() - { m_clients_mutex.Lock(); } - void Unlock() - { m_clients_mutex.Unlock(); } + void lock() { m_clients_mutex.lock(); } + void unlock() { m_clients_mutex.unlock(); } std::map& getClientList() { return m_clients; } @@ -501,14 +499,14 @@ private: // Connection con::Connection* m_con; - JMutex m_clients_mutex; + Mutex m_clients_mutex; // Connected clients (behind the con mutex) std::map m_clients; std::vector m_clients_names; //for announcing masterserver // Environment ServerEnvironment *m_env; - JMutex m_env_mutex; + Mutex m_env_mutex; float m_print_info_timer; diff --git a/src/clientmap.cpp b/src/clientmap.cpp index 288a12135..b890e338b 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -70,7 +70,7 @@ ClientMap::ClientMap( ClientMap::~ClientMap() { - /*JMutexAutoLock lock(mesh_mutex); + /*MutexAutoLock lock(mesh_mutex); if(mesh != NULL) { @@ -94,7 +94,7 @@ MapSector * ClientMap::emergeSector(v2s16 p2d) ClientMapSector *sector = new ClientMapSector(this, p2d, m_gamedef); { - //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out + //MutexAutoLock lock(m_sector_mutex); // Bulk comment-out m_sectors[p2d] = sector; } @@ -157,12 +157,12 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) } m_drawlist.clear(); - m_camera_mutex.Lock(); + m_camera_mutex.lock(); v3f camera_position = m_camera_position; v3f camera_direction = m_camera_direction; f32 camera_fov = m_camera_fov; //v3s16 camera_offset = m_camera_offset; - m_camera_mutex.Unlock(); + m_camera_mutex.unlock(); // Use a higher fov to accomodate faster camera movements. // Blocks are cropped better when they are drawn. @@ -263,7 +263,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) Ignore if mesh doesn't exist */ { - //JMutexAutoLock lock(block->mesh_mutex); + //MutexAutoLock lock(block->mesh_mutex); if(block->mesh == NULL){ blocks_in_range_without_mesh++; @@ -433,11 +433,11 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) int crack = m_client->getCrackLevel(); u32 daynight_ratio = m_client->getEnv().getDayNightRatio(); - m_camera_mutex.Lock(); + m_camera_mutex.lock(); v3f camera_position = m_camera_position; v3f camera_direction = m_camera_direction; f32 camera_fov = m_camera_fov; - m_camera_mutex.Unlock(); + m_camera_mutex.unlock(); /* Get all blocks and draw all visible ones @@ -504,7 +504,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) // Mesh animation { - //JMutexAutoLock lock(block->mesh_mutex); + //MutexAutoLock lock(block->mesh_mutex); MapBlockMesh *mapBlockMesh = block->mesh; assert(mapBlockMesh); // Pretty random but this should work somewhat nicely @@ -534,7 +534,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) Get the meshbuffers of the block */ { - //JMutexAutoLock lock(block->mesh_mutex); + //MutexAutoLock lock(block->mesh_mutex); MapBlockMesh *mapBlockMesh = block->mesh; assert(mapBlockMesh); @@ -799,9 +799,9 @@ void ClientMap::renderPostFx(CameraMode cam_mode) // Sadly ISceneManager has no "post effects" render pass, in that case we // could just register for that and handle it in renderMap(). - m_camera_mutex.Lock(); + m_camera_mutex.lock(); v3f camera_position = m_camera_position; - m_camera_mutex.Unlock(); + m_camera_mutex.unlock(); MapNode n = getNodeNoEx(floatToInt(camera_position, BS)); diff --git a/src/clientmap.h b/src/clientmap.h index 492e23fa5..54d1dc96d 100644 --- a/src/clientmap.h +++ b/src/clientmap.h @@ -89,7 +89,7 @@ public: void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset) { - JMutexAutoLock lock(m_camera_mutex); + MutexAutoLock lock(m_camera_mutex); m_camera_position = pos; m_camera_direction = dir; m_camera_fov = fov; @@ -149,7 +149,7 @@ private: v3f m_camera_direction; f32 m_camera_fov; v3s16 m_camera_offset; - JMutex m_camera_mutex; + Mutex m_camera_mutex; std::map m_drawlist; diff --git a/src/debug.cpp b/src/debug.cpp index ae2ffadc3..3608f42d2 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -26,8 +26,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "config.h" #ifdef _MSC_VER @@ -229,7 +229,7 @@ void DebugStack::print(std::ostream &os, bool everything) } std::map g_debug_stacks; -JMutex g_debug_stacks_mutex; +Mutex g_debug_stacks_mutex; void debug_stacks_init() { @@ -237,7 +237,7 @@ void debug_stacks_init() void debug_stacks_print_to(std::ostream &os) { - JMutexAutoLock lock(g_debug_stacks_mutex); + MutexAutoLock lock(g_debug_stacks_mutex); os<<"Debug stacks:"<::iterator n; n = g_debug_stacks.find(threadid); @@ -307,7 +307,7 @@ DebugStacker::DebugStacker(const char *text) DebugStacker::~DebugStacker() { - JMutexAutoLock lock(g_debug_stacks_mutex); + MutexAutoLock lock(g_debug_stacks_mutex); if(m_overflowed == true) return; diff --git a/src/emerge.cpp b/src/emerge.cpp index d6bda731a..084470783 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server.h" #include #include -#include "jthread/jevent.h" +#include "threading/event.h" #include "map.h" #include "environment.h" #include "util/container.h" @@ -59,7 +59,7 @@ MapgenDesc reg_mapgens[] = { {"singlenode", new MapgenFactorySinglenode}, }; -class EmergeThread : public JThread +class EmergeThread : public Thread { public: Server *m_server; @@ -73,7 +73,6 @@ public: std::queue blockqueue; EmergeThread(Server *server, int ethreadid): - JThread(), m_server(server), map(NULL), emerge(NULL), @@ -81,9 +80,10 @@ public: enable_mapgen_debug_info(false), id(ethreadid) { + name = "Emerge-" + itos(id); } - void *Thread(); + void *run(); bool popBlockEmerge(v3s16 *pos, u8 *flags); bool getBlockOrStartGen(v3s16 p, MapBlock **b, BlockMakeData *data, bool allow_generate); @@ -112,7 +112,7 @@ EmergeManager::EmergeManager(IGameDef *gamedef) // some other misc thread s16 nthreads = 0; if (!g_settings->getS16NoEx("num_emerge_threads", nthreads)) - nthreads = porting::getNumberOfProcessors() - 2; + nthreads = Thread::getNumberOfProcessors() - 2; if (nthreads < 1) nthreads = 1; @@ -141,9 +141,9 @@ EmergeManager::~EmergeManager() { for (u32 i = 0; i != emergethread.size(); i++) { if (threads_active) { - emergethread[i]->Stop(); + emergethread[i]->stop(); emergethread[i]->qevent.signal(); - emergethread[i]->Wait(); + emergethread[i]->wait(); } delete emergethread[i]; delete mapgen[i]; @@ -196,7 +196,7 @@ void EmergeManager::initMapgens() Mapgen *EmergeManager::getCurrentMapgen() { for (u32 i = 0; i != emergethread.size(); i++) { - if (emergethread[i]->IsSameThread()) + if (emergethread[i]->isSameThread()) return emergethread[i]->mapgen; } @@ -210,7 +210,7 @@ void EmergeManager::startThreads() return; for (u32 i = 0; i != emergethread.size(); i++) - emergethread[i]->Start(); + emergethread[i]->start(); threads_active = true; } @@ -223,13 +223,13 @@ void EmergeManager::stopThreads() // Request thread stop in parallel for (u32 i = 0; i != emergethread.size(); i++) { - emergethread[i]->Stop(); + emergethread[i]->stop(); emergethread[i]->qevent.signal(); } // Then do the waiting for each for (u32 i = 0; i != emergethread.size(); i++) - emergethread[i]->Wait(); + emergethread[i]->wait(); threads_active = false; } @@ -247,7 +247,7 @@ bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate flags |= BLOCK_EMERGE_ALLOWGEN; { - JMutexAutoLock queuelock(queuemutex); + MutexAutoLock queuelock(queuemutex); count = blocks_enqueued.size(); if (count >= qlimit_total) @@ -360,7 +360,7 @@ MapgenSpecificParams *EmergeManager::createMapgenParams(const std::string &mgnam bool EmergeThread::popBlockEmerge(v3s16 *pos, u8 *flags) { std::map::iterator iter; - JMutexAutoLock queuelock(emerge->queuemutex); + MutexAutoLock queuelock(emerge->queuemutex); if (blockqueue.empty()) return false; @@ -390,7 +390,7 @@ bool EmergeThread::getBlockOrStartGen(v3s16 p, MapBlock **b, { v2s16 p2d(p.X, p.Z); //envlock: usually takes <=1ms, sometimes 90ms or ~400ms to acquire - JMutexAutoLock envlock(m_server->m_env_mutex); + MutexAutoLock envlock(m_server->m_env_mutex); // Load sector if it isn't loaded if (map->getSectorNoGenerateNoEx(p2d) == NULL) @@ -418,10 +418,8 @@ bool EmergeThread::getBlockOrStartGen(v3s16 p, MapBlock **b, } -void *EmergeThread::Thread() +void *EmergeThread::run() { - ThreadStarted(); - log_register_thread("EmergeThread" + itos(id)); DSTACK(__FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER @@ -434,9 +432,7 @@ void *EmergeThread::Thread() mapgen = emerge->mapgen[id]; enable_mapgen_debug_info = emerge->mapgen_debug_info; - porting::setThreadName("EmergeThread"); - - while (!StopRequested()) + while (!stopRequested()) try { if (!popBlockEmerge(&p, &flags)) { qevent.wait(); @@ -471,7 +467,7 @@ void *EmergeThread::Thread() { //envlock: usually 0ms, but can take either 30 or 400ms to acquire - JMutexAutoLock envlock(m_server->m_env_mutex); + MutexAutoLock envlock(m_server->m_env_mutex); ScopeProfiler sp(g_profiler, "EmergeThread: after " "Mapgen::makeChunk (envlock)", SPT_AVG); @@ -538,7 +534,7 @@ void *EmergeThread::Thread() } { - JMutexAutoLock queuelock(emerge->queuemutex); + MutexAutoLock queuelock(emerge->queuemutex); while (!blockqueue.empty()) { v3s16 p = blockqueue.front(); @@ -555,6 +551,5 @@ void *EmergeThread::Thread() } END_DEBUG_EXCEPTION_HANDLER(errorstream) - log_deregister_thread(); return NULL; } diff --git a/src/emerge.h b/src/emerge.h index 1653199ec..2ed21bb06 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -86,7 +86,7 @@ public: std::set gen_notify_on_deco_ids; //// Block emerge queue data structures - JMutex queuemutex; + Mutex queuemutex; std::map blocks_enqueued; std::map peer_queue_count; diff --git a/src/environment.cpp b/src/environment.cpp index dbbfc6f1f..baeb3a3c6 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -44,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "map.h" #include "emerge.h" #include "util/serialize.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" @@ -204,34 +204,34 @@ u32 Environment::getDayNightRatio() void Environment::setTimeOfDaySpeed(float speed) { - JMutexAutoLock(this->m_timeofday_lock); + MutexAutoLock(this->m_timeofday_lock); m_time_of_day_speed = speed; } float Environment::getTimeOfDaySpeed() { - JMutexAutoLock(this->m_timeofday_lock); + MutexAutoLock(this->m_timeofday_lock); float retval = m_time_of_day_speed; return retval; } void Environment::setTimeOfDay(u32 time) { - JMutexAutoLock(this->m_time_lock); + MutexAutoLock(this->m_time_lock); m_time_of_day = time; m_time_of_day_f = (float)time / 24000.0; } u32 Environment::getTimeOfDay() { - JMutexAutoLock(this->m_time_lock); + MutexAutoLock(this->m_time_lock); u32 retval = m_time_of_day; return retval; } float Environment::getTimeOfDayF() { - JMutexAutoLock(this->m_time_lock); + MutexAutoLock(this->m_time_lock); float retval = m_time_of_day_f; return retval; } diff --git a/src/environment.h b/src/environment.h index c70694316..6ace12671 100644 --- a/src/environment.h +++ b/src/environment.h @@ -39,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" #include "mapnode.h" #include "mapblock.h" -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include "network/networkprotocol.h" // for AccessDeniedCode class ServerEnvironment; @@ -127,8 +127,8 @@ protected: bool m_cache_enable_shaders; private: - JMutex m_timeofday_lock; - JMutex m_time_lock; + Mutex m_timeofday_lock; + Mutex m_time_lock; }; diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 56cdad2b1..6040b1b3b 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "jthread/jevent.h" +#include "threading/event.h" #include "config.h" #include "exceptions.h" #include "debug.h" @@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "version.h" #include "settings.h" -JMutex g_httpfetch_mutex; +Mutex g_httpfetch_mutex; std::map > g_httpfetch_results; HTTPFetchRequest::HTTPFetchRequest() @@ -55,7 +55,7 @@ static void httpfetch_deliver_result(const HTTPFetchResult &fetch_result) { unsigned long caller = fetch_result.caller; if (caller != HTTPFETCH_DISCARD) { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); g_httpfetch_results[caller].push(fetch_result); } } @@ -64,7 +64,7 @@ static void httpfetch_request_clear(unsigned long caller); unsigned long httpfetch_caller_alloc() { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); // Check each caller ID except HTTPFETCH_DISCARD const unsigned long discard = HTTPFETCH_DISCARD; @@ -91,14 +91,14 @@ void httpfetch_caller_free(unsigned long caller) httpfetch_request_clear(caller); if (caller != HTTPFETCH_DISCARD) { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); g_httpfetch_results.erase(caller); } } bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result) { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); // Check that caller exists std::map >::iterator @@ -390,7 +390,7 @@ HTTPFetchOngoing::~HTTPFetchOngoing() } -class CurlFetchThread : public JThread +class CurlFetchThread : public Thread { protected: enum RequestType { @@ -414,7 +414,8 @@ protected: std::list m_queued_fetches; public: - CurlFetchThread(int parallel_limit) + CurlFetchThread(int parallel_limit) : + Thread("CurlFetch") { if (parallel_limit >= 1) m_parallel_limit = parallel_limit; @@ -613,14 +614,10 @@ protected: } } - void * Thread() + void *run() { - ThreadStarted(); - log_register_thread("CurlFetchThread"); DSTACK(__FUNCTION_NAME); - porting::setThreadName("CurlFetchThread"); - CurlHandlePool pool; m_multi = curl_multi_init(); @@ -631,7 +628,7 @@ protected: FATAL_ERROR_IF(!m_all_ongoing.empty(), "Expected empty"); - while (!StopRequested()) { + while (!stopRequested()) { BEGIN_DEBUG_EXCEPTION_HANDLER /* @@ -719,9 +716,9 @@ void httpfetch_cleanup() { verbosestream<<"httpfetch_cleanup: cleaning up"<Stop(); + g_httpfetch_thread->stop(); g_httpfetch_thread->requestWakeUp(); - g_httpfetch_thread->Wait(); + g_httpfetch_thread->wait(); delete g_httpfetch_thread; curl_global_cleanup(); @@ -730,18 +727,17 @@ void httpfetch_cleanup() void httpfetch_async(const HTTPFetchRequest &fetch_request) { g_httpfetch_thread->requestFetch(fetch_request); - if (!g_httpfetch_thread->IsRunning()) - g_httpfetch_thread->Start(); + if (!g_httpfetch_thread->isRunning()) + g_httpfetch_thread->start(); } static void httpfetch_request_clear(unsigned long caller) { - if (g_httpfetch_thread->IsRunning()) { + if (g_httpfetch_thread->isRunning()) { Event event; g_httpfetch_thread->requestClear(caller, &event); event.wait(); - } - else { + } else { g_httpfetch_thread->requestClear(caller, NULL); } } diff --git a/src/jthread/CMakeLists.txt b/src/jthread/CMakeLists.txt deleted file mode 100644 index cebb35caa..000000000 --- a/src/jthread/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -if(UNIX) - set(THREAD_SYS_DIR pthread) -else() - set(THREAD_SYS_DIR win32) -endif() - -set(SRC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/${THREAD_SYS_DIR}) -set(JTHREAD_SRCS - ${SRC_PREFIX}/jmutex.cpp - ${SRC_PREFIX}/jthread.cpp - ${SRC_PREFIX}/jsemaphore.cpp - ${SRC_PREFIX}/jevent.cpp - PARENT_SCOPE) - diff --git a/src/jthread/jevent.h b/src/jthread/jevent.h deleted file mode 100644 index 9ea7ebde8..000000000 --- a/src/jthread/jevent.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JEVENT_H_ -#define JEVENT_H_ - -#ifdef _WIN32 -#include -#elif defined(__MACH__) && defined(__APPLE__) -#include -#include -#include -#include -#else -#include -#endif - - -class Event { -#ifdef _WIN32 - HANDLE hEvent; -#elif defined(__MACH__) && defined(__APPLE__) - semaphore_t sem; -#else - sem_t sem; -#endif - -public: - Event(); - ~Event(); - void wait(); - void signal(); -}; - -#endif /* JEVENT_H_ */ diff --git a/src/jthread/jmutex.h b/src/jthread/jmutex.h deleted file mode 100644 index e57cd8a43..000000000 --- a/src/jthread/jmutex.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JMUTEX_H - -#define JMUTEX_H - -#if (defined(WIN32) || defined(_WIN32_WCE)) - #ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 - #endif - #ifndef _WIN32_WCE - #include - #endif // _WIN32_WCE - #include - #include - // CriticalSection is way faster than the alternative - #define JMUTEX_CRITICALSECTION -#else // using pthread - #include -#endif // WIN32 - -#define ERR_JMUTEX_ALREADYINIT -1 -#define ERR_JMUTEX_NOTINIT -2 -#define ERR_JMUTEX_CANTCREATEMUTEX -3 - -class JMutex -{ -public: - JMutex(); - ~JMutex(); - int Lock(); - int Unlock(); - -private: -#if (defined(WIN32) || defined(_WIN32_WCE)) -#ifdef JMUTEX_CRITICALSECTION - CRITICAL_SECTION mutex; -#else // Use standard mutex - HANDLE mutex; -#endif // JMUTEX_CRITICALSECTION -#else // pthread mutex - pthread_mutex_t mutex; - - bool IsLocked() { - if (pthread_mutex_trylock(&mutex)) { - pthread_mutex_unlock(&mutex); - return true; - } - return false; - } -#endif // WIN32 -}; - -#endif // JMUTEX_H diff --git a/src/jthread/jmutexautolock.h b/src/jthread/jmutexautolock.h deleted file mode 100644 index 6020a5c33..000000000 --- a/src/jthread/jmutexautolock.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JMUTEXAUTOLOCK_H - -#define JMUTEXAUTOLOCK_H - -#include "jmutex.h" - -class JMutexAutoLock -{ -public: - JMutexAutoLock(JMutex &m) : mutex(m) { mutex.Lock(); } - ~JMutexAutoLock() { mutex.Unlock(); } -private: - JMutex &mutex; -}; - -#endif // JMUTEXAUTOLOCK_H diff --git a/src/jthread/jthread.h b/src/jthread/jthread.h deleted file mode 100644 index 89743a3e3..000000000 --- a/src/jthread/jthread.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JTHREAD_H -#define JTHREAD_H - -#if __cplusplus >= 201103L -#include -#endif - -#include "jthread/jmutex.h" - -#define ERR_JTHREAD_CANTINITMUTEX -1 -#define ERR_JTHREAD_CANTSTARTTHREAD -2 -#define ERR_JTHREAD_THREADFUNCNOTSET -3 -#define ERR_JTHREAD_NOTRUNNING -4 -#define ERR_JTHREAD_ALREADYRUNNING -5 - -class JThread -{ -public: - JThread(); - virtual ~JThread(); - int Start(); - inline void Stop() - { requeststop = true; } - int Kill(); - virtual void *Thread() = 0; - inline bool IsRunning() - { return running; } - inline bool StopRequested() - { return requeststop; } - void *GetReturnValue(); - bool IsSameThread(); - - /* - * Wait for thread to finish - * Note: this does not stop a thread you have to do this on your own - * WARNING: never ever call this on a thread not started or already killed! - */ - void Wait(); -protected: - void ThreadStarted(); -private: - -#if (defined(WIN32) || defined(_WIN32_WCE)) -#ifdef _WIN32_WCE - DWORD threadid; - static DWORD WINAPI TheThread(void *param); -#else - static UINT __stdcall TheThread(void *param); - UINT threadid; -#endif // _WIN32_WCE - HANDLE threadhandle; -#else // pthread type threads - static void *TheThread(void *param); - - pthread_t threadid; - - /* - * reading and writing bool values is atomic on all relevant architectures - * ( x86 + arm ). No need to waste time for locking here. - * once C++11 is supported we can tell compiler to handle cpu caches correct - * too. This should cause additional improvement (and silence thread - * concurrency check tools. - */ -#if __cplusplus >= 201103L - std::atomic_bool started; -#else - bool started; -#endif -#endif // WIN32 - void *retval; - /* - * reading and writing bool values is atomic on all relevant architectures - * ( x86 + arm ). No need to waste time for locking here. - * once C++11 is supported we can tell compiler to handle cpu caches correct - * too. This should cause additional improvement (and silence thread - * concurrency check tools. - */ -#if __cplusplus >= 201103L - std::atomic_bool running; - std::atomic_bool requeststop; -#else - bool running; - bool requeststop; -#endif - - JMutex continuemutex,continuemutex2; -}; - -#endif // JTHREAD_H - diff --git a/src/jthread/pthread/jevent.cpp b/src/jthread/pthread/jevent.cpp deleted file mode 100644 index e1d40f4c1..000000000 --- a/src/jthread/pthread/jevent.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include -#include "jthread/jevent.h" - -#define UNUSED(expr) do { (void)(expr); } while (0) - -#if defined(__MACH__) && defined(__APPLE__) -#undef sem_t -#define sem_t semaphore_t -#undef sem_init -#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c)) -#undef sem_wait -#define sem_wait(s) semaphore_wait(*(s)) -#undef sem_post -#define sem_post(s) semaphore_signal(*(s)) -#undef sem_destroy -#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s)) -#endif - -Event::Event() { - int sem_init_retval = sem_init(&sem, 0, 0); - assert(sem_init_retval == 0); - UNUSED(sem_init_retval); -} - -Event::~Event() { - int sem_destroy_retval = sem_destroy(&sem); - assert(sem_destroy_retval == 0); - UNUSED(sem_destroy_retval); -} - -void Event::wait() { - int sem_wait_retval = sem_wait(&sem); - assert(sem_wait_retval == 0); - UNUSED(sem_wait_retval); -} - -void Event::signal() { - int sem_post_retval = sem_post(&sem); - assert(sem_post_retval == 0); - UNUSED(sem_post_retval); -} diff --git a/src/jthread/pthread/jmutex.cpp b/src/jthread/pthread/jmutex.cpp deleted file mode 100644 index 0551b9728..000000000 --- a/src/jthread/pthread/jmutex.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include -#include "jthread/jmutex.h" -#define UNUSED(expr) do { (void)(expr); } while (0) -JMutex::JMutex() -{ - int mutex_init_retval = pthread_mutex_init(&mutex,NULL); - assert( mutex_init_retval == 0 ); - UNUSED(mutex_init_retval); -} - -JMutex::~JMutex() -{ - int mutex_dextroy_retval = pthread_mutex_destroy(&mutex); - assert( mutex_dextroy_retval == 0 ); - UNUSED(mutex_dextroy_retval); -} - -int JMutex::Lock() -{ - int mutex_lock_retval = pthread_mutex_lock(&mutex); - assert( mutex_lock_retval == 0 ); - return mutex_lock_retval; - UNUSED(mutex_lock_retval); -} - -int JMutex::Unlock() -{ - int mutex_unlock_retval = pthread_mutex_unlock(&mutex); - assert( mutex_unlock_retval == 0 ); - return mutex_unlock_retval; - UNUSED(mutex_unlock_retval); -} diff --git a/src/jthread/pthread/jsemaphore.cpp b/src/jthread/pthread/jsemaphore.cpp deleted file mode 100644 index 15281ba64..000000000 --- a/src/jthread/pthread/jsemaphore.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* -Minetest -Copyright (C) 2013 sapier, < sapier AT gmx DOT net > - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ -#include -#include -#include -#include "jthread/jsemaphore.h" -#if defined(__MACH__) && defined(__APPLE__) -#include -#endif - -#define UNUSED(expr) do { (void)(expr); } while (0) - -#if defined(__MACH__) && defined(__APPLE__) -#undef sem_t -#undef sem_init -#undef sem_wait -#undef sem_post -#undef sem_destroy -#define sem_t semaphore_t -#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c)) -#define sem_wait(s) semaphore_wait(*(s)) -#define sem_post(s) semaphore_signal(*(s)) -#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s)) -pthread_mutex_t semcount_mutex; -#endif - -JSemaphore::JSemaphore() { - int sem_init_retval = sem_init(&m_semaphore,0,0); - assert(sem_init_retval == 0); - UNUSED(sem_init_retval); -#if defined(__MACH__) && defined(__APPLE__) - semcount = 0; -#endif -} - -JSemaphore::~JSemaphore() { - int sem_destroy_retval = sem_destroy(&m_semaphore); -#ifdef __ANDROID__ -// WORKAROUND for broken bionic semaphore implementation! - assert( - (sem_destroy_retval == 0) || - (errno == EBUSY) - ); -#else - assert(sem_destroy_retval == 0); -#endif - UNUSED(sem_destroy_retval); -} - -JSemaphore::JSemaphore(int initval) { - int sem_init_retval = sem_init(&m_semaphore,0,initval); - assert(sem_init_retval == 0); - UNUSED(sem_init_retval); -} - -void JSemaphore::Post() { - int sem_post_retval = sem_post(&m_semaphore); - assert(sem_post_retval == 0); - UNUSED(sem_post_retval); -#if defined(__MACH__) && defined(__APPLE__) - pthread_mutex_lock(&semcount_mutex); - semcount++; - pthread_mutex_unlock(&semcount_mutex); -#endif -} - -void JSemaphore::Wait() { - int sem_wait_retval = sem_wait(&m_semaphore); - assert(sem_wait_retval == 0); - UNUSED(sem_wait_retval); -#if defined(__MACH__) && defined(__APPLE__) - pthread_mutex_lock(&semcount_mutex); - semcount--; - pthread_mutex_unlock(&semcount_mutex); -#endif -} - -bool JSemaphore::Wait(unsigned int time_ms) { -#if defined(__MACH__) && defined(__APPLE__) - mach_timespec_t waittime; - waittime.tv_sec = time_ms / 1000; - waittime.tv_nsec = 1000000 * (time_ms % 1000); -#else - struct timespec waittime; -#endif - struct timeval now; - - if (gettimeofday(&now, NULL) == -1) { - assert("Unable to get time by clock_gettime!" == 0); - return false; - } - -#if !(defined(__MACH__) && defined(__APPLE__)) - waittime.tv_nsec = ((time_ms % 1000) * 1000 * 1000) + (now.tv_usec * 1000); - waittime.tv_sec = (time_ms / 1000) + (waittime.tv_nsec / (1000*1000*1000)) + now.tv_sec; - waittime.tv_nsec %= 1000*1000*1000; -#endif - - errno = 0; -#if defined(__MACH__) && defined(__APPLE__) - int sem_wait_retval = semaphore_timedwait(m_semaphore, waittime); - if (sem_wait_retval == KERN_OPERATION_TIMED_OUT) { - errno = ETIMEDOUT; - } else if (sem_wait_retval == KERN_ABORTED) { - errno = EINTR; - } else if (sem_wait_retval != 0) { - errno = EINVAL; - } -#else - int sem_wait_retval = sem_timedwait(&m_semaphore, &waittime); -#endif - - if (sem_wait_retval == 0) - { -#if defined(__MACH__) && defined(__APPLE__) - pthread_mutex_lock(&semcount_mutex); - semcount--; - pthread_mutex_unlock(&semcount_mutex); -#endif - return true; - } - else { - assert((errno == ETIMEDOUT) || (errno == EINTR)); - return false; - } - return sem_wait_retval == 0 ? true : false; -} - -int JSemaphore::GetValue() { - int retval = 0; -#if defined(__MACH__) && defined(__APPLE__) - pthread_mutex_lock(&semcount_mutex); - retval = semcount; - pthread_mutex_unlock(&semcount_mutex); -#else - sem_getvalue(&m_semaphore, &retval); -#endif - return retval; -} - diff --git a/src/jthread/pthread/jthread.cpp b/src/jthread/pthread/jthread.cpp deleted file mode 100644 index 414d8fde5..000000000 --- a/src/jthread/pthread/jthread.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#include "jthread/jthread.h" -#include -#include -#include -#include - -#define UNUSED(expr) do { (void)(expr); } while (0) - -JThread::JThread() -{ - retval = NULL; - requeststop = false; - running = false; - started = false; -} - -JThread::~JThread() -{ - Kill(); -} - -void JThread::Wait() { - void* status; - if (started) { - int pthread_join_retval = pthread_join(threadid,&status); - assert(pthread_join_retval == 0); - UNUSED(pthread_join_retval); - started = false; - } -} - -int JThread::Start() -{ - int status; - - if (running) - { - return ERR_JTHREAD_ALREADYRUNNING; - } - requeststop = false; - - pthread_attr_t attr; - pthread_attr_init(&attr); - //pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); - - continuemutex.Lock(); - status = pthread_create(&threadid,&attr,TheThread,this); - pthread_attr_destroy(&attr); - if (status != 0) - { - continuemutex.Unlock(); - return ERR_JTHREAD_CANTSTARTTHREAD; - } - - /* Wait until 'running' is set */ - - while (!running) - { - struct timespec req,rem; - - req.tv_sec = 0; - req.tv_nsec = 1000000; - nanosleep(&req,&rem); - } - started = true; - - continuemutex.Unlock(); - - continuemutex2.Lock(); - continuemutex2.Unlock(); - return 0; -} - -int JThread::Kill() -{ - void* status; - if (!running) - { - if (started) { - int pthread_join_retval = pthread_join(threadid,&status); - assert(pthread_join_retval == 0); - UNUSED(pthread_join_retval); - started = false; - } - return ERR_JTHREAD_NOTRUNNING; - } -#ifdef __ANDROID__ - pthread_kill(threadid, SIGKILL); -#else - pthread_cancel(threadid); -#endif - if (started) { - int pthread_join_retval = pthread_join(threadid,&status); - assert(pthread_join_retval == 0); - UNUSED(pthread_join_retval); - started = false; - } - running = false; - return 0; -} - -void *JThread::GetReturnValue() -{ - void *val; - - if (running) { - val = NULL; - } else { - val = retval; - } - - return val; -} - -bool JThread::IsSameThread() -{ - return pthread_equal(pthread_self(), threadid); -} - -void *JThread::TheThread(void *param) -{ - JThread *jthread = (JThread *)param; - - jthread->continuemutex2.Lock(); - jthread->running = true; - - jthread->continuemutex.Lock(); - jthread->continuemutex.Unlock(); - - jthread->Thread(); - - jthread->running = false; - - return NULL; -} - -void JThread::ThreadStarted() -{ - continuemutex2.Unlock(); -} - diff --git a/src/jthread/win32/jevent.cpp b/src/jthread/win32/jevent.cpp deleted file mode 100644 index 67b468f01..000000000 --- a/src/jthread/win32/jevent.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include "jthread/jevent.h" - -Event::Event() { - hEvent = CreateEvent(NULL, 0, 0, NULL); -} - -Event::~Event() { - CloseHandle(hEvent); -} - -void Event::wait() { - WaitForSingleObject(hEvent, INFINITE); -} - -void Event::signal() { - SetEvent(hEvent); -} diff --git a/src/jthread/win32/jmutex.cpp b/src/jthread/win32/jmutex.cpp deleted file mode 100644 index b9f5e0e73..000000000 --- a/src/jthread/win32/jmutex.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include -#include "jthread/jmutex.h" - -JMutex::JMutex() -{ -#ifdef JMUTEX_CRITICALSECTION - InitializeCriticalSection(&mutex); -#else - mutex = CreateMutex(NULL,FALSE,NULL); - assert(mutex != NULL); -#endif // JMUTEX_CRITICALSECTION -} - -JMutex::~JMutex() -{ -#ifdef JMUTEX_CRITICALSECTION - DeleteCriticalSection(&mutex); -#else - CloseHandle(mutex); -#endif // JMUTEX_CRITICALSECTION -} - -int JMutex::Lock() -{ -#ifdef JMUTEX_CRITICALSECTION - EnterCriticalSection(&mutex); -#else - WaitForSingleObject(mutex,INFINITE); -#endif // JMUTEX_CRITICALSECTION - return 0; -} - -int JMutex::Unlock() -{ -#ifdef JMUTEX_CRITICALSECTION - LeaveCriticalSection(&mutex); -#else - ReleaseMutex(mutex); -#endif // JMUTEX_CRITICALSECTION - return 0; -} - diff --git a/src/jthread/win32/jsemaphore.cpp b/src/jthread/win32/jsemaphore.cpp deleted file mode 100644 index 27a11e819..000000000 --- a/src/jthread/win32/jsemaphore.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* -Minetest -Copyright (C) 2013 sapier, < sapier AT gmx DOT net > - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ -#include "jthread/jsemaphore.h" - -JSemaphore::JSemaphore() { - m_hSemaphore = CreateSemaphore( - 0, - 0, - MAX_SEMAPHORE_COUNT, - 0); -} - -JSemaphore::~JSemaphore() { - CloseHandle(m_hSemaphore); -} - -JSemaphore::JSemaphore(int initval) { - m_hSemaphore = CreateSemaphore( - 0, - initval, - MAX_SEMAPHORE_COUNT, - 0); -} - -void JSemaphore::Post() { - ReleaseSemaphore( - m_hSemaphore, - 1, - 0); -} - -void JSemaphore::Wait() { - WaitForSingleObject( - m_hSemaphore, - INFINITE); -} - -bool JSemaphore::Wait(unsigned int time_ms) { - unsigned int retval = WaitForSingleObject( - m_hSemaphore, - time_ms); - - if (retval == WAIT_OBJECT_0) - { - return true; - } - else { - assert(retval == WAIT_TIMEOUT); - return false; - } -} - -typedef LONG (NTAPI *_NtQuerySemaphore)( - HANDLE SemaphoreHandle, - DWORD SemaphoreInformationClass, - PVOID SemaphoreInformation, - ULONG SemaphoreInformationLength, - PULONG ReturnLength OPTIONAL -); - -typedef struct _SEMAPHORE_BASIC_INFORMATION { - ULONG CurrentCount; - ULONG MaximumCount; -} SEMAPHORE_BASIC_INFORMATION; - -/* Note: this will only work as long as jthread is directly linked to application */ -/* it's gonna fail if someone tries to build jthread as dll */ -static _NtQuerySemaphore NtQuerySemaphore = - (_NtQuerySemaphore) - GetProcAddress - (GetModuleHandle ("ntdll.dll"), "NtQuerySemaphore"); - -int JSemaphore::GetValue() { - SEMAPHORE_BASIC_INFORMATION BasicInfo; - LONG retval; - - assert(NtQuerySemaphore); - - retval = NtQuerySemaphore (m_hSemaphore, 0, - &BasicInfo, sizeof (SEMAPHORE_BASIC_INFORMATION), NULL); - - if (retval == ERROR_SUCCESS) - return BasicInfo.CurrentCount; - - assert("unable to read semaphore count" == 0); - return 0; -} - diff --git a/src/jthread/win32/jthread.cpp b/src/jthread/win32/jthread.cpp deleted file mode 100755 index b523d664c..000000000 --- a/src/jthread/win32/jthread.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#include "jthread/jthread.h" -#include -#define UNUSED(expr) do { (void)(expr); } while (0) -#ifndef _WIN32_WCE - #include -#endif // _WIN32_WCE - -JThread::JThread() -{ - retval = NULL; - requeststop = false; - running = false; -} - -JThread::~JThread() -{ - Kill(); -} - -void JThread::Wait() { - if (running) - { - WaitForSingleObject(threadhandle, INFINITE); - } -} - -int JThread::Start() -{ - if (running) - { - return ERR_JTHREAD_ALREADYRUNNING; - } - requeststop = false; - - continuemutex.Lock(); -#ifndef _WIN32_WCE - threadhandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,&threadid); -#else - threadhandle = CreateThread(NULL,0,TheThread,this,0,&threadid); -#endif // _WIN32_WCE - if (threadhandle == NULL) - { - continuemutex.Unlock(); - return ERR_JTHREAD_CANTSTARTTHREAD; - } - - /* Wait until 'running' is set */ - while (!running) - { - Sleep(1); - } - - continuemutex.Unlock(); - - continuemutex2.Lock(); - continuemutex2.Unlock(); - - return 0; -} - -int JThread::Kill() -{ - if (!running) - { - return ERR_JTHREAD_NOTRUNNING; - } - TerminateThread(threadhandle,0); - CloseHandle(threadhandle); - running = false; - return 0; -} - -void *JThread::GetReturnValue() -{ - void *val; - - if (running) { - val = NULL; - } else { - val = retval; - } - return val; -} - -bool JThread::IsSameThread() -{ - return GetCurrentThreadId() == threadid; -} - -#ifndef _WIN32_WCE -UINT __stdcall JThread::TheThread(void *param) -#else -DWORD WINAPI JThread::TheThread(void *param) -#endif // _WIN32_WCE -{ - JThread *jthread; - void *ret; - - jthread = (JThread *)param; - - jthread->continuemutex2.Lock(); - jthread->running = true; - - jthread->continuemutex.Lock(); - jthread->continuemutex.Unlock(); - - ret = jthread->Thread(); - - jthread->running = false; - jthread->retval = ret; - CloseHandle(jthread->threadhandle); - return 0; -} - -void JThread::ThreadStarted() -{ - continuemutex2.Unlock(); -} - diff --git a/src/log.cpp b/src/log.cpp index e6d80db34..9dc574d01 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "threads.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "debug.h" #include "gettime.h" #include "porting.h" @@ -54,8 +54,8 @@ unsigned int android_log_level_mapping[] = { #endif std::vector log_outputs[LMT_NUM_VALUES]; -std::map log_threadnames; -JMutex log_threadnamemutex; +std::map log_thread_names; +Mutex log_thread_name_mutex; void log_add_output(ILogOutput *out, enum LogMessageLevel lev) { @@ -86,7 +86,7 @@ void log_remove_output(ILogOutput *out) void log_set_lev_silence(enum LogMessageLevel lev, bool silence) { - JMutexAutoLock lock(log_threadnamemutex); + MutexAutoLock lock(log_thread_name_mutex); for (std::vector::iterator it = log_outputs[lev].begin(); it != log_outputs[lev].end(); ++it) { @@ -98,17 +98,17 @@ void log_set_lev_silence(enum LogMessageLevel lev, bool silence) void log_register_thread(const std::string &name) { threadid_t id = get_current_thread_id(); - JMutexAutoLock lock(log_threadnamemutex); + MutexAutoLock lock(log_thread_name_mutex); - log_threadnames[id] = name; + log_thread_names[id] = name; } void log_deregister_thread() { threadid_t id = get_current_thread_id(); - JMutexAutoLock lock(log_threadnamemutex); + MutexAutoLock lock(log_thread_name_mutex); - log_threadnames.erase(id); + log_thread_names.erase(id); } static std::string get_lev_string(enum LogMessageLevel lev) @@ -130,11 +130,11 @@ static std::string get_lev_string(enum LogMessageLevel lev) void log_printline(enum LogMessageLevel lev, const std::string &text) { - JMutexAutoLock lock(log_threadnamemutex); + MutexAutoLock lock(log_thread_name_mutex); std::string threadname = "(unknown thread)"; std::map::const_iterator i; - i = log_threadnames.find(get_current_thread_id()); - if(i != log_threadnames.end()) + i = log_thread_names.find(get_current_thread_id()); + if(i != log_thread_names.end()) threadname = i->second; std::string levelname = get_lev_string(lev); std::ostringstream os(std::ios_base::binary); diff --git a/src/main.cpp b/src/main.cpp index 1d73b4025..56ba7fac9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -153,7 +153,7 @@ int main(int argc, char *argv[]) log_add_output_maxlev(&main_stderr_log_out, LMT_ACTION); log_add_output_all_levs(&main_dstream_no_stderr_log_out); - log_register_thread("main"); + log_register_thread("Main"); Settings cmd_args; bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args); diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 43057f3a5..1f84c4d7b 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -96,7 +96,7 @@ MapBlock::~MapBlock() { #ifndef SERVER { - //JMutexAutoLock lock(mesh_mutex); + //MutexAutoLock lock(mesh_mutex); if(mesh) { diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index 0d6693929..f11a71518 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -139,7 +139,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) #if 0 printf("Decoration at (%d %d %d) cut off\n", x, y, z); //add to queue - JMutexAutoLock cutofflock(cutoff_mutex); + MutexAutoLock cutofflock(cutoff_mutex); cutoffs.push_back(CutoffData(x, y, z, height)); #endif } @@ -172,7 +172,7 @@ void Decoration::placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) // Copy over the cutoffs we're interested in so we don't needlessly hold a lock { - JMutexAutoLock cutofflock(cutoff_mutex); + MutexAutoLock cutofflock(cutoff_mutex); for (std::list::iterator i = cutoffs.begin(); i != cutoffs.end(); ++i) { CutoffData cutoff = *i; @@ -203,7 +203,7 @@ void Decoration::placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) // Remove cutoffs that were handled from the cutoff list { - JMutexAutoLock cutofflock(cutoff_mutex); + MutexAutoLock cutofflock(cutoff_mutex); for (std::list::iterator i = cutoffs.begin(); i != cutoffs.end(); ++i) { diff --git a/src/mg_decoration.h b/src/mg_decoration.h index 056748918..c712ce7c8 100644 --- a/src/mg_decoration.h +++ b/src/mg_decoration.h @@ -84,7 +84,7 @@ public: std::set biomes; //std::list cutoffs; - //JMutex cutoff_mutex; + //Mutex cutoff_mutex; }; class DecoSimple : public Decoration { diff --git a/src/minimap.cpp b/src/minimap.cpp index d1fb3867d..7eb7247ca 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -20,8 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "minimap.h" #include #include "logoutputbuffer.h" -#include "jthread/jmutexautolock.h" -#include "jthread/jsemaphore.h" +#include "threading/mutex_auto_lock.h" +#include "threading/semaphore.h" #include "clientmap.h" #include "settings.h" #include "nodedef.h" @@ -52,7 +52,7 @@ MinimapUpdateThread::~MinimapUpdateThread() bool MinimapUpdateThread::pushBlockUpdate(v3s16 pos, MinimapMapblock *data) { - JMutexAutoLock lock(m_queue_mutex); + MutexAutoLock lock(m_queue_mutex); // Find if block is already in queue. // If it is, update the data and quit. @@ -78,7 +78,7 @@ bool MinimapUpdateThread::pushBlockUpdate(v3s16 pos, MinimapMapblock *data) bool MinimapUpdateThread::popBlockUpdate(QueuedMinimapUpdate *update) { - JMutexAutoLock lock(m_queue_mutex); + MutexAutoLock lock(m_queue_mutex); if (m_update_queue.empty()) return false; @@ -256,13 +256,13 @@ Mapper::Mapper(IrrlichtDevice *device, Client *client) // Initialize and start thread m_minimap_update_thread = new MinimapUpdateThread(); m_minimap_update_thread->data = data; - m_minimap_update_thread->Start(); + m_minimap_update_thread->start(); } Mapper::~Mapper() { - m_minimap_update_thread->Stop(); - m_minimap_update_thread->Wait(); + m_minimap_update_thread->stop(); + m_minimap_update_thread->wait(); m_meshbuffer->drop(); @@ -290,7 +290,7 @@ MinimapMode Mapper::getMinimapMode() void Mapper::toggleMinimapShape() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); data->minimap_shape_round = !data->minimap_shape_round; g_settings->setBool("minimap_shape_round", data->minimap_shape_round); @@ -312,7 +312,7 @@ void Mapper::setMinimapMode(MinimapMode mode) if (mode >= MINIMAP_MODE_COUNT) return; - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); data->is_radar = modedefs[mode].is_radar; data->scan_height = modedefs[mode].scan_height; @@ -327,7 +327,7 @@ void Mapper::setPos(v3s16 pos) bool do_update = false; { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); if (pos != data->old_pos) { data->old_pos = data->pos; diff --git a/src/minimap.h b/src/minimap.h index 628be7489..dd1397d54 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -20,18 +20,19 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MINIMAP_HEADER #define MINIMAP_HEADER -#include -#include -#include #include "irrlichttypes_extrabloated.h" #include "client.h" #include "voxel.h" -#include "jthread/jmutex.h" -#include "jthread/jsemaphore.h" +#include "threading/mutex.h" +#include "threading/semaphore.h" +#include +#include +#include #define MINIMAP_MAX_SX 512 #define MINIMAP_MAX_SY 512 + enum MinimapMode { MINIMAP_MODE_OFF, MINIMAP_MODE_SURFACEx1, @@ -90,6 +91,7 @@ struct QueuedMinimapUpdate { class MinimapUpdateThread : public UpdateThread { public: + MinimapUpdateThread() : UpdateThread("Minimap") {} virtual ~MinimapUpdateThread(); void getMap(v3s16 pos, s16 size, s16 height, bool radar); @@ -105,11 +107,10 @@ public: MinimapData *data; protected: - const char *getName() { return "MinimapUpdateThread"; } virtual void doUpdate(); private: - JMutex m_queue_mutex; + Mutex m_queue_mutex; std::deque m_update_queue; std::map m_blocks_cache; }; @@ -151,7 +152,7 @@ private: bool m_enable_shaders; u16 m_surface_mode_scan_height; f32 m_angle; - JMutex m_mutex; + Mutex m_mutex; }; #endif diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 86091bc88..04f94c58b 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -621,7 +621,7 @@ void Client::handleCommand_AnnounceMedia(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); for (u16 i = 0; i < num_files; i++) { std::string name, sha1_base64; @@ -694,7 +694,7 @@ void Client::handleCommand_Media(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); for (u32 i=0; i < num_files; i++) { std::string name; @@ -720,7 +720,7 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); // Decompress node definitions std::string datastring(pkt->getString(0), pkt->getSize()); @@ -747,7 +747,7 @@ void Client::handleCommand_ItemDef(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); // Decompress item definitions std::string datastring(pkt->getString(0), pkt->getSize()); diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 7794ce10f..10f0d5543 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -42,10 +42,10 @@ namespace con #undef DEBUG_CONNECTION_KBPS #else /* this mutex is used to achieve log message consistency */ -JMutex log_message_mutex; +Mutex log_message_mutex; #define LOG(a) \ { \ - JMutexAutoLock loglock(log_message_mutex); \ + MutexAutoLock loglock(log_message_mutex); \ a; \ } #define PROFILE(a) a @@ -209,7 +209,7 @@ ReliablePacketBuffer::ReliablePacketBuffer(): m_list_size(0) {} void ReliablePacketBuffer::print() { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl); unsigned int index = 0; for(std::list::iterator i = m_list.begin(); @@ -223,7 +223,7 @@ void ReliablePacketBuffer::print() } bool ReliablePacketBuffer::empty() { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); return m_list.empty(); } @@ -256,7 +256,7 @@ RPBSearchResult ReliablePacketBuffer::notFound() } bool ReliablePacketBuffer::getFirstSeqnum(u16& result) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); if (m_list.empty()) return false; BufferedPacket p = *m_list.begin(); @@ -266,7 +266,7 @@ bool ReliablePacketBuffer::getFirstSeqnum(u16& result) BufferedPacket ReliablePacketBuffer::popFirst() { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); if (m_list.empty()) throw NotFoundException("Buffer is empty"); BufferedPacket p = *m_list.begin(); @@ -283,7 +283,7 @@ BufferedPacket ReliablePacketBuffer::popFirst() } BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); RPBSearchResult r = findPacket(seqnum); if (r == notFound()) { LOG(dout_con<<"Sequence number: " << seqnum @@ -311,7 +311,7 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) } void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); if (p.data.getSize() < BASE_HEADER_SIZE + 3) { errorstream << "ReliablePacketBuffer::insert(): Invalid data size for " "reliable packet" << std::endl; @@ -411,7 +411,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) void ReliablePacketBuffer::incrementTimeouts(float dtime) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); for(std::list::iterator i = m_list.begin(); i != m_list.end(); ++i) { @@ -423,7 +423,7 @@ void ReliablePacketBuffer::incrementTimeouts(float dtime) std::list ReliablePacketBuffer::getTimedOuts(float timeout, unsigned int max_packets) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); std::list timed_outs; for(std::list::iterator i = m_list.begin(); i != m_list.end(); ++i) @@ -446,7 +446,7 @@ std::list ReliablePacketBuffer::getTimedOuts(float timeout, IncomingSplitBuffer::~IncomingSplitBuffer() { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); for(std::map::iterator i = m_buf.begin(); i != m_buf.end(); ++i) { @@ -459,7 +459,7 @@ IncomingSplitBuffer::~IncomingSplitBuffer() */ SharedBuffer IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable) { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); u32 headersize = BASE_HEADER_SIZE + 7; if (p.data.getSize() < headersize) { errorstream << "Invalid data size for split packet" << std::endl; @@ -546,7 +546,7 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) { std::list remove_queue; { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); for(std::map::iterator i = m_buf.begin(); i != m_buf.end(); ++i) { @@ -562,7 +562,7 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) for(std::list::iterator j = remove_queue.begin(); j != remove_queue.end(); ++j) { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); LOG(dout_con<<"NOTE: Removing timed out unreliable split packet"< 10.0) { { - JMutexAutoLock internal(m_internal_mutex); + MutexAutoLock internal(m_internal_mutex); cur_kbps = (((float) current_bytes_transfered)/bpm_counter)/1024.0; current_bytes_transfered = 0; @@ -903,7 +903,7 @@ bool PeerHelper::operator!=(void* ptr) bool Peer::IncUseCount() { - JMutexAutoLock lock(m_exclusive_access_mutex); + MutexAutoLock lock(m_exclusive_access_mutex); if (!m_pending_deletion) { @@ -917,7 +917,7 @@ bool Peer::IncUseCount() void Peer::DecUseCount() { { - JMutexAutoLock lock(m_exclusive_access_mutex); + MutexAutoLock lock(m_exclusive_access_mutex); sanity_check(m_usage > 0); m_usage--; @@ -978,7 +978,7 @@ void Peer::RTTStatistics(float rtt, std::string profiler_id, bool Peer::isTimedOut(float timeout) { - JMutexAutoLock lock(m_exclusive_access_mutex); + MutexAutoLock lock(m_exclusive_access_mutex); u32 current_time = porting::getTimeMs(); float dtime = CALC_DTIME(m_last_timeout_check,current_time); @@ -992,7 +992,7 @@ bool Peer::isTimedOut(float timeout) void Peer::Drop() { { - JMutexAutoLock usage_lock(m_exclusive_access_mutex); + MutexAutoLock usage_lock(m_exclusive_access_mutex); m_pending_deletion = true; if (m_usage != 0) return; @@ -1051,7 +1051,7 @@ void UDPPeer::reportRTT(float rtt) if (timeout > RESEND_TIMEOUT_MAX) timeout = RESEND_TIMEOUT_MAX; - JMutexAutoLock usage_lock(m_exclusive_access_mutex); + MutexAutoLock usage_lock(m_exclusive_access_mutex); resend_timeout = timeout; } @@ -1255,8 +1255,9 @@ SharedBuffer UDPPeer::addSpiltPacket(u8 channel, /* Connection Threads */ /******************************************************************************/ -ConnectionSendThread::ConnectionSendThread( unsigned int max_packet_size, - float timeout) : +ConnectionSendThread::ConnectionSendThread(unsigned int max_packet_size, + float timeout) : + Thread("ConnectionSend"), m_connection(NULL), m_max_packet_size(max_packet_size), m_timeout(timeout), @@ -1266,11 +1267,9 @@ ConnectionSendThread::ConnectionSendThread( unsigned int max_packet_size, { } -void * ConnectionSendThread::Thread() +void * ConnectionSendThread::run() { - assert(m_connection != NULL); - ThreadStarted(); - log_register_thread("ConnectionSend"); + assert(m_connection); LOG(dout_con<getDesc() <<"ConnectionSend thread started"<getDesc() << "]"); - porting::setThreadName("ConnectionSend"); - /* if stop is requested don't stop immediately but try to send all */ /* packets first */ - while(!StopRequested() || packetsQueued()) { + while(!stopRequested() || packetsQueued()) { BEGIN_DEBUG_EXCEPTION_HANDLER PROFILE(ScopeProfiler sp(g_profiler, ThreadIdentifier.str(), SPT_AVG)); m_iteration_packets_avaialble = m_max_data_packets_per_iteration; /* wait for trigger or timeout */ - m_send_sleep_semaphore.Wait(50); + m_send_sleep_semaphore.wait(50); /* remove all triggers */ - while(m_send_sleep_semaphore.Wait(0)) {} + while(m_send_sleep_semaphore.wait(0)) {} lasttime = curtime; curtime = porting::getTimeMs(); @@ -1328,7 +1325,7 @@ void * ConnectionSendThread::Thread() void ConnectionSendThread::Trigger() { - m_send_sleep_semaphore.Post(); + m_send_sleep_semaphore.post(); } bool ConnectionSendThread::packetsQueued() @@ -1984,7 +1981,7 @@ void ConnectionSendThread::sendPackets(float dtime) } else if ( ( peer->m_increment_packets_remaining > 0) || - (StopRequested())) { + (stopRequested())) { rawSendAsPacket(packet.peer_id, packet.channelnum, packet.data, packet.reliable); peer->m_increment_packets_remaining--; @@ -2014,15 +2011,14 @@ void ConnectionSendThread::sendAsPacket(u16 peer_id, u8 channelnum, } ConnectionReceiveThread::ConnectionReceiveThread(unsigned int max_packet_size) : + Thread("ConnectionReceive"), m_connection(NULL) { } -void * ConnectionReceiveThread::Thread() +void * ConnectionReceiveThread::run() { - assert(m_connection != NULL); - ThreadStarted(); - log_register_thread("ConnectionReceive"); + assert(m_connection); LOG(dout_con<getDesc() <<"ConnectionReceive thread started"<getDesc() << "]"); - porting::setThreadName("ConnectionReceive"); - #ifdef DEBUG_CONNECTION_KBPS u32 curtime = porting::getTimeMs(); u32 lasttime = curtime; float debug_print_timer = 0.0; #endif - while(!StopRequested()) { + while(!stopRequested()) { BEGIN_DEBUG_EXCEPTION_HANDLER PROFILE(ScopeProfiler sp(g_profiler, ThreadIdentifier.str(), SPT_AVG)); @@ -2684,8 +2678,8 @@ Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, m_sendThread.setParent(this); m_receiveThread.setParent(this); - m_sendThread.Start(); - m_receiveThread.Start(); + m_sendThread.start(); + m_receiveThread.start(); } @@ -2694,8 +2688,8 @@ Connection::~Connection() { m_shutting_down = true; // request threads to stop - m_sendThread.Stop(); - m_receiveThread.Stop(); + m_sendThread.stop(); + m_receiveThread.stop(); //TODO for some unkonwn reason send/receive threads do not exit as they're // supposed to be but wait on peer timeout. To speed up shutdown we reduce @@ -2703,8 +2697,8 @@ Connection::~Connection() m_sendThread.setPeerTimeout(0.5); // wait for threads to finish - m_sendThread.Wait(); - m_receiveThread.Wait(); + m_sendThread.wait(); + m_receiveThread.wait(); // Delete peers for(std::map::iterator @@ -2724,7 +2718,7 @@ void Connection::putEvent(ConnectionEvent &e) PeerHelper Connection::getPeer(u16 peer_id) { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); std::map::iterator node = m_peers.find(peer_id); if (node == m_peers.end()) { @@ -2739,7 +2733,7 @@ PeerHelper Connection::getPeer(u16 peer_id) PeerHelper Connection::getPeerNoEx(u16 peer_id) { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); std::map::iterator node = m_peers.find(peer_id); if (node == m_peers.end()) { @@ -2755,7 +2749,7 @@ PeerHelper Connection::getPeerNoEx(u16 peer_id) /* find peer_id for address */ u16 Connection::lookupPeer(Address& sender) { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); std::map::iterator j; j = m_peers.begin(); for(; j != m_peers.end(); ++j) @@ -2794,7 +2788,7 @@ bool Connection::deletePeer(u16 peer_id, bool timeout) /* lock list as short as possible */ { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); if (m_peers.find(peer_id) == m_peers.end()) return false; peer = m_peers[peer_id]; @@ -2852,7 +2846,7 @@ void Connection::Connect(Address address) bool Connection::Connected() { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); if (m_peers.size() != 1) return false; @@ -2987,7 +2981,7 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd) /* Find an unused peer id */ - JMutexAutoLock lock(m_peers_mutex); + MutexAutoLock lock(m_peers_mutex); bool out_of_ids = false; for(;;) { // Check if exists @@ -3038,9 +3032,9 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd) void Connection::PrintInfo(std::ostream &out) { - m_info_mutex.Lock(); + m_info_mutex.lock(); out<id] = peer; m_peer_ids.push_back(peer->id); } diff --git a/src/network/connection.h b/src/network/connection.h index 15ea7e20f..fe2c9819d 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -349,7 +349,7 @@ private: u16 m_oldest_non_answered_ack; - JMutex m_list_mutex; + Mutex m_list_mutex; }; /* @@ -372,7 +372,7 @@ private: // Key is seqnum std::map m_buf; - JMutex m_map_mutex; + Mutex m_map_mutex; }; struct OutgoingPacket @@ -519,32 +519,32 @@ public: void UpdateTimers(float dtime, bool legacy_peer); const float getCurrentDownloadRateKB() - { JMutexAutoLock lock(m_internal_mutex); return cur_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return cur_kbps; }; const float getMaxDownloadRateKB() - { JMutexAutoLock lock(m_internal_mutex); return max_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return max_kbps; }; const float getCurrentLossRateKB() - { JMutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; }; + { MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; }; const float getMaxLossRateKB() - { JMutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; + { MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; const float getCurrentIncomingRateKB() - { JMutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; const float getMaxIncomingRateKB() - { JMutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; const float getAvgDownloadRateKB() - { JMutexAutoLock lock(m_internal_mutex); return avg_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return avg_kbps; }; const float getAvgLossRateKB() - { JMutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; + { MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; const float getAvgIncomingRateKB() - { JMutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; const unsigned int getWindowSize() const { return window_size; }; void setWindowSize(unsigned int size) { window_size = size; }; private: - JMutex m_internal_mutex; + Mutex m_internal_mutex; int window_size; u16 next_incoming_seqnum; @@ -675,7 +675,7 @@ class Peer { }; virtual ~Peer() { - JMutexAutoLock usage_lock(m_exclusive_access_mutex); + MutexAutoLock usage_lock(m_exclusive_access_mutex); FATAL_ERROR_IF(m_usage != 0, "Reference counting failure"); }; @@ -692,15 +692,15 @@ class Peer { virtual bool getAddress(MTProtocols type, Address& toset) = 0; void ResetTimeout() - {JMutexAutoLock lock(m_exclusive_access_mutex); m_timeout_counter=0.0; }; + {MutexAutoLock lock(m_exclusive_access_mutex); m_timeout_counter=0.0; }; bool isTimedOut(float timeout); void setSentWithID() - { JMutexAutoLock lock(m_exclusive_access_mutex); m_has_sent_with_id = true; }; + { MutexAutoLock lock(m_exclusive_access_mutex); m_has_sent_with_id = true; }; bool hasSentWithID() - { JMutexAutoLock lock(m_exclusive_access_mutex); return m_has_sent_with_id; }; + { MutexAutoLock lock(m_exclusive_access_mutex); return m_has_sent_with_id; }; unsigned int m_increment_packets_remaining; unsigned int m_increment_bytes_remaining; @@ -744,7 +744,7 @@ class Peer { bool IncUseCount(); void DecUseCount(); - JMutex m_exclusive_access_mutex; + Mutex m_exclusive_access_mutex; bool m_pending_deletion; @@ -826,10 +826,10 @@ protected: unsigned int maxtransfer); float getResendTimeout() - { JMutexAutoLock lock(m_exclusive_access_mutex); return resend_timeout; } + { MutexAutoLock lock(m_exclusive_access_mutex); return resend_timeout; } void setResendTimeout(float timeout) - { JMutexAutoLock lock(m_exclusive_access_mutex); resend_timeout = timeout; } + { MutexAutoLock lock(m_exclusive_access_mutex); resend_timeout = timeout; } bool Ping(float dtime,SharedBuffer& data); Channel channels[CHANNEL_COUNT]; @@ -910,14 +910,14 @@ struct ConnectionEvent } }; -class ConnectionSendThread : public JThread { +class ConnectionSendThread : public Thread { public: friend class UDPPeer; ConnectionSendThread(unsigned int max_packet_size, float timeout); - void * Thread (); + void *run(); void Trigger(); @@ -961,7 +961,7 @@ private: unsigned int m_max_packet_size; float m_timeout; std::queue m_outgoing_queue; - JSemaphore m_send_sleep_semaphore; + Semaphore m_send_sleep_semaphore; unsigned int m_iteration_packets_avaialble; unsigned int m_max_commands_per_iteration; @@ -969,24 +969,24 @@ private: unsigned int m_max_packets_requeued; }; -class ConnectionReceiveThread : public JThread { +class ConnectionReceiveThread : public Thread { public: ConnectionReceiveThread(unsigned int max_packet_size); - void * Thread (); + void *run(); - void setParent(Connection* parent) { - assert(parent != NULL); // Pre-condition + void setParent(Connection *parent) { + assert(parent); // Pre-condition m_connection = parent; } private: - void receive (); + void receive(); // Returns next data from a buffer if possible // If found, returns true; if not, false. // If found, sets peer_id and dst - bool getFromBuffers (u16 &peer_id, SharedBuffer &dst); + bool getFromBuffers(u16 &peer_id, SharedBuffer &dst); bool checkIncomingBuffers(Channel *channel, u16 &peer_id, SharedBuffer &dst); @@ -1054,7 +1054,7 @@ protected: std::list getPeerIDs() { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); return m_peer_ids; } @@ -1075,12 +1075,12 @@ private: std::map m_peers; std::list m_peer_ids; - JMutex m_peers_mutex; + Mutex m_peers_mutex; ConnectionSendThread m_sendThread; ConnectionReceiveThread m_receiveThread; - JMutex m_info_mutex; + Mutex m_info_mutex; // Backwards compatibility PeerHandler *m_bc_peerhandler; diff --git a/src/particles.cpp b/src/particles.cpp index 15e2a6597..ab48bae9e 100644 --- a/src/particles.cpp +++ b/src/particles.cpp @@ -347,7 +347,7 @@ void ParticleManager::step(float dtime) void ParticleManager::stepSpawners (float dtime) { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); for(std::map::iterator i = m_particle_spawners.begin(); i != m_particle_spawners.end();) @@ -367,7 +367,7 @@ void ParticleManager::stepSpawners (float dtime) void ParticleManager::stepParticles (float dtime) { - JMutexAutoLock lock(m_particle_list_lock); + MutexAutoLock lock(m_particle_list_lock); for(std::vector::iterator i = m_particles.begin(); i != m_particles.end();) { @@ -387,8 +387,8 @@ void ParticleManager::stepParticles (float dtime) void ParticleManager::clearAll () { - JMutexAutoLock lock(m_spawner_list_lock); - JMutexAutoLock lock2(m_particle_list_lock); + MutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock2(m_particle_list_lock); for(std::map::iterator i = m_particle_spawners.begin(); i != m_particle_spawners.end();) @@ -411,7 +411,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef, scene::ISceneManager* smgr, LocalPlayer *player) { if (event->type == CE_DELETE_PARTICLESPAWNER) { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); if (m_particle_spawners.find(event->delete_particlespawner.id) != m_particle_spawners.end()) { @@ -425,7 +425,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef, if (event->type == CE_ADD_PARTICLESPAWNER) { { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); if (m_particle_spawners.find(event->add_particlespawner.id) != m_particle_spawners.end()) { @@ -465,7 +465,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef, delete event->add_particlespawner.maxacc; { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); m_particle_spawners.insert( std::pair( event->add_particlespawner.id, @@ -568,6 +568,6 @@ void ParticleManager::addNodeParticle(IGameDef* gamedef, scene::ISceneManager* s void ParticleManager::addParticle(Particle* toadd) { - JMutexAutoLock lock(m_particle_list_lock); + MutexAutoLock lock(m_particle_list_lock); m_particles.push_back(toadd); } diff --git a/src/particles.h b/src/particles.h index 2bc2e7bfa..0ad8d71b5 100644 --- a/src/particles.h +++ b/src/particles.h @@ -190,8 +190,8 @@ private: std::map m_particle_spawners; ClientEnvironment* m_env; - JMutex m_particle_list_lock; - JMutex m_spawner_list_lock; + Mutex m_particle_list_lock; + Mutex m_spawner_list_lock; }; #endif diff --git a/src/player.cpp b/src/player.cpp index cb2286ef6..3ee34d41f 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "util/numeric.h" #include "hud.h" #include "constants.h" @@ -217,7 +217,7 @@ void Player::deSerialize(std::istream &is, std::string playername) u32 Player::addHud(HudElement *toadd) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); u32 id = getFreeHudID(); @@ -231,7 +231,7 @@ u32 Player::addHud(HudElement *toadd) HudElement* Player::getHud(u32 id) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); if (id < hud.size()) return hud[id]; @@ -241,7 +241,7 @@ HudElement* Player::getHud(u32 id) HudElement* Player::removeHud(u32 id) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); HudElement* retval = NULL; if (id < hud.size()) { @@ -253,7 +253,7 @@ HudElement* Player::removeHud(u32 id) void Player::clearHud() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); while(!hud.empty()) { delete hud.back(); diff --git a/src/player.h b/src/player.h index 3a336afc4..ec30e59d2 100644 --- a/src/player.h +++ b/src/player.h @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "inventory.h" #include "constants.h" // BS -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include #define PLAYERNAME_SIZE 20 @@ -413,7 +413,7 @@ private: // Protect some critical areas // hud for example can be modified by EmergeThread // and ServerThread - JMutex m_mutex; + Mutex m_mutex; }; diff --git a/src/porting.cpp b/src/porting.cpp index 44f1fcff1..cb9f3270b 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -129,130 +129,6 @@ void signal_handler_init(void) #endif -/* - Multithreading support -*/ -int getNumberOfProcessors() -{ -#if defined(_SC_NPROCESSORS_ONLN) - - return sysconf(_SC_NPROCESSORS_ONLN); - -#elif defined(__FreeBSD__) || defined(__APPLE__) - - unsigned int len, count; - len = sizeof(count); - return sysctlbyname("hw.ncpu", &count, &len, NULL, 0); - -#elif defined(_GNU_SOURCE) - - return get_nprocs(); - -#elif defined(_WIN32) - - SYSTEM_INFO sysinfo; - GetSystemInfo(&sysinfo); - return sysinfo.dwNumberOfProcessors; - -#elif defined(PTW32_VERSION) || defined(__hpux) - - return pthread_num_processors_np(); - -#else - - return 1; - -#endif -} - - -#ifndef __ANDROID__ -bool threadBindToProcessor(threadid_t tid, int pnumber) -{ -#if defined(_WIN32) - - HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid); - if (!hThread) - return false; - - bool success = SetThreadAffinityMask(hThread, 1 << pnumber) != 0; - - CloseHandle(hThread); - return success; - -#elif (defined(__FreeBSD__) && (__FreeBSD_version >= 702106)) \ - || defined(__linux) || defined(linux) - - cpu_set_t cpuset; - - CPU_ZERO(&cpuset); - CPU_SET(pnumber, &cpuset); - return pthread_setaffinity_np(tid, sizeof(cpuset), &cpuset) == 0; - -#elif defined(__sun) || defined(sun) - - return processor_bind(P_LWPID, MAKE_LWPID_PTHREAD(tid), - pnumber, NULL) == 0; - -#elif defined(_AIX) - - return bindprocessor(BINDTHREAD, (tid_t)tid, pnumber) == 0; - -#elif defined(__hpux) || defined(hpux) - - pthread_spu_t answer; - - return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP, - &answer, pnumber, tid) == 0; - -#elif defined(__APPLE__) - - struct thread_affinity_policy tapol; - - thread_port_t threadport = pthread_mach_thread_np(tid); - tapol.affinity_tag = pnumber + 1; - return thread_policy_set(threadport, THREAD_AFFINITY_POLICY, - (thread_policy_t)&tapol, THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS; - -#else - - return false; - -#endif -} -#endif - -bool threadSetPriority(threadid_t tid, int prio) -{ -#if defined(_WIN32) - - HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid); - if (!hThread) - return false; - - bool success = SetThreadPriority(hThread, prio) != 0; - - CloseHandle(hThread); - return success; - -#else - - struct sched_param sparam; - int policy; - - if (pthread_getschedparam(tid, &policy, &sparam) != 0) - return false; - - int min = sched_get_priority_min(policy); - int max = sched_get_priority_max(policy); - - sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST; - return pthread_setschedparam(tid, policy, &sparam) == 0; - -#endif -} - - /* Path mangler */ diff --git a/src/porting.h b/src/porting.h index 2a91fdd06..492c9d3a8 100644 --- a/src/porting.h +++ b/src/porting.h @@ -64,28 +64,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define _GNU_SOURCE #endif - #include - - #ifdef __FreeBSD__ - #include - typedef cpuset_t cpu_set_t; - #elif defined(__sun) || defined(sun) - #include - #include - #elif defined(_AIX) - #include - #elif __APPLE__ - #include - #include - #endif - #define sleep_ms(x) usleep(x*1000) - - #define THREAD_PRIORITY_LOWEST 0 - #define THREAD_PRIORITY_BELOW_NORMAL 1 - #define THREAD_PRIORITY_NORMAL 2 - #define THREAD_PRIORITY_ABOVE_NORMAL 3 - #define THREAD_PRIORITY_HIGHEST 4 #endif #ifdef _MSC_VER @@ -165,21 +144,6 @@ std::string getDataPath(const char *subpath); */ void initializePaths(); -/* - Get number of online processors in the system. -*/ -int getNumberOfProcessors(); - -/* - Set a thread's affinity to a particular processor. -*/ -bool threadBindToProcessor(threadid_t tid, int pnumber); - -/* - Set a thread's priority. -*/ -bool threadSetPriority(threadid_t tid, int prio); - /* Return system information e.g. "Linux/3.12.7 x86_64" @@ -311,59 +275,6 @@ inline u32 getDeltaMs(u32 old_time_ms, u32 new_time_ms) } } -#if defined(linux) || defined(__linux) - #include - - inline void setThreadName(const char *name) { - /* It would be cleaner to do this with pthread_setname_np, - * which was added to glibc in version 2.12, but some major - * distributions are still runing 2.11 and previous versions. - */ - prctl(PR_SET_NAME, name); - } -#elif defined(__FreeBSD__) || defined(__OpenBSD__) - #include - #include - - inline void setThreadName(const char *name) { - pthread_set_name_np(pthread_self(), name); - } -#elif defined(__NetBSD__) - #include - - inline void setThreadName(const char *name) { - pthread_setname_np(pthread_self(), name); - } -#elif defined(_MSC_VER) - typedef struct tagTHREADNAME_INFO { - DWORD dwType; // must be 0x1000 - LPCSTR szName; // pointer to name (in user addr space) - DWORD dwThreadID; // thread ID (-1=caller thread) - DWORD dwFlags; // reserved for future use, must be zero - } THREADNAME_INFO; - - inline void setThreadName(const char *name) { - THREADNAME_INFO info; - info.dwType = 0x1000; - info.szName = name; - info.dwThreadID = -1; - info.dwFlags = 0; - __try { - RaiseException(0x406D1388, 0, sizeof(info) / sizeof(DWORD), (ULONG_PTR *) &info); - } __except (EXCEPTION_CONTINUE_EXECUTION) {} - } -#elif defined(__APPLE__) - #include - - inline void setThreadName(const char *name) { - pthread_setname_np(name); - } -#elif defined(_WIN32) || defined(__GNU__) - inline void setThreadName(const char* name) {} -#else - #warning "Unrecognized platform, thread names will not be available." - inline void setThreadName(const char* name) {} -#endif #ifndef SERVER float getDisplayDensity(); diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 6871ce465..06cc929dd 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "porting_android.h" +#include "threading/thread.h" #include "config.h" #include "filesys.h" #include "log.h" @@ -39,30 +40,28 @@ void android_main(android_app *app) int retval = 0; porting::app_global = app; - porting::setThreadName("MainThread"); + Thread::setName("MainThread"); try { app_dummy(); - char *argv[] = { (char*) "minetest" }; + char *argv[] = {(char*) "minetest"}; main(sizeof(argv) / sizeof(argv[0]), argv); - } - catch(BaseException e) { + } catch (BaseException &e) { std::stringstream msg; msg << "Exception handled by main: " << e.what(); - const char* message = msg.str().c_str(); + const char *message = msg.str().c_str(); __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, "%s", message); errorstream << msg << std::endl; retval = -1; - } - catch(...) { + } catch (...) { __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, - "Some exception occured"); + "An unknown exception occured!"); errorstream << "Uncaught exception in main thread!" << std::endl; retval = -1; } porting::cleanupAndroid(); - errorstream << "Shutting down minetest." << std::endl; + errorstream << "Shutting down." << std::endl; exit(retval); } diff --git a/src/profiler.h b/src/profiler.h index 78d3b08e0..e8eac86b1 100644 --- a/src/profiler.h +++ b/src/profiler.h @@ -24,8 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "util/timetaker.h" #include "util/numeric.h" // paging() #include "debug.h" // assert() @@ -49,7 +49,7 @@ public: void add(const std::string &name, float value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); { /* No average shall have been used; mark add used as -2 */ std::map::iterator n = m_avgcounts.find(name); @@ -72,7 +72,7 @@ public: void avg(const std::string &name, float value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); int &count = m_avgcounts[name]; assert(count != -2); @@ -82,7 +82,7 @@ public: void clear() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for(std::map::iterator i = m_data.begin(); i != m_data.end(); ++i) @@ -114,7 +114,7 @@ public: void printPage(std::ostream &o, u32 page, u32 pagecount) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); u32 minindex, maxindex; paging(m_data.size(), page, pagecount, minindex, maxindex); @@ -159,7 +159,7 @@ public: void graphAdd(const std::string &id, float value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::map::iterator i = m_graphvalues.find(id); if(i == m_graphvalues.end()) @@ -169,20 +169,20 @@ public: } void graphGet(GraphValues &result) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); result = m_graphvalues; m_graphvalues.clear(); } void remove(const std::string& name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_avgcounts.erase(name); m_data.erase(name); } private: - JMutex m_mutex; + Mutex m_mutex; std::map m_data; std::map m_avgcounts; std::map m_graphvalues; diff --git a/src/quicktune.cpp b/src/quicktune.cpp index 2f9f987bd..b0e2dc6d5 100644 --- a/src/quicktune.cpp +++ b/src/quicktune.cpp @@ -18,8 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "quicktune.h" -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "util/string.h" std::string QuicktuneValue::getString() @@ -49,12 +49,12 @@ void QuicktuneValue::relativeAdd(float amount) static std::map g_values; static std::vector g_names; -JMutex *g_mutex = NULL; +Mutex *g_mutex = NULL; static void makeMutex() { if(!g_mutex){ - g_mutex = new JMutex(); + g_mutex = new Mutex(); } } @@ -66,7 +66,7 @@ std::vector getQuicktuneNames() QuicktuneValue getQuicktuneValue(const std::string &name) { makeMutex(); - JMutexAutoLock lock(*g_mutex); + MutexAutoLock lock(*g_mutex); std::map::iterator i = g_values.find(name); if(i == g_values.end()){ QuicktuneValue val; @@ -79,7 +79,7 @@ QuicktuneValue getQuicktuneValue(const std::string &name) void setQuicktuneValue(const std::string &name, const QuicktuneValue &val) { makeMutex(); - JMutexAutoLock lock(*g_mutex); + MutexAutoLock lock(*g_mutex); g_values[name] = val; g_values[name].modified = true; } @@ -87,7 +87,7 @@ void setQuicktuneValue(const std::string &name, const QuicktuneValue &val) void updateQuicktuneValue(const std::string &name, QuicktuneValue &val) { makeMutex(); - JMutexAutoLock lock(*g_mutex); + MutexAutoLock lock(*g_mutex); std::map::iterator i = g_values.find(name); if(i == g_values.end()){ g_values[name] = val; diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index c00b22f98..1e87e59f0 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -47,32 +47,31 @@ AsyncEngine::~AsyncEngine() // Request all threads to stop for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - (*it)->Stop(); + (*it)->stop(); } // Wake up all threads for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - jobQueueCounter.Post(); + jobQueueCounter.post(); } // Wait for threads to finish for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - (*it)->Wait(); + (*it)->wait(); } // Force kill all threads for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - (*it)->Kill(); delete *it; } - jobQueueMutex.Lock(); + jobQueueMutex.lock(); jobQueue.clear(); - jobQueueMutex.Unlock(); + jobQueueMutex.unlock(); workerThreads.clear(); } @@ -92,16 +91,17 @@ void AsyncEngine::initialize(unsigned int numEngines) initDone = true; for (unsigned int i = 0; i < numEngines; i++) { - AsyncWorkerThread *toAdd = new AsyncWorkerThread(this, i); + AsyncWorkerThread *toAdd = new AsyncWorkerThread(this, + std::string("AsyncWorker-") + itos(i)); workerThreads.push_back(toAdd); - toAdd->Start(); + toAdd->start(); } } /******************************************************************************/ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params) { - jobQueueMutex.Lock(); + jobQueueMutex.lock(); LuaJobInfo toAdd; toAdd.id = jobIdCounter++; toAdd.serializedFunction = func; @@ -109,9 +109,9 @@ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params) jobQueue.push_back(toAdd); - jobQueueCounter.Post(); + jobQueueCounter.post(); - jobQueueMutex.Unlock(); + jobQueueMutex.unlock(); return toAdd.id; } @@ -119,8 +119,8 @@ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params) /******************************************************************************/ LuaJobInfo AsyncEngine::getJob() { - jobQueueCounter.Wait(); - jobQueueMutex.Lock(); + jobQueueCounter.wait(); + jobQueueMutex.lock(); LuaJobInfo retval; retval.valid = false; @@ -130,7 +130,7 @@ LuaJobInfo AsyncEngine::getJob() jobQueue.pop_front(); retval.valid = true; } - jobQueueMutex.Unlock(); + jobQueueMutex.unlock(); return retval; } @@ -138,16 +138,16 @@ LuaJobInfo AsyncEngine::getJob() /******************************************************************************/ void AsyncEngine::putJobResult(LuaJobInfo result) { - resultQueueMutex.Lock(); + resultQueueMutex.lock(); resultQueue.push_back(result); - resultQueueMutex.Unlock(); + resultQueueMutex.unlock(); } /******************************************************************************/ void AsyncEngine::step(lua_State *L, int errorhandler) { lua_getglobal(L, "core"); - resultQueueMutex.Lock(); + resultQueueMutex.lock(); while (!resultQueue.empty()) { LuaJobInfo jobDone = resultQueue.front(); resultQueue.pop_front(); @@ -166,14 +166,14 @@ void AsyncEngine::step(lua_State *L, int errorhandler) PCALL_RESL(L, lua_pcall(L, 2, 0, errorhandler)); } - resultQueueMutex.Unlock(); + resultQueueMutex.unlock(); lua_pop(L, 1); // Pop core } /******************************************************************************/ void AsyncEngine::pushFinishedJobs(lua_State* L) { // Result Table - resultQueueMutex.Lock(); + MutexAutoLock l(resultQueueMutex); unsigned int index = 1; lua_createtable(L, resultQueue.size(), 0); @@ -197,8 +197,6 @@ void AsyncEngine::pushFinishedJobs(lua_State* L) { lua_rawseti(L, top, index++); } - - resultQueueMutex.Unlock(); } /******************************************************************************/ @@ -214,10 +212,10 @@ void AsyncEngine::prepareEnvironment(lua_State* L, int top) /******************************************************************************/ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, - unsigned int threadNum) : + const std::string &name) : + Thread(name), ScriptApiBase(), - jobDispatcher(jobDispatcher), - threadnum(threadNum) + jobDispatcher(jobDispatcher) { lua_State *L = getStack(); @@ -235,27 +233,17 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, /******************************************************************************/ AsyncWorkerThread::~AsyncWorkerThread() { - sanity_check(IsRunning() == false); + sanity_check(!isRunning()); } /******************************************************************************/ -void* AsyncWorkerThread::Thread() +void* AsyncWorkerThread::run() { - ThreadStarted(); - - // Register thread for error logging - char number[21]; - snprintf(number, sizeof(number), "%u", threadnum); - log_register_thread(std::string("AsyncWorkerThread_") + number); - - porting::setThreadName((std::string("AsyncWorkTh_") + number).c_str()); - lua_State *L = getStack(); std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua"; if (!loadScript(script)) { - errorstream - << "AsyncWorkerThread execution of async base environment failed!" + errorstream << "execution of async base environment failed!" << std::endl; abort(); } @@ -267,11 +255,11 @@ void* AsyncWorkerThread::Thread() } // Main loop - while (!StopRequested()) { + while (!stopRequested()) { // Wait for job LuaJobInfo toProcess = jobDispatcher->getJob(); - if (toProcess.valid == false || StopRequested()) { + if (toProcess.valid == false || stopRequested()) { continue; } @@ -310,8 +298,6 @@ void* AsyncWorkerThread::Thread() lua_pop(L, 1); // Pop core - log_deregister_thread(); - return 0; } diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index a6459c18d..7f8c72fae 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -24,9 +24,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "jthread/jthread.h" -#include "jthread/jmutex.h" -#include "jthread/jsemaphore.h" +#include "threading/thread.h" +#include "threading/mutex.h" +#include "threading/semaphore.h" #include "debug.h" #include "lua.h" #include "cpp_api/s_base.h" @@ -52,24 +52,15 @@ struct LuaJobInfo { }; // Asynchronous working environment -class AsyncWorkerThread : public JThread, public ScriptApiBase { +class AsyncWorkerThread : public Thread, public ScriptApiBase { public: - /** - * default constructor - * @param pointer to job dispatcher - */ - AsyncWorkerThread(AsyncEngine* jobDispatcher, unsigned int threadNum); - + AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name); virtual ~AsyncWorkerThread(); - void *Thread(); + void *run(); private: AsyncEngine *jobDispatcher; - - // Thread number. Used for debug output - unsigned int threadnum; - }; // Asynchornous thread and job management @@ -148,13 +139,13 @@ private: unsigned int jobIdCounter; // Mutex to protect job queue - JMutex jobQueueMutex; + Mutex jobQueueMutex; // Job queue std::deque jobQueue; // Mutex to protect result queue - JMutex resultQueueMutex; + Mutex resultQueueMutex; // Result queue std::deque resultQueue; @@ -162,7 +153,7 @@ private: std::vector workerThreads; // Counter semaphore for job dispatching - JSemaphore jobQueueCounter; + Semaphore jobQueueCounter; }; #endif // CPP_API_ASYNC_EVENTS_HEADER diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index d653b5bac..744fca2d0 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -28,8 +28,8 @@ extern "C" { } #include "irrlichttypes.h" -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "common/c_types.h" #include "common/c_internal.h" @@ -108,7 +108,7 @@ protected: void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj); void objectrefGet(lua_State *L, u16 id); - JMutex m_luastackmutex; + Mutex m_luastackmutex; std::string m_last_run_mod; // Stack index of Lua error handler int m_errorhandler; diff --git a/src/script/cpp_api/s_internal.h b/src/script/cpp_api/s_internal.h index 9999a584a..7daf8c03f 100644 --- a/src/script/cpp_api/s_internal.h +++ b/src/script/cpp_api/s_internal.h @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "debug.h" // assert() class LockChecker { public: - LockChecker(bool* variable) { + LockChecker(bool *variable) { assert(*variable == false); m_variable = variable; @@ -44,7 +44,7 @@ public: *m_variable = false; } private: -bool* m_variable; + bool *m_variable; }; #define SCRIPTAPI_LOCK_CHECK LockChecker(&(this->m_locked)) @@ -53,7 +53,7 @@ bool* m_variable; #endif #define SCRIPTAPI_PRECHECKHEADER \ - JMutexAutoLock(this->m_luastackmutex); \ + MutexAutoLock(this->m_luastackmutex); \ SCRIPTAPI_LOCK_CHECK; \ realityCheck(); \ lua_State *L = getStack(); \ diff --git a/src/server.cpp b/src/server.cpp index dc7b101a6..009ea7b0e 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "ban.h" #include "environment.h" #include "map.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "constants.h" #include "voxel.h" #include "config.h" @@ -71,35 +71,29 @@ public: {} }; -class ServerThread : public JThread +class ServerThread : public Thread { - Server *m_server; - public: ServerThread(Server *server): - JThread(), + Thread("Server"), m_server(server) - { - } + {} - void * Thread(); + void *run(); + +private: + Server *m_server; }; -void *ServerThread::Thread() +void *ServerThread::run() { - log_register_thread("ServerThread"); - DSTACK(__FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER m_server->AsyncRunStep(true); - ThreadStarted(); - - porting::setThreadName("ServerThread"); - - while (!StopRequested()) { + while (!stopRequested()) { try { //TimeTaker timer("AsyncRunStep() + Receive()"); @@ -267,8 +261,8 @@ Server::Server( errorstream << std::endl; } - // Lock environment - JMutexAutoLock envlock(m_env_mutex); + //lock environment + MutexAutoLock envlock(m_env_mutex); // Load mapgen params from Settings m_emerge->loadMapgenParams(); @@ -379,7 +373,7 @@ Server::~Server() SendChatMessage(PEER_ID_INEXISTENT, L"*** Server shutting down"); { - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); // Execute script shutdown hooks m_script->on_shutdown(); @@ -447,14 +441,14 @@ void Server::start(Address bind_addr) << bind_addr.serializeString() <<"..."<Stop(); + m_thread->stop(); // Initialize connection m_con.SetTimeoutMs(30); m_con.Serve(bind_addr); // Start thread - m_thread->Start(); + m_thread->start(); // ASCII art for the win! actionstream @@ -477,9 +471,9 @@ void Server::stop() infostream<<"Server: Stopping and waiting threads"<Stop(); + m_thread->stop(); //m_emergethread.setRun(false); - m_thread->Wait(); + m_thread->wait(); //m_emergethread.stop(); infostream<<"Server: Threads stopped"< 2.0) dtime = 2.0; { - JMutexAutoLock lock(m_step_dtime_mutex); + MutexAutoLock lock(m_step_dtime_mutex); m_step_dtime += dtime; } // Throw if fatal error occurred in thread @@ -521,7 +515,7 @@ void Server::AsyncRunStep(bool initial_step) float dtime; { - JMutexAutoLock lock1(m_step_dtime_mutex); + MutexAutoLock lock1(m_step_dtime_mutex); dtime = m_step_dtime; } @@ -539,7 +533,7 @@ void Server::AsyncRunStep(bool initial_step) //infostream<<"Server::AsyncRunStep(): dtime="<getMaxLagEstimate(); max_lag *= 0.9998; // Decrease slowly (about half per 5 minutes) @@ -590,7 +584,7 @@ void Server::AsyncRunStep(bool initial_step) static const float map_timer_and_unload_dtime = 2.92; if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) { - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); // Run Map's timers and unload unused data ScopeProfiler sp(g_profiler, "Server: map timer and unload"); m_env->getMap().timerUpdate(map_timer_and_unload_dtime, @@ -608,7 +602,7 @@ void Server::AsyncRunStep(bool initial_step) { m_liquid_transform_timer -= m_liquid_transform_every; - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server: liquid transform"); @@ -669,9 +663,9 @@ void Server::AsyncRunStep(bool initial_step) */ { //infostream<<"Server: Checking added and deleted active objects"< clients = m_clients.getClientList(); ScopeProfiler sp(g_profiler, "Server: checking added and deleted objs"); @@ -792,14 +786,14 @@ void Server::AsyncRunStep(bool initial_step) << added_objects.size() << " added, " << "packet size is " << pktSize << std::endl; } - m_clients.Unlock(); + m_clients.unlock(); } /* Send object messages */ { - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server: sending object messages"); // Key = object id @@ -825,7 +819,7 @@ void Server::AsyncRunStep(bool initial_step) message_list->push_back(aom); } - m_clients.Lock(); + m_clients.lock(); std::map clients = m_clients.getClientList(); // Route data to every client for (std::map::iterator @@ -876,7 +870,7 @@ void Server::AsyncRunStep(bool initial_step) SendActiveObjectMessages(client->peer_id, unreliable_data, false); } } - m_clients.Unlock(); + m_clients.unlock(); // Clear buffered_messages for(std::map* >::iterator @@ -891,7 +885,7 @@ void Server::AsyncRunStep(bool initial_step) */ { // We will be accessing the environment - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); // Don't send too many at a time //u32 count = 0; @@ -1012,7 +1006,7 @@ void Server::AsyncRunStep(bool initial_step) if(counter >= g_settings->getFloat("server_map_save_interval")) { counter = 0.0; - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server: saving stuff"); @@ -1068,7 +1062,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) { std::string playername = ""; PlayerSAO *playersao = NULL; - m_clients.Lock(); + m_clients.lock(); try { RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone); if (client != NULL) { @@ -1076,10 +1070,10 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) playersao = emergePlayer(playername.c_str(), peer_id, client->net_proto_version); } } catch (std::exception &e) { - m_clients.Unlock(); + m_clients.unlock(); throw; } - m_clients.Unlock(); + m_clients.unlock(); RemotePlayer *player = static_cast(m_env->getPlayer(playername.c_str())); @@ -1174,7 +1168,7 @@ void Server::ProcessData(NetworkPacket *pkt) { DSTACK(__FUNCTION_NAME); // Environment is locked first. - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server::ProcessData"); u32 peer_id = pkt->getPeerId(); @@ -1356,14 +1350,14 @@ void Server::setInventoryModified(const InventoryLocation &loc, bool playerSend) void Server::SetBlocksNotSent(std::map& block) { std::vector clients = m_clients.getClientIDs(); - m_clients.Lock(); + m_clients.lock(); // Set the modified blocks unsent for all the clients for (std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { if (RemoteClient *client = m_clients.lockedGetClientNoEx(*i)) client->SetBlocksNotSent(block); } - m_clients.Unlock(); + m_clients.unlock(); } void Server::peerAdded(con::Peer *peer) @@ -1413,11 +1407,11 @@ bool Server::getClientInfo( ) { *state = m_clients.getClientState(peer_id); - m_clients.Lock(); + m_clients.lock(); RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_Invalid); if (client == NULL) { - m_clients.Unlock(); + m_clients.unlock(); return false; } @@ -1430,7 +1424,7 @@ bool Server::getClientInfo( *patch = client->getPatch(); *vers_string = client->getPatch(); - m_clients.Unlock(); + m_clients.unlock(); return true; } @@ -2098,7 +2092,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, } NetworkPacket pkt(TOCLIENT_ADDNODE, 6 + 2 + 1 + 1 + 1); - m_clients.Lock(); + m_clients.lock(); RemoteClient* client = m_clients.lockedGetClientNoEx(*i); if (client != 0) { pkt << p << n.param0 << n.param1 << n.param2 @@ -2112,7 +2106,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, } } } - m_clients.Unlock(); + m_clients.unlock(); // Send as reliable if (pkt.getSize() > 0) @@ -2123,13 +2117,13 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, void Server::setBlockNotSent(v3s16 p) { std::vector clients = m_clients.getClientIDs(); - m_clients.Lock(); + m_clients.lock(); for(std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { RemoteClient *client = m_clients.lockedGetClientNoEx(*i); client->SetBlockNotSent(p); } - m_clients.Unlock(); + m_clients.unlock(); } void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto_version) @@ -2158,7 +2152,7 @@ void Server::SendBlocks(float dtime) { DSTACK(__FUNCTION_NAME); - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); //TODO check if one big lock could be faster then multiple small ones ScopeProfiler sp(g_profiler, "Server: sel and send blocks to clients"); @@ -2172,7 +2166,7 @@ void Server::SendBlocks(float dtime) std::vector clients = m_clients.getClientIDs(); - m_clients.Lock(); + m_clients.lock(); for(std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { RemoteClient *client = m_clients.lockedGetClientNoEx(*i, CS_Active); @@ -2183,7 +2177,7 @@ void Server::SendBlocks(float dtime) total_sending += client->SendingCount(); client->GetNextBlocks(m_env,m_emerge, dtime, queue); } - m_clients.Unlock(); + m_clients.unlock(); } // Sort. @@ -2191,7 +2185,7 @@ void Server::SendBlocks(float dtime) // Lowest is most important. std::sort(queue.begin(), queue.end()); - m_clients.Lock(); + m_clients.lock(); for(u32 i=0; iSentBlock(q.pos); total_sending++; } - m_clients.Unlock(); + m_clients.unlock(); } void Server::fillMediaCache() @@ -2702,7 +2696,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) } } { - JMutexAutoLock env_lock(m_env_mutex); + MutexAutoLock env_lock(m_env_mutex); m_clients.DeleteClient(peer_id); } } diff --git a/src/server.h b/src/server.h index d16230967..26ec3ab73 100644 --- a/src/server.h +++ b/src/server.h @@ -516,7 +516,7 @@ private: // Environment ServerEnvironment *m_env; - JMutex m_env_mutex; + Mutex m_env_mutex; // server connection con::Connection m_con; @@ -557,7 +557,7 @@ private: // A buffer for time steps // step() increments and AsyncRunStep() run by m_thread reads it. float m_step_dtime; - JMutex m_step_dtime_mutex; + Mutex m_step_dtime_mutex; // current server step lag counter float m_lag; diff --git a/src/settings.cpp b/src/settings.cpp index e95bd436d..3d4d56fa3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "irrlichttypes_bloated.h" #include "exceptions.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "strfnd.h" #include #include @@ -56,8 +56,8 @@ Settings & Settings::operator = (const Settings &other) if (&other == this) return *this; - JMutexAutoLock lock(m_mutex); - JMutexAutoLock lock2(other.m_mutex); + MutexAutoLock lock(m_mutex); + MutexAutoLock lock2(other.m_mutex); clearNoLock(); updateNoLock(other); @@ -155,7 +155,7 @@ bool Settings::readConfigFile(const char *filename) bool Settings::parseConfigLines(std::istream &is, const std::string &end) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::string line, name, value; @@ -194,7 +194,7 @@ bool Settings::parseConfigLines(std::istream &is, const std::string &end) void Settings::writeLines(std::ostream &os, u32 tab_depth) const { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for (std::map::const_iterator it = m_settings.begin(); @@ -298,7 +298,7 @@ bool Settings::updateConfigObject(std::istream &is, std::ostream &os, bool Settings::updateConfigFile(const char *filename) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::ifstream is(filename); std::ostringstream os(std::ios_base::binary); @@ -379,7 +379,7 @@ bool Settings::parseCommandLine(int argc, char *argv[], const SettingsEntry &Settings::getEntry(const std::string &name) const { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::map::const_iterator n; if ((n = m_settings.find(name)) == m_settings.end()) { @@ -562,7 +562,7 @@ bool Settings::getNoiseParamsFromGroup(const std::string &name, bool Settings::exists(const std::string &name) const { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return (m_settings.find(name) != m_settings.end() || m_defaults.find(name) != m_defaults.end()); @@ -742,7 +742,7 @@ bool Settings::setEntry(const std::string &name, const void *data, return false; { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); SettingsEntry &entry = set_default ? m_defaults[name] : m_settings[name]; old_group = entry.group; @@ -878,7 +878,7 @@ bool Settings::setNoiseParams(const std::string &name, bool Settings::remove(const std::string &name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); delete m_settings[name].group; return m_settings.erase(name); @@ -887,13 +887,13 @@ bool Settings::remove(const std::string &name) void Settings::clear() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); clearNoLock(); } void Settings::clearDefaults() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); clearDefaultsNoLock(); } @@ -902,7 +902,7 @@ void Settings::updateValue(const Settings &other, const std::string &name) if (&other == this) return; - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); try { std::string val = other.get(name); @@ -918,8 +918,8 @@ void Settings::update(const Settings &other) if (&other == this) return; - JMutexAutoLock lock(m_mutex); - JMutexAutoLock lock2(other.m_mutex); + MutexAutoLock lock(m_mutex); + MutexAutoLock lock2(other.m_mutex); updateNoLock(other); } @@ -982,13 +982,13 @@ void Settings::clearDefaultsNoLock() void Settings::registerChangedCallback(std::string name, setting_changed_callback cbf, void *userdata) { - JMutexAutoLock lock(m_callbackMutex); + MutexAutoLock lock(m_callbackMutex); m_callbacks[name].push_back(std::make_pair(cbf, userdata)); } void Settings::deregisterChangedCallback(std::string name, setting_changed_callback cbf, void *userdata) { - JMutexAutoLock lock(m_callbackMutex); + MutexAutoLock lock(m_callbackMutex); std::map > >::iterator iterToVector = m_callbacks.find(name); if (iterToVector != m_callbacks.end()) { @@ -1004,7 +1004,7 @@ void Settings::deregisterChangedCallback(std::string name, setting_changed_callb void Settings::doCallbacks(const std::string name) { - JMutexAutoLock lock(m_callbackMutex); + MutexAutoLock lock(m_callbackMutex); std::map > >::iterator iterToVector = m_callbacks.find(name); if (iterToVector != m_callbacks.end()) { diff --git a/src/settings.h b/src/settings.h index d41f134cd..80d41fd79 100644 --- a/src/settings.h +++ b/src/settings.h @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "util/string.h" -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include #include #include @@ -225,8 +225,8 @@ private: std::map > > m_callbacks; - mutable JMutex m_callbackMutex; - mutable JMutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this. + mutable Mutex m_callbackMutex; + mutable Mutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this. }; diff --git a/src/shader.cpp b/src/shader.cpp index 7e4f40810..e441883fb 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -328,7 +328,7 @@ private: // The first position contains a dummy shader. std::vector m_shaderinfo_cache; // The former container is behind this mutex - JMutex m_shaderinfo_cache_mutex; + Mutex m_shaderinfo_cache_mutex; // Queued shader fetches (to be processed by the main thread) RequestQueue m_get_shader_queue; @@ -469,7 +469,7 @@ u32 ShaderSource::getShaderIdDirect(const std::string &name, Add shader to caches (add dummy shaders too) */ - JMutexAutoLock lock(m_shaderinfo_cache_mutex); + MutexAutoLock lock(m_shaderinfo_cache_mutex); u32 id = m_shaderinfo_cache.size(); m_shaderinfo_cache.push_back(info); @@ -483,7 +483,7 @@ u32 ShaderSource::getShaderIdDirect(const std::string &name, ShaderInfo ShaderSource::getShaderInfo(u32 id) { - JMutexAutoLock lock(m_shaderinfo_cache_mutex); + MutexAutoLock lock(m_shaderinfo_cache_mutex); if(id >= m_shaderinfo_cache.size()) return ShaderInfo(); @@ -511,7 +511,7 @@ void ShaderSource::insertSourceShader(const std::string &name_of_shader, void ShaderSource::rebuildShaders() { - JMutexAutoLock lock(m_shaderinfo_cache_mutex); + MutexAutoLock lock(m_shaderinfo_cache_mutex); /*// Oh well... just clear everything, they'll load sometime. m_shaderinfo_cache.clear(); diff --git a/src/threading/CMakeLists.txt b/src/threading/CMakeLists.txt new file mode 100644 index 000000000..f3d0efc18 --- /dev/null +++ b/src/threading/CMakeLists.txt @@ -0,0 +1,6 @@ +set(JTHREAD_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/mutex.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/thread.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/semaphore.cpp + PARENT_SCOPE) + diff --git a/src/threading/atomic.h b/src/threading/atomic.h new file mode 100644 index 000000000..486bc7950 --- /dev/null +++ b/src/threading/atomic.h @@ -0,0 +1,96 @@ +/* +Minetest +Copyright (C) 2015 ShadowNinja + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef THREADING_ATOMIC_H +#define THREADING_ATOMIC_H + + +#if __cplusplus >= 201103L + #include + template using Atomic = std::atomic; +#else + +#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#define CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) +#if GCC_VERSION >= 407 || CLANG_VERSION >= 302 + #define ATOMIC_LOAD(T, v) return __atomic_load_n(&(v), __ATOMIC_SEQ_CST) + #define ATOMIC_STORE(T, v, x) __atomic_store (&(v), &(x), __ATOMIC_SEQ_CST); return x + #define ATOMIC_ADD_EQ(T, v, x) return __atomic_add_fetch(&(v), (x), __ATOMIC_SEQ_CST) + #define ATOMIC_SUB_EQ(T, v, x) return __atomic_sub_fetch(&(v), (x), __ATOMIC_SEQ_CST) + #define ATOMIC_POST_INC(T, v) return __atomic_fetch_add(&(v), 1, __ATOMIC_SEQ_CST) + #define ATOMIC_POST_DEC(T, v) return __atomic_fetch_sub(&(v), 1, __ATOMIC_SEQ_CST) +#else + #define ATOMIC_USE_LOCK + #include "threading/mutex.h" + + #define ATOMIC_LOCK_OP(T, op) do { \ + mutex.lock(); \ + T _val = (op); \ + mutex.unlock(); \ + return _val; \ + } while (0) + #define ATOMIC_LOAD(T, v) \ + if (sizeof(T) <= sizeof(void*)) return v; \ + else ATOMIC_LOCK_OP(T, v); + #define ATOMIC_STORE(T, v, x) \ + if (sizeof(T) <= sizeof(void*)) return v = x; \ + else ATOMIC_LOCK_OP(T, v = x); +# if GCC_VERSION >= 401 + #define ATOMIC_ADD_EQ(T, v, x) return __sync_add_and_fetch(&(v), (x)) + #define ATOMIC_SUB_EQ(T, v, x) return __sync_sub_and_fetch(&(v), (x)) + #define ATOMIC_POST_INC(T, v) return __sync_fetch_and_add(&(v), 1) + #define ATOMIC_POST_DEC(T, v) return __sync_fetch_and_sub(&(v), 1) +# else + #define ATOMIC_ADD_EQ(T, v, x) ATOMIC_LOCK_OP(T, v += x) + #define ATOMIC_SUB_EQ(T, v, x) ATOMIC_LOCK_OP(T, v -= x) + #define ATOMIC_POST_INC(T, v) ATOMIC_LOCK_OP(T, v++) + #define ATOMIC_POST_DEC(T, v) ATOMIC_LOCK_OP(T, v--) +# endif +#endif + + +template +class Atomic +{ + // Like C++11 std::enable_if, but defaults to char since C++03 doesn't support SFINAE + template struct enable_if { typedef char type; }; + template struct enable_if { typedef T_ type; }; +public: + Atomic(const T &v=0) : val(v) {} + + operator T () { ATOMIC_LOAD(T, val); } + T operator = (T x) { ATOMIC_STORE(T, val, x); } + T operator += (T x) { ATOMIC_ADD_EQ(T, val, x); } + T operator -= (T x) { ATOMIC_SUB_EQ(T, val, x); } + T operator ++ () { return *this += 1; } + T operator -- () { return *this -= 1; } + T operator ++ (int) { ATOMIC_POST_INC(T, val); } + T operator -- (int) { ATOMIC_POST_DEC(T, val); } + +private: + volatile T val; +#ifdef ATOMIC_USE_LOCK + typename enable_if::type mutex; +#endif +}; + +#endif // C++11 + +#endif + diff --git a/src/threading/event.h b/src/threading/event.h new file mode 100644 index 000000000..0105630e5 --- /dev/null +++ b/src/threading/event.h @@ -0,0 +1,57 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_EVENT_H +#define THREADING_EVENT_H + +#ifdef _WIN32 + #include +#else + #include "threading/semaphore.h" +#endif + + +class Event { +public: +#ifdef _WIN32 + Event() { event = CreateEvent(NULL, false, false, NULL); } + ~Event() { CloseHandle(event); } + void wait() { WaitForSingleObject(event, INFINITE); } + void signal() { SetEvent(event); } +#else + void wait() { sem.wait(); } + void signal() { sem.post(); } +#endif + +private: +#ifdef _WIN32 + HANDLE event; +#else + Semaphore sem; +#endif +}; + +#endif + diff --git a/src/threading/mutex.cpp b/src/threading/mutex.cpp new file mode 100644 index 000000000..eb1c7d61d --- /dev/null +++ b/src/threading/mutex.cpp @@ -0,0 +1,83 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +// Windows std::mutex is much slower than the critical section API +#if __cplusplus < 201103L || defined(_WIN32) + +#include "threading/mutex.h" + +#ifndef _WIN32 + #include +#endif + +#define UNUSED(expr) do { (void)(expr); } while (0) + + +Mutex::Mutex() +{ +#ifdef _WIN32 + InitializeCriticalSection(&mutex); +#else + int ret = pthread_mutex_init(&mutex, NULL); + assert(!ret); + UNUSED(ret); +#endif +} + +Mutex::~Mutex() +{ +#ifdef _WIN32 + DeleteCriticalSection(&mutex); +#else + int ret = pthread_mutex_destroy(&mutex); + assert(!ret); + UNUSED(ret); +#endif +} + +void Mutex::lock() +{ +#ifdef _WIN32 + EnterCriticalSection(&mutex); +#else + int ret = pthread_mutex_lock(&mutex); + assert(!ret); + UNUSED(ret); +#endif +} + +void Mutex::unlock() +{ +#ifdef _WIN32 + LeaveCriticalSection(&mutex); +#else + int ret = pthread_mutex_unlock(&mutex); + assert(!ret); + UNUSED(ret); +#endif +} + +#endif + diff --git a/src/threading/mutex.h b/src/threading/mutex.h new file mode 100644 index 000000000..4c9af71bf --- /dev/null +++ b/src/threading/mutex.h @@ -0,0 +1,66 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_MUTEX_H +#define THREADING_MUTEX_H + +// Windows std::mutex is much slower than the critical section API +#if __cplusplus >= 201103L && !defined(_WIN32) + #include + using Mutex = std::mutex; +#else + +#ifdef _WIN32 + #ifndef _WIN32_WINNT + #define _WIN32_WINNT 0x0501 + #endif + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #include +#else // pthread + #include +#endif + + +class Mutex +{ +public: + Mutex(); + ~Mutex(); + void lock(); + void unlock(); + +private: +#ifdef _WIN32 + CRITICAL_SECTION mutex; +#else // pthread + pthread_mutex_t mutex; +#endif +}; + +#endif // C++11 + +#endif diff --git a/src/jthread/LICENSE.MIT b/src/threading/mutex_auto_lock.h similarity index 52% rename from src/jthread/LICENSE.MIT rename to src/threading/mutex_auto_lock.h index 2aa4fd57b..1c39349e5 100644 --- a/src/jthread/LICENSE.MIT +++ b/src/threading/mutex_auto_lock.h @@ -1,4 +1,8 @@ -The license of JThread: +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -7,14 +11,40 @@ the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_MUTEX_AUTO_LOCK_H +#define THREADING_MUTEX_AUTO_LOCK_H + +#if __cplusplus >= 201103L + #include + using MutexAutoLock = std::lock_guard; +#else + +#include "threading/mutex.h" + + +class MutexAutoLock +{ +public: + MutexAutoLock(Mutex &m) : mutex(m) { mutex.lock(); } + ~MutexAutoLock() { mutex.unlock(); } + +private: + Mutex &mutex; +}; + +#endif + +#endif diff --git a/src/threading/semaphore.cpp b/src/threading/semaphore.cpp new file mode 100644 index 000000000..00332eaa0 --- /dev/null +++ b/src/threading/semaphore.cpp @@ -0,0 +1,161 @@ +/* +Minetest +Copyright (C) 2013 sapier + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "threading/semaphore.h" + +#include +#include +#include + +#define UNUSED(expr) do { (void)(expr); } while (0) + +#ifdef _WIN32 + #define MAX_SEMAPHORE_COUNT LONG_MAX - 1 +#else + #include + #include + #include + #if defined(__MACH__) && defined(__APPLE__) + #include + #include + #include + #include + #include + + #undef sem_t + #undef sem_init + #undef sem_wait + #undef sem_post + #undef sem_destroy + #define sem_t semaphore_t + #define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c)) + #define sem_wait(s) semaphore_wait(*(s)) + #define sem_post(s) semaphore_signal(*(s)) + #define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s)) + #endif +#endif + + +Semaphore::Semaphore(int val) +{ +#ifdef _WIN32 + semaphore = CreateSemaphore(NULL, val, MAX_SEMAPHORE_COUNT, NULL); +#else + int ret = sem_init(&semaphore, 0, val); + assert(!ret); + UNUSED(ret); +#endif +} + + +Semaphore::~Semaphore() +{ +#ifdef _WIN32 + CloseHandle(semaphore); +#else + int ret = sem_destroy(&semaphore); +#ifdef __ANDROID__ + // Workaround for broken bionic semaphore implementation! + assert(!ret || errno == EBUSY); +#else + assert(!ret); +#endif + UNUSED(ret); +#endif +} + + +void Semaphore::post(unsigned int num) +{ + assert(num > 0); +#ifdef _WIN32 + ReleaseSemaphore(semaphore, num, NULL); +#else + for (unsigned i = 0; i < num; i++) { + int ret = sem_post(&semaphore); + assert(!ret); + UNUSED(ret); + } +#endif +} + + +void Semaphore::wait() +{ +#ifdef _WIN32 + WaitForSingleObject(semaphore, INFINITE); +#else + int ret = sem_wait(&semaphore); + assert(!ret); + UNUSED(ret); +#endif +} + + +bool Semaphore::wait(unsigned int time_ms) +{ +#ifdef _WIN32 + unsigned int ret = WaitForSingleObject(semaphore, time_ms); + + if (ret == WAIT_OBJECT_0) { + return true; + } else { + assert(ret == WAIT_TIMEOUT); + return false; + } +#else +# if defined(__MACH__) && defined(__APPLE__) + mach_timespec_t wait_time; + wait_time.tv_sec = time_ms / 1000; + wait_time.tv_nsec = 1000000 * (time_ms % 1000); + + errno = 0; + int ret = semaphore_timedwait(semaphore, wait_time); + switch (ret) { + case KERN_OPERATION_TIMED_OUT: + errno = ETIMEDOUT; + break; + case KERN_ABORTED: + errno = EINTR; + break; + default: + if (ret) + errno = EINVAL; + } +# else + struct timespec wait_time; + struct timeval now; + + if (gettimeofday(&now, NULL) == -1) { + std::cerr << "Semaphore::wait(ms): Unable to get time with gettimeofday!" << std::endl; + abort(); + } + + wait_time.tv_nsec = ((time_ms % 1000) * 1000 * 1000) + (now.tv_usec * 1000); + wait_time.tv_sec = (time_ms / 1000) + (wait_time.tv_nsec / (1000 * 1000 * 1000)) + now.tv_sec; + wait_time.tv_nsec %= 1000 * 1000 * 1000; + + int ret = sem_timedwait(&semaphore, &wait_time); +# endif + + assert(!ret || (errno == ETIMEDOUT || errno == EINTR)); + return !ret; +#endif +} + diff --git a/src/jthread/jsemaphore.h b/src/threading/semaphore.h similarity index 57% rename from src/jthread/jsemaphore.h rename to src/threading/semaphore.h index 32e9bc2f2..58d758f2e 100644 --- a/src/jthread/jsemaphore.h +++ b/src/threading/semaphore.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2013 sapier, < sapier AT gmx DOT net > +Copyright (C) 2013 sapier This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,48 +17,36 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef JSEMAPHORE_H_ -#define JSEMAPHORE_H_ +#ifndef THREADING_SEMAPHORE_H +#define THREADING_SEMAPHORE_H -#if defined(WIN32) -#include -#include -#define MAX_SEMAPHORE_COUNT 1024 +#if defined(_WIN32) + #include #elif defined(__MACH__) && defined(__APPLE__) -#include -#include -#include -#include -#include -#include -#include + #include #else -#include -#include + #include #endif -class JSemaphore { + +class Semaphore { public: - JSemaphore(); - ~JSemaphore(); - JSemaphore(int initval); + Semaphore(int val=0); + ~Semaphore(); - void Post(); - void Wait(); - bool Wait(unsigned int time_ms); - - int GetValue(); + void post(unsigned int num=1); + void wait(); + bool wait(unsigned int time_ms); private: #if defined(WIN32) - HANDLE m_hSemaphore; + HANDLE semaphore; #elif defined(__MACH__) && defined(__APPLE__) - semaphore_t m_semaphore; - int semcount; + semaphore_t semaphore; #else - sem_t m_semaphore; + sem_t semaphore; #endif }; +#endif -#endif /* JSEMAPHORE_H_ */ diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp new file mode 100644 index 000000000..a1cb720af --- /dev/null +++ b/src/threading/thread.cpp @@ -0,0 +1,354 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#include "threading/thread.h" +#include "threading/mutex_auto_lock.h" +#include "log.h" + +#if __cplusplus >= 201103L + #include +#else + #define UNUSED(expr) do { (void)(expr); } while (0) +# ifdef _WIN32 +# ifndef _WIN32_WCE + #include +# endif +# else + #include + #include + #include + #include + + // For getNumberOfProcessors + #include +# if defined(__FreeBSD__) || defined(__APPLE__) + #include + #include +# elif defined(_GNU_SOURCE) + #include +# endif +# endif +#endif + + +// For setName +#if defined(linux) || defined(__linux) + #include +#elif defined(__FreeBSD__) || defined(__OpenBSD__) + #include +#elif defined(_MSC_VER) + struct THREADNAME_INFO { + DWORD dwType; // Must be 0x1000 + LPCSTR szName; // Pointer to name (in user addr space) + DWORD dwThreadID; // Thread ID (-1=caller thread) + DWORD dwFlags; // Reserved for future use, must be zero + }; +#endif + +// For bindToProcessor +#if __FreeBSD_version >= 702106 + typedef cpuset_t cpu_set_t; +#elif defined(__linux) || defined(linux) + #include +#elif defined(__sun) || defined(sun) + #include + #include + #include +#elif defined(_AIX) + #include +#elif defined(__APPLE__) + #include + #include +#endif + + +Thread::Thread(const std::string &name) : + name(name), + retval(NULL), + request_stop(false), + running(false) +#if __cplusplus >= 201103L + , thread(NULL) +#elif !defined(_WIN32) + , started(false) +#endif +{} + + +void Thread::wait() +{ +#if __cplusplus >= 201103L + if (!thread || !thread->joinable()) + return; + thread->join(); +#elif defined(_WIN32) + if (!running) + return; + WaitForSingleObject(thread, INFINITE); +#else // pthread + void *status; + if (!started) + return; + int ret = pthread_join(thread, &status); + assert(!ret); + UNUSED(ret); + started = false; +#endif +} + + +bool Thread::start() +{ + if (running) + return false; + request_stop = false; + +#if __cplusplus >= 201103L + MutexAutoLock l(continue_mutex); + thread = new std::thread(theThread, this); +#elif defined(_WIN32) + MutexAutoLock l(continue_mutex); +# ifdef _WIN32_WCE + thread = CreateThread(NULL, 0, theThread, this, 0, &thread_id); +# else + thread = (HANDLE)_beginthreadex(NULL, 0, theThread, this, 0, &thread_id); +# endif + if (!thread) + return false; +#else + int status; + + MutexAutoLock l(continue_mutex); + + status = pthread_create(&thread, NULL, theThread, this); + + if (status) + return false; +#endif + +#if __cplusplus < 201103L + // Wait until running + while (!running) { +# ifdef _WIN32 + Sleep(1); + } +# else + struct timespec req, rem; + req.tv_sec = 0; + req.tv_nsec = 1000000; + nanosleep(&req, &rem); + } + started = true; +# endif +#endif + return true; +} + + +bool Thread::kill() +{ +#ifdef _WIN32 + if (!running) + return false; + TerminateThread(getThreadHandle(), 0); + CloseHandle(getThreadHandle()); +#else + if (!running) { + wait(); + return false; + } +# ifdef __ANDROID__ + pthread_kill(getThreadHandle(), SIGKILL); +# else + pthread_cancel(getThreadHandle()); +# endif + wait(); +#endif +#if __cplusplus >= 201103L + delete thread; +#endif + running = false; + return true; +} + + +bool Thread::isSameThread() +{ +#if __cplusplus >= 201103L + return thread->get_id() == std::this_thread::get_id(); +#elif defined(_WIN32) + return GetCurrentThreadId() == thread_id; +#else + return pthread_equal(pthread_self(), thread); +#endif +} + + +#if __cplusplus >= 201103L +void Thread::theThread(Thread *th) +#elif defined(_WIN32_WCE) +DWORD WINAPI Thread::theThread(void *param) +#elif defined(_WIN32) +UINT __stdcall Thread::theThread(void *param) +#else +void *Thread::theThread(void *param) +#endif +{ +#if __cplusplus < 201103L + Thread *th = static_cast(param); +#endif + th->running = true; + + th->setName(); + log_register_thread(th->name); + + th->retval = th->run(); + + log_deregister_thread(); + + th->running = false; +#if __cplusplus < 201103L +# ifdef _WIN32 + CloseHandle(th->thread); +# endif + return NULL; +#endif +} + + +void Thread::setName(const std::string &name) +{ +#if defined(linux) || defined(__linux) + /* It would be cleaner to do this with pthread_setname_np, + * which was added to glibc in version 2.12, but some major + * distributions are still runing 2.11 and previous versions. + */ + prctl(PR_SET_NAME, name.c_str()); +#elif defined(__FreeBSD__) || defined(__OpenBSD__) + pthread_set_name_np(pthread_self(), name.c_str()); +#elif defined(__NetBSD__) + pthread_setname_np(pthread_self(), name.c_str()); +#elif defined(__APPLE__) + pthread_setname_np(name.c_str()); +#elif defined(_MSC_VER) + // Windows itself doesn't support thread names, + // but the MSVC debugger does... + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = name.c_str(); + info.dwThreadID = -1; + info.dwFlags = 0; + __try { + RaiseException(0x406D1388, 0, sizeof(info) / sizeof(DWORD), (ULONG_PTR *)&info); + } __except (EXCEPTION_CONTINUE_EXECUTION) { + } +#elif defined(_WIN32) || defined(__GNU__) + // These platforms are known to not support thread names. + // Silently ignore the request. +#else + #warning "Unrecognized platform, thread names will not be available." +#endif +} + + +unsigned int Thread::getNumberOfProcessors() +{ +#if __cplusplus >= 201103L + return std::thread::hardware_concurrency(); +#elif defined(_SC_NPROCESSORS_ONLN) + return sysconf(_SC_NPROCESSORS_ONLN); +#elif defined(__FreeBSD__) || defined(__APPLE__) + unsigned int len, count; + len = sizeof(count); + return sysctlbyname("hw.ncpu", &count, &len, NULL, 0); +#elif defined(_GNU_SOURCE) + return get_nprocs(); +#elif defined(_WIN32) + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; +#elif defined(PTW32_VERSION) || defined(__hpux) + return pthread_num_processors_np(); +#else + return 1; +#endif +} + + +bool Thread::bindToProcessor(unsigned int num) +{ +#if defined(__ANDROID__) + return false; +#elif defined(_WIN32) + return SetThreadAffinityMask(getThreadHandle(), 1 << num); +#elif __FreeBSD_version >= 702106 || defined(__linux) || defined(linux) + cpu_set_t cpuset; + CPU_ZERO(&cpuset); + CPU_SET(num, &cpuset); + return pthread_setaffinity_np(getThreadHandle(), sizeof(cpuset), + &cpuset) == 0; +#elif defined(__sun) || defined(sun) + return processor_bind(P_LWPID, MAKE_LWPID_PTHREAD(getThreadHandle()), + num, NULL) == 0 +#elif defined(_AIX) + return bindprocessor(BINDTHREAD, (tid_t) getThreadHandle(), pnumber) == 0; +#elif defined(__hpux) || defined(hpux) + pthread_spu_t answer; + + return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP, + &answer, num, getThreadHandle()) == 0; +#elif defined(__APPLE__) + struct thread_affinity_policy tapol; + + thread_port_t threadport = pthread_mach_thread_np(getThreadHandle()); + tapol.affinity_tag = num + 1; + return thread_policy_set(threadport, THREAD_AFFINITY_POLICY, + (thread_policy_t)&tapol, + THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS; +#else + return false; +#endif +} + + +bool Thread::setPriority(int prio) +{ +#if defined(_WIN32) + return SetThreadPriority(getThreadHandle(), prio); +#else + struct sched_param sparam; + int policy; + + if (pthread_getschedparam(getThreadHandle(), &policy, &sparam) != 0) + return false; + + int min = sched_get_priority_min(policy); + int max = sched_get_priority_max(policy); + + sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST; + return pthread_setschedparam(getThreadHandle(), policy, &sparam) == 0; +#endif +} + diff --git a/src/threading/thread.h b/src/threading/thread.h new file mode 100644 index 000000000..275bc9b6d --- /dev/null +++ b/src/threading/thread.h @@ -0,0 +1,119 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_THREAD_H +#define THREADING_THREAD_H + +#include "threading/atomic.h" +#include "threading/mutex.h" + +#include +#if __cplusplus >= 201103L + #include +#endif + +#ifndef _WIN32 +enum { + THREAD_PRIORITY_LOWEST, + THREAD_PRIORITY_BELOW_NORMAL, + THREAD_PRIORITY_NORMAL, + THREAD_PRIORITY_ABOVE_NORMAL, + THREAD_PRIORITY_HIGHEST, +}; +#endif + + +class Thread +{ +public: + Thread(const std::string &name="Unnamed"); + virtual ~Thread() { kill(); } + + bool start(); + inline void stop() { request_stop = true; } + bool kill(); + + inline bool isRunning() { return running; } + inline bool stopRequested() { return request_stop; } + void *getReturnValue() { return running ? NULL : retval; } + bool isSameThread(); + + static unsigned int getNumberOfProcessors(); + bool bindToProcessor(unsigned int); + bool setPriority(int); + + /* + * Wait for thread to finish. + * Note: this does not stop a thread, you have to do this on your own. + * Returns immediately if the thread is not started. + */ + void wait(); + + static void setName(const std::string &name); + +protected: + std::string name; + + virtual void *run() = 0; + +private: + void setName() { setName(name); } + + void *retval; + Atomic request_stop; + Atomic running; + Mutex continue_mutex; + +#if __cplusplus >= 201103L + static void theThread(Thread *th); + + std::thread *thread; + std::thread::native_handle_type getThreadHandle() const + { return thread->native_handle(); } +#else +# if defined(WIN32) || defined(_WIN32_WCE) +# ifdef _WIN32_WCE + DWORD thread_id; + static DWORD WINAPI theThread(void *param); +# else + UINT thread_id; + static UINT __stdcall theThread(void *param); +# endif + + HANDLE thread; + HANDLE getThreadHandle() const { return thread; } +# else // pthread + static void *theThread(void *param); + + pthread_t thread; + pthread_t getThreadHandle() const { return thread; } + + Atomic started; +# endif +#endif +}; + +#endif + diff --git a/src/threads.h b/src/threads.h index 503fa6abf..bc3bf571d 100644 --- a/src/threads.h +++ b/src/threads.h @@ -20,9 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef THREADS_HEADER #define THREADS_HEADER -#include "jthread/jmutex.h" +#include "threading/mutex.h" -#if (defined(WIN32) || defined(_WIN32_WCE)) +#if defined(WIN32) || defined(_WIN32_WCE) typedef DWORD threadid_t; #else typedef pthread_t threadid_t; @@ -30,7 +30,7 @@ typedef pthread_t threadid_t; inline threadid_t get_current_thread_id() { -#if (defined(WIN32) || defined(_WIN32_WCE)) +#if defined(WIN32) || defined(_WIN32_WCE) return GetCurrentThreadId(); #else return pthread_self(); diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index bdff14f05..a07ed8ba5 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -17,6 +17,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_serialization.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_socket.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_threading.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_utilities.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelalgorithms.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelmanipulator.cpp diff --git a/src/unittest/test_threading.cpp b/src/unittest/test_threading.cpp new file mode 100644 index 000000000..a5d98f0a6 --- /dev/null +++ b/src/unittest/test_threading.cpp @@ -0,0 +1,85 @@ +/* +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 "test.h" + +#include "threading/atomic.h" +#include "threading/semaphore.h" +#include "threading/thread.h" + + +class TestThreading : public TestBase { +public: + TestThreading() { TestManager::registerTestModule(this); } + const char *getName() { return "TestThreading"; } + void runTests(IGameDef *); + void testAtomicSemaphoreThread(); +}; + +static TestThreading g_test_instance; + +void TestThreading::runTests(IGameDef *) +{ + TEST(testAtomicSemaphoreThread); +} + + +class AtomicTestThread : public Thread +{ +public: + AtomicTestThread(Atomic &v, Semaphore &trigger) : + Thread("AtomicTest"), + val(v), + trigger(trigger) + {} +private: + void *run() + { + trigger.wait(); + for (u32 i = 0; i < 0x10000; ++i) + ++val; + return NULL; + } + Atomic &val; + Semaphore &trigger; +}; + + +void TestThreading::testAtomicSemaphoreThread() +{ + Atomic val; + Semaphore trigger; + static const u8 num_threads = 4; + + AtomicTestThread *threads[num_threads]; + for (u8 i = 0; i < num_threads; ++i) { + threads[i] = new AtomicTestThread(val, trigger); + UASSERT(threads[i]->start()); + } + + trigger.post(num_threads); + + for (u8 i = 0; i < num_threads; ++i) { + threads[i]->wait(); + delete threads[i]; + } + + UASSERT(val == num_threads * 0x10000); +} + diff --git a/src/util/container.h b/src/util/container.h index 267d54c16..7f66b89ac 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -22,9 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irrlichttypes.h" #include "../exceptions.h" -#include "../jthread/jmutex.h" -#include "../jthread/jmutexautolock.h" -#include "../jthread/jsemaphore.h" +#include "../threading/mutex.h" +#include "../threading/mutex_auto_lock.h" +#include "../threading/semaphore.h" #include #include #include @@ -81,111 +81,47 @@ template class MutexedMap { public: - MutexedMap() - { - } + MutexedMap() {} void set(const Key &name, const Value &value) { - JMutexAutoLock lock(m_mutex); - + MutexAutoLock lock(m_mutex); m_values[name] = value; } - bool get(const Key &name, Value *result) + bool get(const Key &name, Value *result) const { - JMutexAutoLock lock(m_mutex); - - typename std::map::iterator n; - n = m_values.find(name); - - if(n == m_values.end()) + MutexAutoLock lock(m_mutex); + typename std::map::const_iterator n = + m_values.find(name); + if (n == m_values.end()) return false; - - if(result != NULL) + if (result) *result = n->second; - return true; } - std::vector getValues() + std::vector getValues() const { + MutexAutoLock lock(m_mutex); std::vector result; - for(typename std::map::iterator - i = m_values.begin(); - i != m_values.end(); ++i){ - result.push_back(i->second); + for (typename std::map::const_iterator + it = m_values.begin(); + it != m_values.end(); ++it){ + result.push_back(it->second); } return result; } - void clear () - { - m_values.clear(); - } + void clear() { m_values.clear(); } private: std::map m_values; - JMutex m_mutex; + mutable Mutex m_mutex; }; -/* -Generates ids for comparable values. -Id=0 is reserved for "no value". -Is fast at: -- Returning value by id (very fast) -- Returning id by value -- Generating a new id for a value - -Is not able to: -- Remove an id/value pair (is possible to implement but slow) -*/ -template -class MutexedIdGenerator -{ -public: - MutexedIdGenerator() - { - } - - // Returns true if found - bool getValue(u32 id, T &value) - { - if(id == 0) - return false; - JMutexAutoLock lock(m_mutex); - if(m_id_to_value.size() < id) - return false; - value = m_id_to_value[id-1]; - return true; - } - - // If id exists for value, returns the id. - // Otherwise generates an id for the value. - u32 getId(const T &value) - { - JMutexAutoLock lock(m_mutex); - typename std::map::iterator n; - n = m_value_to_id.find(value); - if(n != m_value_to_id.end()) - return n->second; - m_id_to_value.push_back(value); - u32 new_id = m_id_to_value.size(); - m_value_to_id.insert(value, new_id); - return new_id; - } - -private: - JMutex m_mutex; - // Values are stored here at id-1 position (id 1 = [0]) - std::vector m_id_to_value; - std::map m_value_to_id; -}; - -/* -Thread-safe FIFO queue (well, actually a FILO also) -*/ +// Thread-safe Double-ended queue template class MutexedQueue @@ -194,19 +130,18 @@ public: template friend class RequestQueue; - MutexedQueue() + MutexedQueue() {} + bool empty() const { + MutexAutoLock lock(m_mutex); + return m_queue.empty(); } - bool empty() - { - JMutexAutoLock lock(m_mutex); - return (m_queue.size() == 0); - } + void push_back(T t) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_queue.push_back(t); - m_size.Post(); + m_signal.post(); } /* this version of pop_front returns a empty element of T on timeout. @@ -214,37 +149,35 @@ public: */ T pop_frontNoEx(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.front(); m_queue.pop_front(); return t; - } - else { + } else { return T(); } } T pop_front(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.front(); m_queue.pop_front(); return t; - } - else { + } else { throw ItemNotFoundException("MutexedQueue: queue is empty"); } } T pop_frontNoEx() { - m_size.Wait(); + m_signal.wait(); - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); T t = m_queue.front(); m_queue.pop_front(); @@ -253,14 +186,13 @@ public: T pop_back(u32 wait_time_max_ms=0) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.back(); m_queue.pop_back(); return t; - } - else { + } else { throw ItemNotFoundException("MutexedQueue: queue is empty"); } } @@ -268,25 +200,24 @@ public: /* this version of pop_back returns a empty element of T on timeout. * Make sure default constructor of T creates a recognizable "empty" element */ - T pop_backNoEx(u32 wait_time_max_ms=0) + T pop_backNoEx(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.back(); m_queue.pop_back(); return t; - } - else { + } else { return T(); } } T pop_backNoEx() { - m_size.Wait(); + m_signal.wait(); - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); T t = m_queue.back(); m_queue.pop_back(); @@ -294,19 +225,13 @@ public: } protected: - JMutex & getMutex() - { - return m_mutex; - } + Mutex &getMutex() { return m_mutex; } - std::deque & getQueue() - { - return m_queue; - } + std::deque &getQueue() { return m_queue; } std::deque m_queue; - JMutex m_mutex; - JSemaphore m_size; + mutable Mutex m_mutex; + Semaphore m_signal; }; template diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp index 3fd1c9cf9..bfd5d6e38 100644 --- a/src/util/numeric.cpp +++ b/src/util/numeric.cpp @@ -23,17 +23,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "../constants.h" // BS, MAP_BLOCKSIZE #include "../noise.h" // PseudoRandom, PcgRandom -#include "../jthread/jmutexautolock.h" +#include "../threading/mutex_auto_lock.h" #include #include std::map > FacePositionCache::m_cache; -JMutex FacePositionCache::m_cache_mutex; +Mutex FacePositionCache::m_cache_mutex; // Calculate the borders of a "d-radius" cube // TODO: Make it work without mutex and data races, probably thread-local std::vector FacePositionCache::getFacePositions(u16 d) { - JMutexAutoLock cachelock(m_cache_mutex); + MutexAutoLock cachelock(m_cache_mutex); if (m_cache.find(d) != m_cache.end()) return m_cache[d]; diff --git a/src/util/numeric.h b/src/util/numeric.h index 9fe08434f..8a17d892d 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irr_v2d.h" #include "../irr_v3d.h" #include "../irr_aabb3d.h" -#include "../jthread/jmutex.h" +#include "../threading/mutex.h" #include #include #include @@ -42,7 +42,7 @@ public: private: static void generateFacePosition(u16 d); static std::map > m_cache; - static JMutex m_cache_mutex; + static Mutex m_cache_mutex; }; class IndentationRaiser diff --git a/src/util/thread.h b/src/util/thread.h index b3a5e68a2..a32871aab 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -21,9 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UTIL_THREAD_HEADER #include "../irrlichttypes.h" -#include "../jthread/jthread.h" -#include "../jthread/jmutex.h" -#include "../jthread/jmutexautolock.h" +#include "../threading/thread.h" +#include "../threading/mutex.h" +#include "../threading/mutex_auto_lock.h" #include "porting.h" #include "log.h" @@ -36,27 +36,27 @@ public: T get() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return m_value; } void set(T value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_value = value; } // You'll want to grab this in a SharedPtr - JMutexAutoLock *getLock() + MutexAutoLock *getLock() { - return new JMutexAutoLock(m_mutex); + return new MutexAutoLock(m_mutex); } // You pretty surely want to grab the lock when accessing this T m_value; private: - JMutex m_mutex; + Mutex m_mutex; }; /* @@ -118,7 +118,7 @@ public: typename std::list >::iterator j; { - JMutexAutoLock lock(m_queue.getMutex()); + MutexAutoLock lock(m_queue.getMutex()); /* If the caller is already on the list, only update CallerData @@ -192,44 +192,33 @@ private: MutexedQueue > m_queue; }; -class UpdateThread : public JThread { +class UpdateThread : public Thread +{ public: - UpdateThread() {} - virtual ~UpdateThread() {} + UpdateThread(const std::string &name) : Thread(name + "Update") {} + ~UpdateThread() {} - void deferUpdate() - { - m_update_sem.Post(); - } + void deferUpdate() { m_update_sem.post(); } - void Stop() + void stop() { - JThread::Stop(); + Thread::stop(); // give us a nudge - m_update_sem.Post(); + m_update_sem.post(); } - void *Thread() + void *run() { - ThreadStarted(); - - const char *thread_name = getName(); - log_register_thread(thread_name); - porting::setThreadName(thread_name); - DSTACK(__FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER - while (!StopRequested()) { - m_update_sem.Wait(); + while (!stopRequested()) { + m_update_sem.wait(); + // Set semaphore to 0 + while (m_update_sem.wait(0)); - // Empty the queue, just in case doUpdate() is expensive - while (m_update_sem.GetValue()) - m_update_sem.Wait(); - - if (StopRequested()) - break; + if (stopRequested()) break; doUpdate(); } @@ -241,10 +230,9 @@ public: protected: virtual void doUpdate() = 0; - virtual const char *getName() = 0; private: - JSemaphore m_update_sem; + Semaphore m_update_sem; }; #endif From 32e4f4b32d7633a5f17c9e0e0733141ebb1257f8 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Mon, 24 Aug 2015 11:20:53 -0400 Subject: [PATCH 326/670] Fix Android build of threading sources --- build/android/jni/Android.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index cf7094ca8..faecf9003 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -347,9 +347,9 @@ LOCAL_SRC_FILES += deps/sqlite/sqlite3.c # Threading LOCAL_SRC_FILES += \ - jni/src/threading/Mutex.cpp \ - jni/src/threading/Semaphore.cpp \ - jni/src/threading/Thread.cpp + jni/src/threading/mutex.cpp \ + jni/src/threading/semaphore.cpp \ + jni/src/threading/thread.cpp # JSONCPP LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp From 6c5bc14290e8895a61ca2bf9b71fa3c69857675a Mon Sep 17 00:00:00 2001 From: onkrot Date: Mon, 17 Aug 2015 21:35:43 +0500 Subject: [PATCH 327/670] Fix comment positioning in minetest.conf.example --- minetest.conf.example | 45 +++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 50893c578..9076a7cfd 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -180,12 +180,11 @@ # Cross alpha (opaqueness, between 0 and 255) #crosshair_alpha = 255 # Scale gui by a user specified value -#gui_scaling = 1.0 # Use a nearest-neighbor-anti-alias filter to scale the GUI. # This will smooth over some of the rough edges, and blend # pixels when scaling down, at the cost of blurring some # edge pixels when images are scaled by non-integer sizes. -#gui_scaling_filter = false +#gui_scaling = 1.0 # When gui_scaling_filter is true, all GUI images need to be # filtered in software, but some images are generated directly # to hardware (e.g. render-to-texture for nodes in inventory). @@ -193,6 +192,7 @@ # from hardware to software for scaling. When false, fall back # to the old scaling method, for video drivers that don't # propery support downloading textures back from hardware. +#gui_scaling_filter = false #gui_scaling_filter_txr2img = true # Sensitivity multiplier #mouse_sensitivity = 0.2 @@ -231,54 +231,53 @@ # Set to true to pre-generate all item visuals #preload_item_visuals = false # Set to true to enable shaders. Disable them if video_driver = direct3d9/8. - #enable_shaders = true -#enable_bumpmapping = false # Set to true to enable textures bumpmapping. Requires shaders enabled. -#generate_normalmaps = false +#enable_bumpmapping = false # Set to true enables on the fly normalmap generation (Emboss effect). # Requires bumpmapping enabled. -#normalmaps_strength = 0.6 +#generate_normalmaps = false # Strength of generated normalmaps -#normalmaps_smooth = 0 +#normalmaps_strength = 0.6 # Defines sampling step of texture (0 - 2). # A higher value results in smoother normal maps. -#parallax_occlusion_mode = 1 +#normalmaps_smooth = 0 # 0 = parallax occlusion with slope information (faster) # 1 = relief mapping (slower, more accurate) -#enable_parallax_occlusion = false +#parallax_occlusion_mode = 1 # Set to true enables parallax occlusion mapping. Requires shaders enabled. -#parallax_occlusion_iterations = 4 +#enable_parallax_occlusion = false # Number of parallax occlusion iterations -#parallax_occlusion_scale = 0.08 +#parallax_occlusion_iterations = 4 # Overall scale of parallax occlusion effect -#parallax_occlusion_bias = 0.04 +#parallax_occlusion_scale = 0.08 # Overall bias of parallax occlusion effect, usually scale/2 -#enable_waving_water = false +#parallax_occlusion_bias = 0.04 # Set to true enables waving water. Requires shaders enabled. +#enable_waving_water = false # Parameters for waving water: #water_wave_height = 1.0 #water_wave_length = 20.0 #water_wave_speed = 5.0 -#enable_waving_leaves = false # Set to true enables waving leaves. Requires shaders enabled. -#enable_waving_plants = false +#enable_waving_leaves = false # Set to true enables waving plants. Requires shaders enabled. -#ambient_occlusion_gamma = 2.2 +#enable_waving_plants = false # The strength (darkness) of node ambient-occlusion shading. # Lower is darker, Higher is lighter. The valid range of values for this # setting is 0.25 to 4.0 inclusive. If the value is out of range it will be # set to the nearest valid value. -#enable_mesh_cache = false +#ambient_occlusion_gamma = 2.2 # Enables caching of facedir rotated meshes +#enable_mesh_cache = false -#enable_minimap = true # Enables minimap -#minimap_shape_round = true +#enable_minimap = true # true - round shape, false - square -#minimap_double_scan_height = true +#minimap_shape_round = true # true = 256, false = 128 # useable to make minimap smoother on slower machines +#minimap_double_scan_height = true # The time in seconds it takes between repeated # right clicks when holding the right mouse button. @@ -392,13 +391,13 @@ # "error" = abort on usage of deprecated call (suggested for mod developers). #deprecated_lua_api_handling = legacy -#kick_msg_shutdown = Server shutting down. # A message to be displayed to all clients when the server shuts down -#kick_msg_crash = This server has experienced an internal error. You will now be disconnected. +#kick_msg_shutdown = Server shutting down. # A message to be displayed to all clients when the server crashes -#ask_reconnect_on_crash = false +#kick_msg_crash = This server has experienced an internal error. You will now be disconnected. # Whether to ask clients to reconnect after a (lua) crash. # Set this to true if your server is set up to restart automatically. +#ask_reconnect_on_crash = false # Mod profiler #mod_profiling = false From 67d38a303b38042639097f8d2f0cd64529389961 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Mon, 24 Aug 2015 14:37:14 -0400 Subject: [PATCH 328/670] Add setting for mods to copy to Android app --- build/android/Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/build/android/Makefile b/build/android/Makefile index 0a55c324c..08cc179f3 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -14,6 +14,7 @@ PATHCFGFILE = path.cfg ROOT = $(shell pwd) GAMES_TO_COPY = minetest_game +MODS_TO_COPY = VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ @@ -753,11 +754,13 @@ assets : $(ASSETS_TIMESTAMP) cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \ cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \ mkdir ${ROOT}/assets/Minetest/games; \ - for game in ${GAMES_TO_COPY}; \ - do \ + for game in ${GAMES_TO_COPY}; do \ cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/Minetest/games/; \ done; \ - cp -r ${ROOT}/../../mods ${ROOT}/assets/Minetest; \ + mkdir ${ROOT}/assets/Minetest/mods; \ + for mod in ${MODS_TO_COPY}; do \ + cp -r ${ROOT}/../../mods/$$mod ${ROOT}/assets/Minetest/mods/; \ + done; \ cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \ cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \ mkdir -p ${ROOT}/assets/Minetest/media; \ From ca9ebd45451d06eb308244698364258608b98ce7 Mon Sep 17 00:00:00 2001 From: Rui914 Date: Sun, 16 Aug 2015 22:59:06 +0900 Subject: [PATCH 329/670] Use gettext to "None" of texture pack list --- builtin/mainmenu/tab_texturepacks.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index 3fb7b8598..5bbbe9b91 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -17,7 +17,7 @@ -------------------------------------------------------------------------------- local function filter_texture_pack_list(list) - local retval = {"None"} + local retval = {fgettext("None")} for _, item in ipairs(list) do if item ~= "base" then table.insert(retval, item) @@ -106,7 +106,7 @@ local function main_button_handler(tabview, fields, name, tabdata) local current_index = core.get_textlist_index("TPs") if current_index ~= nil and #list >= current_index then local new_path = core.get_texturepath()..DIR_DELIM..list[current_index] - if list[current_index] == "None" then new_path = "" end + if list[current_index] == fgettext("None") then new_path = "" end core.setting_set("texture_path", new_path) end From 2480f2d06fe50295184a60d6659378f9a5d57065 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 14 Aug 2015 16:00:03 +0200 Subject: [PATCH 330/670] Add fgettext_ne as keyword to updatepo.sh --- util/updatepo.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/util/updatepo.sh b/util/updatepo.sh index 28755b1fe..1fc723373 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -54,6 +54,7 @@ xgettext --package-name=minetest \ --keyword=N_ \ --keyword=wgettext \ --keyword=fgettext \ + --keyword=fgettext_ne \ --keyword=strgettext \ --keyword=wstrgettext \ --output $potfile \ From 34b7a147dcf9831f3b4d81599c473ba01ff5da00 Mon Sep 17 00:00:00 2001 From: David Jones Date: Tue, 25 Aug 2015 21:23:05 +0100 Subject: [PATCH 331/670] Change i++ to ++i --- src/client.cpp | 12 ++++++------ src/client/tile.cpp | 6 +++--- src/clientmap.cpp | 2 +- src/collision.cpp | 6 +++--- src/content_cao.cpp | 2 +- src/content_mapblock.cpp | 4 ++-- src/craftdef.cpp | 8 ++++---- src/environment.cpp | 12 ++++++------ src/event_manager.h | 8 ++++---- src/fontengine.cpp | 2 +- src/game.cpp | 14 +++++++------- src/genericobject.cpp | 2 +- src/guiFormSpecMenu.cpp | 8 ++++---- src/guiKeyChangeMenu.cpp | 2 +- src/guiscalingfilter.cpp | 4 ++-- src/hud.cpp | 2 +- src/inventory.cpp | 4 ++-- src/inventorymanager.cpp | 6 +++--- src/itemdef.cpp | 6 +++--- src/log.cpp | 2 +- src/main.cpp | 2 +- src/mapblock.cpp | 6 +++--- src/mapblock_mesh.cpp | 10 +++++----- src/mapnode.cpp | 2 +- src/mesh.cpp | 2 +- src/nameidmapping.cpp | 2 +- src/network/connection.cpp | 12 ++++++------ src/nodedef.cpp | 10 +++++----- src/nodemetadata.cpp | 2 +- src/nodetimer.cpp | 6 +++--- src/particles.cpp | 6 +++--- src/pathfinder.cpp | 8 ++++---- src/rollback.cpp | 4 ++-- src/server.cpp | 24 ++++++++++++------------ src/serverlist.cpp | 4 ++-- src/settings.cpp | 2 +- src/shader.cpp | 2 +- src/sound_openal.cpp | 12 ++++++------ src/subgame.cpp | 6 +++--- src/tool.cpp | 10 +++++----- src/touchscreengui.cpp | 6 +++--- 41 files changed, 125 insertions(+), 125 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 2a253fd75..dda0f5191 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -86,7 +86,7 @@ MeshUpdateQueue::~MeshUpdateQueue() for(std::vector::iterator i = m_queue.begin(); - i != m_queue.end(); i++) + i != m_queue.end(); ++i) { QueuedMeshUpdate *q = *i; delete q; @@ -113,7 +113,7 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se */ for(std::vector::iterator i = m_queue.begin(); - i != m_queue.end(); i++) + i != m_queue.end(); ++i) { QueuedMeshUpdate *q = *i; if(q->p == p) @@ -146,7 +146,7 @@ QueuedMeshUpdate *MeshUpdateQueue::pop() bool must_be_urgent = !m_urgents.empty(); for(std::vector::iterator i = m_queue.begin(); - i != m_queue.end(); i++) + i != m_queue.end(); ++i) { QueuedMeshUpdate *q = *i; if(must_be_urgent && m_urgents.count(q->p) == 0) @@ -617,7 +617,7 @@ void Client::step(float dtime) { for(std::map::iterator i = m_sounds_to_objects.begin(); - i != m_sounds_to_objects.end(); i++) + i != m_sounds_to_objects.end(); ++i) { int client_id = i->first; u16 object_id = i->second; @@ -642,7 +642,7 @@ void Client::step(float dtime) i != m_sounds_server_to_client.end();) { s32 server_id = i->first; int client_id = i->second; - i++; + ++i; if(!m_sound->soundExists(client_id)) { m_sounds_server_to_client.erase(server_id); m_sounds_client_to_server.erase(client_id); @@ -1105,7 +1105,7 @@ void Client::sendRemovedSounds(std::vector &soundList) pkt << (u16) (server_ids & 0xFFFF); for(std::vector::iterator i = soundList.begin(); - i != soundList.end(); i++) + i != soundList.end(); ++i) pkt << *i; Send(&pkt); diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 1f1e9d38c..f918dee29 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -194,7 +194,7 @@ class SourceImageCache public: ~SourceImageCache() { for (std::map::iterator iter = m_images.begin(); - iter != m_images.end(); iter++) { + iter != m_images.end(); ++iter) { iter->second->drop(); } m_images.clear(); @@ -461,7 +461,7 @@ TextureSource::~TextureSource() for (std::vector::iterator iter = m_textureinfo_cache.begin(); - iter != m_textureinfo_cache.end(); iter++) + iter != m_textureinfo_cache.end(); ++iter) { //cleanup texture if (iter->texture) @@ -471,7 +471,7 @@ TextureSource::~TextureSource() for (std::vector::iterator iter = m_texture_trash.begin(); iter != m_texture_trash.end(); - iter++) { + ++iter) { video::ITexture *t = *iter; //cleanup trashed texture diff --git a/src/clientmap.cpp b/src/clientmap.cpp index b890e338b..00a5b1021 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -228,7 +228,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) u32 sector_blocks_drawn = 0; for(MapBlockVect::iterator i = sectorblocks.begin(); - i != sectorblocks.end(); i++) + i != sectorblocks.end(); ++i) { MapBlock *block = *i; diff --git a/src/collision.cpp b/src/collision.cpp index 6afc79ab7..adb6970f5 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -176,7 +176,7 @@ bool wouldCollideWithCeiling( for(std::vector::const_iterator i = staticboxes.begin(); - i != staticboxes.end(); i++) + i != staticboxes.end(); ++i) { const aabb3f& staticbox = *i; if((movingbox.MaxEdge.Y - d <= staticbox.MinEdge.Y) && @@ -265,7 +265,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, std::vector nodeboxes = n.getCollisionBoxes(gamedef->ndef()); for(std::vector::iterator i = nodeboxes.begin(); - i != nodeboxes.end(); i++) + i != nodeboxes.end(); ++i) { aabb3f box = *i; box.MinEdge += v3f(x, y, z)*BS; @@ -320,7 +320,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, f32 distance = speed_f.getLength(); std::vector s_objects; s_env->getObjectsInsideRadius(s_objects, pos_f, distance * 1.5); - for (std::vector::iterator iter = s_objects.begin(); iter != s_objects.end(); iter++) { + for (std::vector::iterator iter = s_objects.begin(); iter != s_objects.end(); ++iter) { ServerActiveObject *current = s_env->getActiveObject(*iter); if ((self == 0) || (self != current)) { objects.push_back((ActiveObject*)current); diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 0293b7983..de06e4d4b 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1820,7 +1820,7 @@ std::string GenericCAO::debugInfoText() os<<"GenericCAO hp="<first<<"="<second<<", "; } diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index 8fa041312..c4d09e18c 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -1548,7 +1548,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, std::vector boxes = n.getNodeBoxes(nodedef); for(std::vector::iterator i = boxes.begin(); - i != boxes.end(); i++) + i != boxes.end(); ++i) { for(int j = 0; j < 6; j++) { @@ -1689,7 +1689,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, v3f pos = intToFloat(p, BS); f32 d = 0.05 * BS; for (std::vector::iterator i = boxes.begin(); - i != boxes.end(); i++) { + i != boxes.end(); ++i) { aabb3f box = *i; box.MinEdge += v3f(-d, -d, -d) + pos; box.MaxEdge += v3f(d, d, d) + pos; diff --git a/src/craftdef.cpp b/src/craftdef.cpp index 409481e64..a39bfb37d 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -964,10 +964,10 @@ public: { std::ostringstream os(std::ios::binary); os << "Crafting definitions:\n"; - for (int type = 0; type <= craft_hash_type_max; type++) { + for (int type = 0; type <= craft_hash_type_max; ++type) { for (std::map >::const_iterator it = (m_craft_defs[type]).begin(); - it != (m_craft_defs[type]).end(); it++) { + it != (m_craft_defs[type]).end(); ++it) { for (std::vector::size_type i = 0; i < it->second.size(); i++) { os << "type " << type @@ -992,10 +992,10 @@ public: } virtual void clear() { - for (int type = 0; type <= craft_hash_type_max; type++) { + for (int type = 0; type <= craft_hash_type_max; ++type) { for (std::map >::iterator it = m_craft_defs[type].begin(); - it != m_craft_defs[type].end(); it++) { + it != m_craft_defs[type].end(); ++it) { for (std::vector::iterator iit = it->second.begin(); iit != it->second.end(); ++iit) { diff --git a/src/environment.cpp b/src/environment.cpp index baeb3a3c6..c337139e8 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -613,19 +613,19 @@ public: = abm->getRequiredNeighbors(); for(std::set::iterator i = required_neighbors_s.begin(); - i != required_neighbors_s.end(); i++) + i != required_neighbors_s.end(); ++i) { ndef->getIds(*i, aabm.required_neighbors); } // Trigger contents std::set contents_s = abm->getTriggerContents(); for(std::set::iterator - i = contents_s.begin(); i != contents_s.end(); i++) + i = contents_s.begin(); i != contents_s.end(); ++i) { std::set ids; ndef->getIds(*i, ids); for(std::set::const_iterator k = ids.begin(); - k != ids.end(); k++) + k != ids.end(); ++k) { content_t c = *k; std::map >::iterator j; @@ -694,7 +694,7 @@ public: continue; for(std::vector::iterator - i = j->second.begin(); i != j->second.end(); i++) { + i = j->second.begin(); i != j->second.end(); ++i) { if(myrand() % i->chance != 0) continue; @@ -772,7 +772,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime) MapNode n; for(std::map::iterator i = elapsed_timers.begin(); - i != elapsed_timers.end(); i++){ + i != elapsed_timers.end(); ++i){ n = block->getNodeNoEx(i->first); v3s16 p = i->first + block->getPosRelative(); if(m_script->node_on_timer(p,n,i->second.elapsed)) @@ -1161,7 +1161,7 @@ void ServerEnvironment::step(float dtime) MapNode n; for(std::map::iterator i = elapsed_timers.begin(); - i != elapsed_timers.end(); i++){ + i != elapsed_timers.end(); ++i){ n = block->getNodeNoEx(i->first); p = i->first + block->getPosRelative(); if(m_script->node_on_timer(p,n,i->second.elapsed)) diff --git a/src/event_manager.h b/src/event_manager.h index 33d99b28c..f926922f5 100644 --- a/src/event_manager.h +++ b/src/event_manager.h @@ -53,7 +53,7 @@ public: if(i != m_dest.end()){ std::list &funcs = i->second.funcs; for(std::list::iterator i = funcs.begin(); - i != funcs.end(); i++){ + i != funcs.end(); ++i){ (*(i->f))(e, i->d); } } @@ -83,12 +83,12 @@ public: if(remove) funcs.erase(j++); else - j++; + ++j; } } } else{ for(std::map::iterator - i = m_dest.begin(); i != m_dest.end(); i++){ + i = m_dest.begin(); i != m_dest.end(); ++i){ std::list &funcs = i->second.funcs; std::list::iterator j = funcs.begin(); while(j != funcs.end()){ @@ -96,7 +96,7 @@ public: if(remove) funcs.erase(j++); else - j++; + ++j; } } } diff --git a/src/fontengine.cpp b/src/fontengine.cpp index f881701e0..55ff001e7 100644 --- a/src/fontengine.cpp +++ b/src/fontengine.cpp @@ -122,7 +122,7 @@ void FontEngine::cleanCache() for (std::map::iterator iter = m_font_cache[i].begin(); - iter != m_font_cache[i].end(); iter++) { + iter != m_font_cache[i].end(); ++iter) { iter->second->drop(); iter->second = NULL; } diff --git a/src/game.cpp b/src/game.cpp index 11e868a80..0e26493a2 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -375,7 +375,7 @@ PointedThing getPointedThing(Client *client, v3f player_position, for (std::vector::const_iterator i = boxes.begin(); - i != boxes.end(); i++) { + i != boxes.end(); ++i) { aabb3f box = *i; box.MinEdge += npf; box.MaxEdge += npf; @@ -420,7 +420,7 @@ PointedThing getPointedThing(Client *client, v3f player_position, if (!g_settings->getBool("enable_node_highlighting")) { for (std::vector::const_iterator i2 = boxes.begin(); - i2 != boxes.end(); i2++) { + i2 != boxes.end(); ++i2) { aabb3f box = *i2; box.MinEdge += npf + v3f(-d, -d, -d) - intToFloat(camera_offset, BS); box.MaxEdge += npf + v3f(d, d, d) - intToFloat(camera_offset, BS); @@ -514,11 +514,11 @@ public: std::map m_meta; for (std::vector::const_iterator k = m_log.begin(); - k != m_log.end(); k++) { + k != m_log.end(); ++k) { const Piece &piece = *k; for (Profiler::GraphValues::const_iterator i = piece.values.begin(); - i != piece.values.end(); i++) { + i != piece.values.end(); ++i) { const std::string &id = i->first; const float &value = i->second; std::map::iterator j = @@ -550,7 +550,7 @@ public: u32 next_color_i = 0; for (std::map::iterator i = m_meta.begin(); - i != m_meta.end(); i++) { + i != m_meta.end(); ++i) { Meta &meta = i->second; video::SColor color(255, 200, 200, 200); @@ -566,7 +566,7 @@ public: s32 meta_i = 0; for (std::map::const_iterator i = m_meta.begin(); - i != m_meta.end(); i++) { + i != m_meta.end(); ++i) { const std::string &id = i->first; const Meta &meta = i->second; s32 x = x_left; @@ -602,7 +602,7 @@ public: bool lastscaledvalue_exists = false; for (std::vector::const_iterator j = m_log.begin(); - j != m_log.end(); j++) { + j != m_log.end(); ++j) { const Piece &piece = *j; float value = 0; bool value_exists = false; diff --git a/src/genericobject.cpp b/src/genericobject.cpp index 90e8cf3d3..368cae1ff 100644 --- a/src/genericobject.cpp +++ b/src/genericobject.cpp @@ -110,7 +110,7 @@ std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups) writeU8(os, GENERIC_CMD_UPDATE_ARMOR_GROUPS); writeU16(os, armor_groups.size()); for(ItemGroupList::const_iterator i = armor_groups.begin(); - i != armor_groups.end(); i++){ + i != armor_groups.end(); ++i){ os<first); writeS16(os, i->second); } diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 62a84460f..d6cd61a8d 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -2103,7 +2103,7 @@ bool GUIFormSpecMenu::getAndroidUIInput() } for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if (iter->fname != fieldname) { continue; @@ -2473,7 +2473,7 @@ void GUIFormSpecMenu::drawMenu() if (id != -1 && delta >= m_tooltip_show_delay) { for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if ( (iter->fid == id) && (m_tooltips[iter->fname].tooltip != "") ){ if (m_old_tooltip != m_tooltips[iter->fname].tooltip) { m_old_tooltip = m_tooltips[iter->fname].tooltip; @@ -3609,7 +3609,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) std::string GUIFormSpecMenu::getNameByID(s32 id) { for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if (iter->fid == id) { return iter->fname; } @@ -3625,7 +3625,7 @@ std::string GUIFormSpecMenu::getNameByID(s32 id) std::wstring GUIFormSpecMenu::getLabelByID(s32 id) { for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if (iter->fid == id) { return iter->flabel; } diff --git a/src/guiKeyChangeMenu.cpp b/src/guiKeyChangeMenu.cpp index 261592394..bb878d6ef 100644 --- a/src/guiKeyChangeMenu.cpp +++ b/src/guiKeyChangeMenu.cpp @@ -81,7 +81,7 @@ GUIKeyChangeMenu::~GUIKeyChangeMenu() removeChildren(); for (std::vector::iterator iter = key_settings.begin(); - iter != key_settings.end(); iter ++) { + iter != key_settings.end(); ++iter) { delete[] (*iter)->button_name; delete (*iter); } diff --git a/src/guiscalingfilter.cpp b/src/guiscalingfilter.cpp index 26a2265a8..41cc72836 100644 --- a/src/guiscalingfilter.cpp +++ b/src/guiscalingfilter.cpp @@ -51,13 +51,13 @@ void guiScalingCache(io::path key, video::IVideoDriver *driver, video::IImage *v void guiScalingCacheClear(video::IVideoDriver *driver) { for (std::map::iterator it = g_imgCache.begin(); - it != g_imgCache.end(); it++) { + it != g_imgCache.end(); ++it) { if (it->second != NULL) it->second->drop(); } g_imgCache.clear(); for (std::map::iterator it = g_txrCache.begin(); - it != g_txrCache.end(); it++) { + it != g_txrCache.end(); ++it) { if (it->second != NULL) driver->removeTexture(it->second); } diff --git a/src/hud.cpp b/src/hud.cpp index dbc4a01a3..d1313089a 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -468,7 +468,7 @@ void Hud::drawCrosshair() { void Hud::drawSelectionBoxes(std::vector &hilightboxes) { for (std::vector::const_iterator i = hilightboxes.begin(); - i != hilightboxes.end(); i++) { + i != hilightboxes.end(); ++i) { driver->draw3DBox(*i, selectionbox_argb); } } diff --git a/src/inventory.cpp b/src/inventory.cpp index af8b1b301..67f979b13 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -730,7 +730,7 @@ bool InventoryList::containsItem(const ItemStack &item) const return true; for(std::vector::const_reverse_iterator i = m_items.rbegin(); - i != m_items.rend(); i++) + i != m_items.rend(); ++i) { if(count == 0) break; @@ -750,7 +750,7 @@ ItemStack InventoryList::removeItem(const ItemStack &item) ItemStack removed; for(std::vector::reverse_iterator i = m_items.rbegin(); - i != m_items.rend(); i++) + i != m_items.rend(); ++i) { if(i->name == item.name) { diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 476768b8c..d4e8d2f25 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -818,9 +818,9 @@ void ICraftAction::apply(InventoryManager *mgr, // Add the new replacements to the list IItemDefManager *itemdef = gamedef->getItemDefManager(); for (std::vector::iterator it = temp.begin(); - it != temp.end(); it++) { + it != temp.end(); ++it) { for (std::vector::iterator jt = output_replacements.begin(); - jt != output_replacements.end(); jt++) { + jt != output_replacements.end(); ++jt) { if (it->name == jt->name) { *it = jt->addItem(*it, itemdef); if (it->empty()) @@ -850,7 +850,7 @@ void ICraftAction::apply(InventoryManager *mgr, // Put the replacements in the inventory or drop them on the floor, if // the invenotry is full for (std::vector::iterator it = output_replacements.begin(); - it != output_replacements.end(); it++) { + it != output_replacements.end(); ++it) { if (list_main) *it = list_main->addItem(*it); if (it->empty()) diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 0133b1b3f..08ff887b2 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -145,7 +145,7 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const os<::const_iterator - i = groups.begin(); i != groups.end(); i++){ + i = groups.begin(); i != groups.end(); ++i){ os<first); writeS16(os, i->second); } @@ -261,7 +261,7 @@ public: #endif for (std::map::iterator iter = m_item_definitions.begin(); iter != m_item_definitions.end(); - iter ++) { + ++iter) { delete iter->second; } m_item_definitions.clear(); @@ -500,7 +500,7 @@ public: { for(std::map::const_iterator i = m_item_definitions.begin(); - i != m_item_definitions.end(); i++) + i != m_item_definitions.end(); ++i) { delete i->second; } diff --git a/src/log.cpp b/src/log.cpp index 9dc574d01..c584d126a 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -141,7 +141,7 @@ void log_printline(enum LogMessageLevel lev, const std::string &text) os << getTimestamp() << ": " << levelname << "["<::iterator i = log_outputs[lev].begin(); - i != log_outputs[lev].end(); i++) { + i != log_outputs[lev].end(); ++i) { ILogOutput *out = *i; if (out->silence) continue; diff --git a/src/main.cpp b/src/main.cpp index 56ba7fac9..950d30b5a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -357,7 +357,7 @@ static void list_game_ids() { std::set gameids = getAvailableGameIds(); for (std::set::const_iterator i = gameids.begin(); - i != gameids.end(); i++) + i != gameids.end(); ++i) dstream << (*i) <::const_iterator i = unknown_contents.begin(); - i != unknown_contents.end(); i++){ + i != unknown_contents.end(); ++i){ errorstream<<"getBlockNodeIdMapping(): IGNORING ERROR: " <<"Name for node id "<<(*i)<<" not known"<::const_iterator i = unnamed_contents.begin(); - i != unnamed_contents.end(); i++){ + i != unnamed_contents.end(); ++i){ errorstream<<"correctBlockNodeIds(): IGNORING ERROR: " <<"Block contains id "<<(*i) <<" with no name mapping"<::const_iterator i = unallocatable_contents.begin(); - i != unallocatable_contents.end(); i++){ + i != unallocatable_contents.end(); ++i){ errorstream<<"correctBlockNodeIds(): IGNORING ERROR: " <<"Could not allocate global id for node name \"" <<(*i)<<"\""<::iterator i = m_crack_materials.begin(); - i != m_crack_materials.end(); i++) + i != m_crack_materials.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); std::string basename = i->second; @@ -1328,7 +1328,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat // Texture animation for(std::map::iterator i = m_animation_tiles.begin(); - i != m_animation_tiles.end(); i++) + i != m_animation_tiles.end(); ++i) { const TileSpec &tile = i->second; // Figure out current frame @@ -1358,13 +1358,13 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat { for(std::map > >::iterator i = m_daynight_diffs.begin(); - i != m_daynight_diffs.end(); i++) + i != m_daynight_diffs.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)buf->getVertices(); for(std::map >::iterator j = i->second.begin(); - j != i->second.end(); j++) + j != i->second.end(); ++j) { u8 day = j->second.first; u8 night = j->second.second; @@ -1389,7 +1389,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat for(std::list::iterator i = m_highlighted_materials.begin(); - i != m_highlighted_materials.end(); i++) + i != m_highlighted_materials.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(*i); video::S3DVertexTangents *vertices = (video::S3DVertexTangents*)buf->getVertices(); diff --git a/src/mapnode.cpp b/src/mapnode.cpp index fe9686f0d..732237833 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -192,7 +192,7 @@ static std::vector transformNodeBox(const MapNode &n, facedir&=0x03; for(std::vector::const_iterator i = fixed.begin(); - i != fixed.end(); i++) + i != fixed.end(); ++i) { aabb3f box = *i; diff --git a/src/mesh.cpp b/src/mesh.cpp index dab1575f3..329b93dc9 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -402,7 +402,7 @@ scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f) for(std::vector::iterator i = boxes.begin(); - i != boxes.end(); i++) + i != boxes.end(); ++i) { aabb3f box = *i; diff --git a/src/nameidmapping.cpp b/src/nameidmapping.cpp index ebe65076e..ed59ddd16 100644 --- a/src/nameidmapping.cpp +++ b/src/nameidmapping.cpp @@ -27,7 +27,7 @@ void NameIdMapping::serialize(std::ostream &os) const writeU16(os, m_id_to_name.size()); for(std::map::const_iterator i = m_id_to_name.begin(); - i != m_id_to_name.end(); i++){ + i != m_id_to_name.end(); ++i){ writeU16(os, i->first); os<second); } diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 10f0d5543..d73d4ba17 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -294,7 +294,7 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) RPBSearchResult next = r; - next++; + ++next; if (next != notFound()) { u16 s = readU16(&(next->data[BASE_HEADER_SIZE+1])); m_oldest_non_answered_ack = s; @@ -358,7 +358,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) /* this is true e.g. on wrap around */ if (seqnum < next_expected) { while(((s < seqnum) || (s >= next_expected)) && (i != m_list.end())) { - i++; + ++i; if (i != m_list.end()) s = readU16(&(i->data[BASE_HEADER_SIZE+1])); } @@ -367,7 +367,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) else { while(((s < seqnum) && (s >= next_expected)) && (i != m_list.end())) { - i++; + ++i; if (i != m_list.end()) s = readU16(&(i->data[BASE_HEADER_SIZE+1])); } @@ -1760,7 +1760,7 @@ void ConnectionSendThread::disconnect() for (std::list::iterator i = peerids.begin(); i != peerids.end(); - i++) + ++i) { sendAsPacket(*i, 0,data,false); } @@ -1840,7 +1840,7 @@ void ConnectionSendThread::sendToAll(u8 channelnum, SharedBuffer data) for (std::list::iterator i = peerids.begin(); i != peerids.end(); - i++) + ++i) { send(*i, channelnum, data); } @@ -1852,7 +1852,7 @@ void ConnectionSendThread::sendToAllReliable(ConnectionCommand &c) for (std::list::iterator i = peerids.begin(); i != peerids.end(); - i++) + ++i) { PeerHelper peer = m_connection->getPeerNoEx(*i); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 269c2b9d6..5a1578bba 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -65,7 +65,7 @@ void NodeBox::serialize(std::ostream &os, u16 protocol_version) const writeU16(os, fixed.size()); for(std::vector::const_iterator i = fixed.begin(); - i != fixed.end(); i++) + i != fixed.end(); ++i) { writeV3F1000(os, i->MinEdge); writeV3F1000(os, i->MaxEdge); @@ -266,7 +266,7 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const os<first); writeS16(os, i->second); } @@ -709,7 +709,7 @@ void CNodeDefManager::updateAliases(IItemDefManager *idef) std::set all = idef->getAll(); m_name_id_mapping_with_aliases.clear(); for (std::set::iterator - i = all.begin(); i != all.end(); i++) { + i = all.begin(); i != all.end(); ++i) { std::string name = *i; std::string convert_to = idef->getAlias(name); content_t id; @@ -1162,7 +1162,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const os<first); writeS16(os, i->second); } @@ -1210,7 +1210,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const os<first); writeS16(os, i->second); } diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index d4da7a5ed..2a9131be0 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -96,7 +96,7 @@ void NodeMetadataList::serialize(std::ostream &os) const for(std::map::const_iterator i = m_data.begin(); - i != m_data.end(); i++) + i != m_data.end(); ++i) { v3s16 p = i->first; NodeMetadata *data = i->second; diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp index 790b46076..a5b48a5af 100644 --- a/src/nodetimer.cpp +++ b/src/nodetimer.cpp @@ -62,7 +62,7 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const for(std::map::const_iterator i = m_data.begin(); - i != m_data.end(); i++){ + i != m_data.end(); ++i){ v3s16 p = i->first; NodeTimer t = i->second; @@ -134,7 +134,7 @@ std::map NodeTimerList::step(float dtime) // Increment timers for(std::map::iterator i = m_data.begin(); - i != m_data.end(); i++){ + i != m_data.end(); ++i){ v3s16 p = i->first; NodeTimer t = i->second; t.elapsed += dtime; @@ -146,7 +146,7 @@ std::map NodeTimerList::step(float dtime) // Delete elapsed timers for(std::map::const_iterator i = elapsed_timers.begin(); - i != elapsed_timers.end(); i++){ + i != elapsed_timers.end(); ++i){ v3s16 p = i->first; m_data.erase(p); } diff --git a/src/particles.cpp b/src/particles.cpp index ab48bae9e..ebb54a49a 100644 --- a/src/particles.cpp +++ b/src/particles.cpp @@ -288,7 +288,7 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env) } else { - i++; + ++i; } } } @@ -360,7 +360,7 @@ void ParticleManager::stepSpawners (float dtime) else { i->second->step(dtime, m_env); - i++; + ++i; } } } @@ -380,7 +380,7 @@ void ParticleManager::stepParticles (float dtime) else { (*i)->step(dtime); - i++; + ++i; } } } diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp index 8eb52bfd1..673d5077e 100644 --- a/src/pathfinder.cpp +++ b/src/pathfinder.cpp @@ -313,7 +313,7 @@ std::vector pathfinder::get_Path(ServerEnvironment* env, //finalize path std::vector full_path; for (std::vector::iterator i = path.begin(); - i != path.end(); i++) { + i != path.end(); ++i) { full_path.push_back(getIndexElement(*i).pos); } @@ -724,7 +724,7 @@ v3s16 pathfinder::get_dir_heuristic(std::vector& directions,path_gridnode for (std::vector::iterator iter = directions.begin(); iter != directions.end(); - iter ++) { + ++iter) { v3s16 pos1 = v3s16(srcpos.X + iter->X,0,srcpos.Z+iter->Z); @@ -749,7 +749,7 @@ v3s16 pathfinder::get_dir_heuristic(std::vector& directions,path_gridnode if (retdir != v3s16(0,0,0)) { for (std::vector::iterator iter = directions.begin(); iter != directions.end(); - iter ++) { + ++iter) { if(*iter == retdir) { DEBUG_OUT("Pathfinder: removing return direction" << std::endl); directions.erase(iter); @@ -1064,7 +1064,7 @@ void pathfinder::print_path(std::vector path) { unsigned int current = 0; for (std::vector::iterator i = path.begin(); - i != path.end(); i++) { + i != path.end(); ++i) { std::cout << std::setw(3) << current << ":" << PPOS((*i)) << std::endl; current++; } diff --git a/src/rollback.cpp b/src/rollback.cpp index 7267a50f6..a6b79393a 100644 --- a/src/rollback.cpp +++ b/src/rollback.cpp @@ -858,7 +858,7 @@ std::string RollbackManager::getSuspect(v3s16 p, float nearness_shortcut, float likely_suspect_nearness = 0; for (std::list::const_reverse_iterator i = action_latest_buffer.rbegin(); - i != action_latest_buffer.rend(); i++) { + i != action_latest_buffer.rend(); ++i) { if (i->unix_time < first_time) { break; } @@ -897,7 +897,7 @@ void RollbackManager::flush() for (iter = action_todisk_buffer.begin(); iter != action_todisk_buffer.end(); - iter++) { + ++iter) { if (iter->actor == "") { continue; } diff --git a/src/server.cpp b/src/server.cpp index 009ea7b0e..646e8465b 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -285,14 +285,14 @@ Server::Server( // Print mods infostream << "Server: Loading mods: "; for(std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++) { + i != m_mods.end(); ++i) { const ModSpec &mod = *i; infostream << mod.name << " "; } infostream << std::endl; // Load and run "mod" scripts for (std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++) { + i != m_mods.end(); ++i) { const ModSpec &mod = *i; if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) { std::ostringstream err; @@ -426,7 +426,7 @@ Server::~Server() // Delete detached inventories for (std::map::iterator i = m_detached_inventories.begin(); - i != m_detached_inventories.end(); i++) { + i != m_detached_inventories.end(); ++i) { delete i->second; } } @@ -1149,7 +1149,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) actionstream<getName() <<" joins game. List of players: "; for (std::vector::iterator i = names.begin(); - i != names.end(); i++) { + i != names.end(); ++i) { actionstream << *i << " "; } @@ -1912,7 +1912,7 @@ void Server::SendPlayerPrivileges(u16 peer_id) pkt << (u16) privs.size(); for(std::set::const_iterator i = privs.begin(); - i != privs.end(); i++) { + i != privs.end(); ++i) { pkt << (*i); } @@ -2012,7 +2012,7 @@ s32 Server::playSound(const SimpleSoundSpec &spec, << (u8) params.type << pos << params.object << params.loop; for(std::vector::iterator i = dst_clients.begin(); - i != dst_clients.end(); i++) { + i != dst_clients.end(); ++i) { psound.clients.insert(*i); m_clients.send(*i, 0, &pkt, true); } @@ -2031,7 +2031,7 @@ void Server::stopSound(s32 handle) pkt << handle; for(std::set::iterator i = psound.clients.begin(); - i != psound.clients.end(); i++) { + i != psound.clients.end(); ++i) { // Send as reliable m_clients.send(*i, 0, &pkt, true); } @@ -2227,7 +2227,7 @@ void Server::fillMediaCache() // Collect all media file paths std::vector paths; for(std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++) { + i != m_mods.end(); ++i) { const ModSpec &mod = *i; paths.push_back(mod.path + DIR_DELIM + "textures"); paths.push_back(mod.path + DIR_DELIM + "sounds"); @@ -2238,7 +2238,7 @@ void Server::fillMediaCache() // Collect media file information from paths into cache for(std::vector::iterator i = paths.begin(); - i != paths.end(); i++) { + i != paths.end(); ++i) { std::string mediapath = *i; std::vector dirlist = fs::GetDirListing(mediapath); for (u32 j = 0; j < dirlist.size(); j++) { @@ -2489,7 +2489,7 @@ void Server::sendDetachedInventories(u16 peer_id) for(std::map::iterator i = m_detached_inventories.begin(); - i != m_detached_inventories.end(); i++) { + i != m_detached_inventories.end(); ++i) { const std::string &name = i->first; //Inventory *inv = i->second; sendDetachedInventory(name, peer_id); @@ -2640,7 +2640,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) if(psound.clients.empty()) m_playing_sounds.erase(i++); else - i++; + ++i; } Player *player = m_env->getPlayer(peer_id); @@ -3153,7 +3153,7 @@ bool Server::rollbackRevertActions(const std::list &actions, for(std::list::const_iterator i = actions.begin(); - i != actions.end(); i++) + i != actions.end(); ++i) { const RollbackAction &action = *i; num_tried++; diff --git a/src/serverlist.cpp b/src/serverlist.cpp index a33d1d6bf..6e79b55a4 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -165,7 +165,7 @@ const std::string serialize(const std::vector &serverlist) std::string liststring; for (std::vector::const_iterator it = serverlist.begin(); it != serverlist.end(); - it++) { + ++it) { liststring += "[server]\n"; liststring += (*it)["name"].asString() + '\n'; liststring += (*it)["address"].asString() + '\n'; @@ -182,7 +182,7 @@ const std::string serializeJson(const std::vector &serverlist) Json::Value list(Json::arrayValue); for (std::vector::const_iterator it = serverlist.begin(); it != serverlist.end(); - it++) { + ++it) { list.append(*it); } root["list"] = list; diff --git a/src/settings.cpp b/src/settings.cpp index 3d4d56fa3..e1e01e81a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1009,7 +1009,7 @@ void Settings::doCallbacks(const std::string name) if (iterToVector != m_callbacks.end()) { std::vector >::iterator iter; - for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); iter++) + for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); ++iter) { (iter->first)(name, iter->second); } diff --git a/src/shader.cpp b/src/shader.cpp index e441883fb..cbde9295e 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -379,7 +379,7 @@ ShaderSource::ShaderSource(IrrlichtDevice *device): ShaderSource::~ShaderSource() { for (std::vector::iterator iter = m_global_setters.begin(); - iter != m_global_setters.end(); iter++) { + iter != m_global_setters.end(); ++iter) { delete *iter; } m_global_setters.clear(); diff --git a/src/sound_openal.cpp b/src/sound_openal.cpp index cb4c7b581..195775396 100644 --- a/src/sound_openal.cpp +++ b/src/sound_openal.cpp @@ -273,9 +273,9 @@ public: m_device = NULL; for (std::map >::iterator i = m_buffers.begin(); - i != m_buffers.end(); i++) { + i != m_buffers.end(); ++i) { for (std::vector::iterator iter = (*i).second.begin(); - iter != (*i).second.end(); iter++) { + iter != (*i).second.end(); ++iter) { delete *iter; } (*i).second.clear(); @@ -402,11 +402,11 @@ public: std::set datas; m_fetcher->fetchSounds(name, paths, datas); for(std::set::iterator i = paths.begin(); - i != paths.end(); i++){ + i != paths.end(); ++i){ loadSoundFile(name, *i); } for(std::set::iterator i = datas.begin(); - i != datas.end(); i++){ + i != datas.end(); ++i){ loadSoundData(name, *i); } return getBuffer(name); @@ -421,7 +421,7 @@ public: std::set del_list; for(std::map::iterator i = m_sounds_playing.begin(); - i != m_sounds_playing.end(); i++) + i != m_sounds_playing.end(); ++i) { int id = i->first; PlayingSound *sound = i->second; @@ -438,7 +438,7 @@ public: verbosestream<<"OpenALSoundManager::maintain(): deleting " <::iterator i = del_list.begin(); - i != del_list.end(); i++) + i != del_list.end(); ++i) { deleteSound(*i); } diff --git a/src/subgame.cpp b/src/subgame.cpp index f736a78c6..a3fdce15a 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -163,7 +163,7 @@ std::set getAvailableGameIds() } for(std::set::const_iterator i = gamespaths.begin(); - i != gamespaths.end(); i++){ + i != gamespaths.end(); ++i){ std::vector dirlist = fs::GetDirListing(*i); for(u32 j=0; j getAvailableGames() std::vector specs; std::set gameids = getAvailableGameIds(); for(std::set::const_iterator i = gameids.begin(); - i != gameids.end(); i++) + i != gameids.end(); ++i) specs.push_back(findSubgame(*i)); return specs; } @@ -230,7 +230,7 @@ std::vector getAvailableWorlds() worldspaths.insert(porting::path_user + DIR_DELIM + "worlds"); infostream<<"Searching worlds..."<::const_iterator i = worldspaths.begin(); - i != worldspaths.end(); i++){ + i != worldspaths.end(); ++i){ infostream<<" In "<<(*i)<<": "< dirvector = fs::GetDirListing(*i); for(u32 j=0; j::const_iterator - i = groupcaps.begin(); i != groupcaps.end(); i++){ + i = groupcaps.begin(); i != groupcaps.end(); ++i){ const std::string *name = &i->first; const ToolGroupCap *cap = &i->second; os<maxlevel); writeU32(os, cap->times.size()); for(std::map::const_iterator - i = cap->times.begin(); i != cap->times.end(); i++){ + i = cap->times.begin(); i != cap->times.end(); ++i){ writeS16(os, i->first); writeF1000(os, i->second); } @@ -51,7 +51,7 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const if(protocol_version > 17){ writeU32(os, damageGroups.size()); for(std::map::const_iterator - i = damageGroups.begin(); i != damageGroups.end(); i++){ + i = damageGroups.begin(); i != damageGroups.end(); ++i){ os<first); writeS16(os, i->second); } @@ -116,7 +116,7 @@ DigParams getDigParams(const ItemGroupList &groups, int level = itemgroup_get(groups, "level"); //infostream<<"level="<::const_iterator - i = tp->groupcaps.begin(); i != tp->groupcaps.end(); i++){ + i = tp->groupcaps.begin(); i != tp->groupcaps.end(); ++i){ const std::string &name = i->first; //infostream<<"group="<second; @@ -164,7 +164,7 @@ HitParams getHitParams(const ItemGroupList &armor_groups, float full_punch_interval = tp->full_punch_interval; for(std::map::const_iterator - i = tp->damageGroups.begin(); i != tp->damageGroups.end(); i++){ + i = tp->damageGroups.begin(); i != tp->damageGroups.end(); ++i){ s16 armor = itemgroup_get(armor_groups, i->first); damage += i->second * rangelim(time_from_last_punch / full_punch_interval, 0.0, 1.0) * armor / 100.0; diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index f5868133f..e4f785f60 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -331,7 +331,7 @@ 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++) { + iter != m_hud_rects.end(); ++iter) { if (iter->second.isPointInside( v2s32(event.TouchInput.X, event.TouchInput.Y) @@ -510,7 +510,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } for (std::vector::iterator iter = m_known_ids.begin(); - iter != m_known_ids.end(); iter++) { + iter != m_known_ids.end(); ++iter) { if (iter->id == event.TouchInput.ID) { m_known_ids.erase(iter); break; @@ -591,7 +591,7 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event) continue; } for(std::vector::iterator iter = m_buttons[i].ids.begin(); - iter != m_buttons[i].ids.end(); iter++) { + iter != m_buttons[i].ids.end(); ++iter) { if (event.TouchInput.ID == *iter) { From 8658c8d9b5f30dc952eed29a19d619de9210474c Mon Sep 17 00:00:00 2001 From: Kahrl Date: Tue, 25 Aug 2015 07:00:56 +0200 Subject: [PATCH 332/670] Use numeric indices and raw table access with LUA_REGISTRYINDEX --- src/script/common/c_internal.h | 21 +++++++++++++++++++++ src/script/cpp_api/s_base.cpp | 6 +++--- src/script/cpp_api/s_base.h | 1 - src/script/cpp_api/s_security.cpp | 12 ++++++------ src/script/lua_api/l_base.cpp | 4 ++-- src/script/lua_api/l_server.cpp | 4 ++-- src/script/lua_api/l_util.cpp | 4 ++-- 7 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index ecb514c8f..80576b5e9 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -34,6 +34,27 @@ extern "C" { #include "common/c_types.h" + +/* + Define our custom indices into the Lua registry table. + + Lua 5.2 and above define the LUA_RIDX_LAST macro. Only numbers above that + may be used for custom indices, anything else is reserved. + + Lua 5.1 / LuaJIT do not use any numeric indices (only string indices), + so we can use numeric indices freely. +*/ +#ifdef LUA_RIDX_LAST +#define CUSTOM_RIDX_BASE ((LUA_RIDX_LAST)+1) +#else +#define CUSTOM_RIDX_BASE 1 +#endif + +#define CUSTOM_RIDX_SCRIPTAPI (CUSTOM_RIDX_BASE) +#define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1) +#define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) + + #define PCALL_RESL(L, RES) do { \ int result_ = (RES); \ if (result_ != 0) { \ diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index dcfbac4bf..bfe03ec46 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -52,13 +52,13 @@ public: { // Store current mod name in registry lua_pushstring(L, mod_name.c_str()); - lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); } ~ModNameStorer() { // Clear current mod name from registry lua_pushnil(L); - lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); } }; @@ -84,7 +84,7 @@ ScriptApiBase::ScriptApiBase() // Make the ScriptApiBase* accessible to ModApiBase lua_pushlightuserdata(m_luastack, this); - lua_setfield(m_luastack, LUA_REGISTRYINDEX, "scriptapi"); + lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); // If we are using LuaJIT add a C++ wrapper function to catch // exceptions thrown in Lua -> C++ calls diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index 744fca2d0..b686d7747 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -36,7 +36,6 @@ extern "C" { #define SCRIPTAPI_LOCK_DEBUG #define SCRIPTAPI_DEBUG -#define SCRIPT_MOD_NAME_FIELD "current_mod_name" // MUST be an invalid mod name so that mods can't // use that name to bypass security! #define BUILTIN_MOD_NAME "*builtin*" diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 6a6d40307..36f8e9c0d 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -47,7 +47,7 @@ static inline void copy_safe(lua_State *L, const char *list[], unsigned len, int // Pushes the original version of a library function on the stack, from the old version static inline void push_original(lua_State *L, const char *lib, const char *func) { - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); lua_getfield(L, -1, lib); lua_remove(L, -2); // Remove globals_backup lua_getfield(L, -1, func); @@ -143,7 +143,7 @@ void ScriptApiSecurity::initializeSecurity() // Backup globals to the registry lua_getglobal(L, "_G"); - lua_setfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); // Replace the global environment with an empty one #if LUA_VERSION_NUM <= 501 @@ -165,7 +165,7 @@ void ScriptApiSecurity::initializeSecurity() #endif // Get old globals - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); int old_globals = lua_gettop(L); @@ -241,7 +241,7 @@ void ScriptApiSecurity::initializeSecurity() bool ScriptApiSecurity::isSecure(lua_State *L) { - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); bool secure = !lua_isnil(L, -1); lua_pop(L, 1); return secure; @@ -356,7 +356,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path) if (!removed.empty()) abs_path += DIR_DELIM + removed; // Get server from registry - lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); ScriptApiBase *script = (ScriptApiBase *) lua_touserdata(L, -1); lua_pop(L, 1); const Server *server = script->getServer(); @@ -364,7 +364,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path) if (!server) return false; // Get mod name - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); if (lua_isstring(L, -1)) { std::string mod_name = lua_tostring(L, -1); diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp index 6ad3e4ba2..515a7d933 100644 --- a/src/script/lua_api/l_base.cpp +++ b/src/script/lua_api/l_base.cpp @@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ScriptApiBase *ModApiBase::getScriptApiBase(lua_State *L) { // Get server from registry - lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); ScriptApiBase *sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1); lua_pop(L, 1); return sapi_ptr; @@ -49,7 +49,7 @@ GUIEngine *ModApiBase::getGuiEngine(lua_State *L) std::string ModApiBase::getCurrentModPath(lua_State *L) { - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); const char *current_mod_name = lua_tostring(L, -1); if (!current_mod_name) return "."; diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 73eca9d60..a6dac487b 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -345,7 +345,7 @@ int ModApiServer::l_show_formspec(lua_State *L) int ModApiServer::l_get_current_modname(lua_State *L) { NO_MAP_LOCK_REQUIRED; - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); return 1; } @@ -442,7 +442,7 @@ int ModApiServer::l_notify_authentication_modified(lua_State *L) int ModApiServer::l_get_last_run_mod(lua_State *L) { NO_MAP_LOCK_REQUIRED; - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); const char *current_mod = lua_tostring(L, -1); if (current_mod == NULL || current_mod[0] == '\0') { lua_pop(L, 1); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 12146e80a..4b8b6d351 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -371,7 +371,7 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) lua_getglobal(L, "_G"); return 1; } - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); if (!lua_isstring(L, -1)) { lua_pushnil(L); return 1; @@ -383,7 +383,7 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) lua_pushnil(L); return 1; } - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); return 1; } From 3304e1e517fb8aac008c4684e72a4b59b408414a Mon Sep 17 00:00:00 2001 From: Kahrl Date: Tue, 25 Aug 2015 07:44:53 +0200 Subject: [PATCH 333/670] Push error handler afresh each time lua_pcall is used Fixes "double fault" / "error in error handling" messages (issue #1423) and instead shows a complete backtrace. --- src/script/common/c_internal.cpp | 14 +++++----- src/script/common/c_internal.h | 4 +++ src/script/cpp_api/s_async.cpp | 13 +++++---- src/script/cpp_api/s_async.h | 3 +- src/script/cpp_api/s_base.cpp | 30 ++++++++++---------- src/script/cpp_api/s_base.h | 2 -- src/script/cpp_api/s_entity.cpp | 31 +++++++++++++------- src/script/cpp_api/s_inventory.cpp | 33 ++++++++++++++++------ src/script/cpp_api/s_item.cpp | 30 +++++++++++++------- src/script/cpp_api/s_mainmenu.cpp | 10 +++++-- src/script/cpp_api/s_node.cpp | 45 ++++++++++++++++++++++++------ src/script/cpp_api/s_nodemeta.cpp | 33 ++++++++++++++++------ src/script/cpp_api/s_player.cpp | 6 ++-- src/script/cpp_api/s_server.cpp | 12 ++++++-- src/script/lua_api/l_env.cpp | 12 ++++---- src/script/scripting_mainmenu.cpp | 2 +- 16 files changed, 188 insertions(+), 92 deletions(-) diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index 2a10ce0f2..14d992df0 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -136,28 +136,28 @@ void script_run_callbacks_f(lua_State *L, int nargs, FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments"); // Insert error handler - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L) - nargs - 1; - lua_insert(L, errorhandler); + PUSH_ERROR_HANDLER(L); + int error_handler = lua_gettop(L) - nargs - 1; + lua_insert(L, error_handler); // Insert run_callbacks between error handler and table lua_getglobal(L, "core"); lua_getfield(L, -1, "run_callbacks"); lua_remove(L, -2); - lua_insert(L, errorhandler + 1); + lua_insert(L, error_handler + 1); // Insert mode after table lua_pushnumber(L, (int) mode); - lua_insert(L, errorhandler + 3); + lua_insert(L, error_handler + 3); // Stack now looks like this: // ...
... - int result = lua_pcall(L, nargs + 2, 1, errorhandler); + int result = lua_pcall(L, nargs + 2, 1, error_handler); if (result != 0) script_error(L, result, NULL, fxn); - lua_remove(L, -2); // Remove error handler + lua_remove(L, error_handler); } void log_deprecated(lua_State *L, const std::string &message) diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index 80576b5e9..fc59b0e2e 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -53,7 +53,11 @@ extern "C" { #define CUSTOM_RIDX_SCRIPTAPI (CUSTOM_RIDX_BASE) #define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1) #define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) +#define CUSTOM_RIDX_ERROR_HANDLER (CUSTOM_RIDX_BASE + 3) +// Pushes the error handler onto the stack and returns its index +#define PUSH_ERROR_HANDLER(L) \ + (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER), lua_gettop((L))) #define PCALL_RESL(L, RES) do { \ int result_ = (RES); \ diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index 1e87e59f0..d18ff6e8c 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -144,8 +144,9 @@ void AsyncEngine::putJobResult(LuaJobInfo result) } /******************************************************************************/ -void AsyncEngine::step(lua_State *L, int errorhandler) +void AsyncEngine::step(lua_State *L) { + int error_handler = PUSH_ERROR_HANDLER(L); lua_getglobal(L, "core"); resultQueueMutex.lock(); while (!resultQueue.empty()) { @@ -164,10 +165,10 @@ void AsyncEngine::step(lua_State *L, int errorhandler) lua_pushlstring(L, jobDone.serializedResult.data(), jobDone.serializedResult.size()); - PCALL_RESL(L, lua_pcall(L, 2, 0, errorhandler)); + PCALL_RESL(L, lua_pcall(L, 2, 0, error_handler)); } resultQueueMutex.unlock(); - lua_pop(L, 1); // Pop core + lua_pop(L, 2); // Pop core and error handler } /******************************************************************************/ @@ -248,6 +249,8 @@ void* AsyncWorkerThread::run() abort(); } + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "core"); if (lua_isnil(L, -1)) { errorstream << "Unable to find core within async environment!"; @@ -279,7 +282,7 @@ void* AsyncWorkerThread::run() toProcess.serializedParams.data(), toProcess.serializedParams.size()); - int result = lua_pcall(L, 2, 1, m_errorhandler); + int result = lua_pcall(L, 2, 1, error_handler); if (result) { PCALL_RES(result); toProcess.serializedResult = ""; @@ -296,7 +299,7 @@ void* AsyncWorkerThread::run() jobDispatcher->putJobResult(toProcess); } - lua_pop(L, 1); // Pop core + lua_pop(L, 2); // Pop core and error handler return 0; } diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index 7f8c72fae..8d612d58c 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -95,9 +95,8 @@ public: * Engine step to process finished jobs * the engine step is one way to pass events back, PushFinishedJobs another * @param L The Lua stack - * @param errorhandler Stack index of the Lua error handler */ - void step(lua_State *L, int errorhandler); + void step(lua_State *L); /** * Push a list of finished jobs onto the stack diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index bfe03ec46..78b70e499 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -78,14 +78,14 @@ ScriptApiBase::ScriptApiBase() luaL_openlibs(m_luastack); - // Add and save an error handler - lua_pushcfunction(m_luastack, script_error_handler); - m_errorhandler = lua_gettop(m_luastack); - // Make the ScriptApiBase* accessible to ModApiBase lua_pushlightuserdata(m_luastack, this); lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); + // Add and save an error handler + lua_pushcfunction(m_luastack, script_error_handler); + lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER); + // If we are using LuaJIT add a C++ wrapper function to catch // exceptions thrown in Lua -> C++ calls #if USE_LUAJIT @@ -133,13 +133,15 @@ bool ScriptApiBase::loadScript(const std::string &script_path, std::string *erro lua_State *L = getStack(); + int error_handler = PUSH_ERROR_HANDLER(L); + bool ok; if (m_secure) { ok = ScriptApiSecurity::safeLoadFile(L, script_path.c_str()); } else { ok = !luaL_loadfile(L, script_path.c_str()); } - ok = ok && !lua_pcall(L, 0, 0, m_errorhandler); + ok = ok && !lua_pcall(L, 0, 0, error_handler); if (!ok) { std::string error_msg = lua_tostring(L, -1); if (error) @@ -150,9 +152,9 @@ bool ScriptApiBase::loadScript(const std::string &script_path, std::string *erro << error_msg << std::endl << std::endl << "======= END OF ERROR FROM LUA ========" << std::endl; lua_pop(L, 1); // Pop error message from stack - return false; } - return true; + lua_pop(L, 1); // Pop error handler + return ok; } // Push the list of callbacks (a lua table). @@ -168,28 +170,28 @@ void ScriptApiBase::runCallbacksRaw(int nargs, FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments"); // Insert error handler - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L) - nargs - 1; - lua_insert(L, errorhandler); + PUSH_ERROR_HANDLER(L); + int error_handler = lua_gettop(L) - nargs - 1; + lua_insert(L, error_handler); // Insert run_callbacks between error handler and table lua_getglobal(L, "core"); lua_getfield(L, -1, "run_callbacks"); lua_remove(L, -2); - lua_insert(L, errorhandler + 1); + lua_insert(L, error_handler + 1); // Insert mode after table lua_pushnumber(L, (int)mode); - lua_insert(L, errorhandler + 3); + lua_insert(L, error_handler + 3); // Stack now looks like this: // ...
... - int result = lua_pcall(L, nargs + 2, 1, errorhandler); + int result = lua_pcall(L, nargs + 2, 1, error_handler); if (result != 0) scriptError(result, fxn); - lua_remove(L, -2); // Remove error handler + lua_remove(L, error_handler); } void ScriptApiBase::realityCheck() diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index b686d7747..d490f7dfd 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -109,8 +109,6 @@ protected: Mutex m_luastackmutex; std::string m_last_run_mod; - // Stack index of Lua error handler - int m_errorhandler; bool m_secure; #ifdef SCRIPTAPI_LOCK_DEBUG bool m_locked; diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp index 0d159846a..378a6bf09 100644 --- a/src/script/cpp_api/s_entity.cpp +++ b/src/script/cpp_api/s_entity.cpp @@ -80,6 +80,8 @@ void ScriptApiEntity::luaentity_Activate(u16 id, verbosestream << "scriptapi_luaentity_activate: id=" << id << std::endl; + int error_handler = PUSH_ERROR_HANDLER(L); + // Get core.luaentities[id] luaentity_get(L, id); int object = lua_gettop(L); @@ -93,11 +95,11 @@ void ScriptApiEntity::luaentity_Activate(u16 id, lua_pushinteger(L, dtime_s); setOriginFromTable(object); - PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 3, 0, error_handler)); } else { lua_pop(L, 1); } - lua_pop(L, 1); // Pop object + lua_pop(L, 2); // Pop object and error handler } void ScriptApiEntity::luaentity_Remove(u16 id) @@ -126,6 +128,8 @@ std::string ScriptApiEntity::luaentity_GetStaticdata(u16 id) //infostream<<"scriptapi_luaentity_get_staticdata: id="<ndef(); // Push callback function on stack @@ -106,7 +108,8 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node, pushnode(L, node, ndef); objectrefGetOrCreate(L, puncher); pushPointedThing(pointed); - PCALL_RES(lua_pcall(L, 4, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 4, 0, error_handler)); + lua_pop(L, 1); // Pop error handler return true; } @@ -115,6 +118,8 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -125,7 +130,8 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node, push_v3s16(L, p); pushnode(L, node, ndef); objectrefGetOrCreate(L, digger); - PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 3, 0, error_handler)); + lua_pop(L, 1); // Pop error handler return true; } @@ -133,6 +139,8 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -141,13 +149,16 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); - PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -156,13 +167,16 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); - PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -172,13 +186,16 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); pushnode(L, node, ndef); - PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 2, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -188,7 +205,8 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) // Call function push_v3s16(L, p); lua_pushnumber(L,dtime); - PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 2, 1, error_handler)); + lua_remove(L, error_handler); return (bool) lua_isboolean(L, -1) && (bool) lua_toboolean(L, -1) == true; } @@ -199,6 +217,8 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -223,23 +243,30 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p, lua_settable(L, -3); } objectrefGetOrCreate(L, sender); // player - PCALL_RES(lua_pcall(L, 4, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 4, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_falling_update(v3s16 p) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "nodeupdate"); push_v3s16(L, p); - PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_falling_update_single(v3s16 p) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "nodeupdate_single"); push_v3s16(L, p); - PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp index 638750b0e..d050c0bc9 100644 --- a/src/script/cpp_api/s_nodemeta.cpp +++ b/src/script/cpp_api/s_nodemeta.cpp @@ -34,6 +34,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -54,12 +56,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - PCALL_RES(lua_pcall(L, 7, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 7, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_move should" " return a number, guilty node: " + nodename); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return num; } @@ -70,6 +72,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -88,12 +92,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if(!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_put should" " return a number, guilty node: " + nodename); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return num; } @@ -104,6 +108,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -122,12 +128,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_take should" " return a number, guilty node: " + nodename); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return num; } @@ -139,6 +145,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -159,7 +167,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - PCALL_RES(lua_pcall(L, 7, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 7, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Report put items @@ -169,6 +178,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -187,7 +198,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 5, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Report taken items @@ -197,6 +209,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -215,7 +229,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 5, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } ScriptApiNodemeta::ScriptApiNodemeta() diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index ef3c31cfd..807430678 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -74,6 +74,8 @@ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Get core.registered_on_player_hpchange lua_getglobal(L, "core"); lua_getfield(L, -1, "registered_on_player_hpchange"); @@ -81,9 +83,9 @@ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player, objectrefGetOrCreate(L, player); lua_pushnumber(L, hp_change); - PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 2, 1, error_handler)); hp_change = lua_tointeger(L, -1); - lua_pop(L, -1); + lua_pop(L, 2); // Pop result and error handler return hp_change; } diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index ec2f9c0af..38bd41f87 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -27,13 +27,15 @@ bool ScriptApiServer::getAuth(const std::string &playername, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); getAuthHandler(); lua_getfield(L, -1, "get_auth"); if (lua_type(L, -1) != LUA_TFUNCTION) throw LuaError("Authentication handler missing get_auth"); lua_pushstring(L, playername.c_str()); - PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 1, 1, error_handler)); lua_remove(L, -2); // Remove auth handler + lua_remove(L, error_handler); // nil = login not allowed if (lua_isnil(L, -1)) @@ -99,6 +101,7 @@ void ScriptApiServer::createAuth(const std::string &playername, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); getAuthHandler(); lua_getfield(L, -1, "create_auth"); lua_remove(L, -2); // Remove auth handler @@ -106,7 +109,8 @@ void ScriptApiServer::createAuth(const std::string &playername, throw LuaError("Authentication handler missing create_auth"); lua_pushstring(L, playername.c_str()); lua_pushstring(L, password.c_str()); - PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler)); + PCALL_RES(lua_pcall(L, 2, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } bool ScriptApiServer::setPassword(const std::string &playername, @@ -114,6 +118,7 @@ bool ScriptApiServer::setPassword(const std::string &playername, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); getAuthHandler(); lua_getfield(L, -1, "set_password"); lua_remove(L, -2); // Remove auth handler @@ -121,7 +126,8 @@ bool ScriptApiServer::setPassword(const std::string &playername, throw LuaError("Authentication handler missing set_password"); lua_pushstring(L, playername.c_str()); lua_pushstring(L, password.c_str()); - PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler)); + PCALL_RES(lua_pcall(L, 2, 1, error_handler)); + lua_remove(L, error_handler); return lua_toboolean(L, -1); } diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 28afdd071..4e0164d90 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -52,8 +52,7 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, sanity_check(lua_checkstack(L, 20)); StackUnroller stack_unroller(L); - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L); + int error_handler = PUSH_ERROR_HANDLER(L); // Get registered_abms lua_getglobal(L, "core"); @@ -80,7 +79,7 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, lua_pushnumber(L, active_object_count); lua_pushnumber(L, active_object_count_wider); - int result = lua_pcall(L, 4, 0, errorhandler); + int result = lua_pcall(L, 4, 0, error_handler); if (result) scriptIface->scriptError(result, "LuaABM::trigger"); @@ -412,8 +411,7 @@ int ModApiEnvMod::l_add_item(lua_State *L) if(item.empty() || !item.isKnown(getServer(L)->idef())) return 0; - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L); + int error_handler = PUSH_ERROR_HANDLER(L); // Use spawn_item to spawn a __builtin:item lua_getglobal(L, "core"); @@ -424,9 +422,9 @@ int ModApiEnvMod::l_add_item(lua_State *L) lua_pushvalue(L, 1); lua_pushstring(L, item.getItemString().c_str()); - PCALL_RESL(L, lua_pcall(L, 2, 1, errorhandler)); + PCALL_RESL(L, lua_pcall(L, 2, 1, error_handler)); - lua_remove(L, errorhandler); // Remove error handler + lua_remove(L, error_handler); return 1; } diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp index c74c18edc..b1e50c94b 100644 --- a/src/script/scripting_mainmenu.cpp +++ b/src/script/scripting_mainmenu.cpp @@ -78,7 +78,7 @@ void MainMenuScripting::initializeModApi(lua_State *L, int top) /******************************************************************************/ void MainMenuScripting::step() { - asyncEngine.step(getStack(), m_errorhandler); + asyncEngine.step(getStack()); } /******************************************************************************/ From 17b7b7c85fc4faca2180a0104ed457c3a8734627 Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 27 Aug 2015 02:50:45 +0100 Subject: [PATCH 334/670] Dungeongen: Remove floating frames Preserves the rare unbroken protruding dungeons Fix random range for first room roomplace Fix checked volume for first room 'fits' bool and check for 'untouchable' flag instead of 'inside' Remove 'enable floating dungeons' setting --- minetest.conf.example | 11 +++++++---- src/defaultsettings.cpp | 1 - src/dungeongen.cpp | 21 +++++++++------------ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 9076a7cfd..656abd13b 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -516,18 +516,19 @@ # Mapgen stuff # -# Name of map generator to be used. Currently supported: v5, v6, v7, singlenode. +# Name of map generator to be used. +# Currently supported: v5, v6, v7, singlenode. #mg_name = v6 # Water surface level of map #water_level = 1 # Size of chunks to be generated, stated in mapblocks (16 nodes) #chunksize = 5 -# Global map generation attributes. Currently supported: trees, caves, flat, dungeons, light. +# Global map generation attributes. +# Currently supported: trees, caves, flat, dungeons, light. # Flags that are not specified in the flag string are not modified from the default. # To explicitly turn off a flag, prepend "no" to the beginning, e.g. nolight. +# 'trees' and 'flat' flags only have effect in mgv6. #mg_flags = trees, caves, dungeons, light -# Enable/disable floating dungeons and dungeon slices -#enable_floating_dungeons = true # Map generation attributes specific to Mapgen V6. # Currently supported: jungles, biomeblend, mudflow, snowbiomes. @@ -540,11 +541,13 @@ # Map generation attributes specific to Mapgen V7. # Currently supported: mountains, ridges. +# 'ridges' are the rivers. #mgv7_spflags = mountains, ridges # Perlin noise attributes for different map generation parameters. # Noise parameters can be specified as a set of positional values: # Offset, scale, (spread factors), seed offset, number of octaves, persistence, lacunarity. +# For example: #mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0 # Or the new group format can be used instead, for example: #mgv6_np_terrain_base = { diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index f0b02b2d9..dd5332a3b 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -312,7 +312,6 @@ void set_default_settings(Settings *settings) settings->setDefault("chunksize", "5"); settings->setDefault("mg_flags", "dungeons"); settings->setDefault("mgv6_spflags", "jungles, snowbiomes"); - settings->setDefault("enable_floating_dungeons", "true"); // IPv6 settings->setDefault("enable_ipv6", "true"); diff --git a/src/dungeongen.cpp b/src/dungeongen.cpp index 8ce64e1e1..9c6e24a60 100644 --- a/src/dungeongen.cpp +++ b/src/dungeongen.cpp @@ -80,17 +80,14 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) // Dungeon generator doesn't modify places which have this set vm->clearFlag(VMANIP_FLAG_DUNGEON_INSIDE | VMANIP_FLAG_DUNGEON_PRESERVE); - bool no_float = !g_settings->getBool("enable_floating_dungeons"); - - // Set all air and water (and optionally ignore) to be untouchable + // Set all air and water to be untouchable // to make dungeons open to caves and open air for (s16 z = nmin.Z; z <= nmax.Z; z++) { for (s16 y = nmin.Y; y <= nmax.Y; y++) { u32 i = vm->m_area.index(nmin.X, y, z); for (s16 x = nmin.X; x <= nmax.X; x++) { content_t c = vm->m_data[i].getContent(); - if (c == CONTENT_AIR || c == dp.c_water || - (no_float && c == CONTENT_IGNORE)) + if (c == CONTENT_AIR || c == dp.c_water) vm->m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE; i++; } @@ -141,21 +138,21 @@ void DungeonGen::makeDungeon(v3s16 start_padding) // start_padding is used to disallow starting the generation of // a dungeon in a neighboring generation chunk roomplace = vm->m_area.MinEdge + start_padding + v3s16( - random.range(0, areasize.X - roomsize.X - 1 - start_padding.X), - random.range(0, areasize.Y - roomsize.Y - 1 - start_padding.Y), - random.range(0, areasize.Z - roomsize.Z - 1 - start_padding.Z)); + random.range(0, areasize.X - roomsize.X - start_padding.X), + random.range(0, areasize.Y - roomsize.Y - start_padding.Y), + random.range(0, areasize.Z - roomsize.Z - start_padding.Z)); /* Check that we're not putting the room to an unknown place, otherwise it might end up floating in the air */ fits = true; - for (s16 z = 1; z < roomsize.Z - 1; z++) - for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) { + for (s16 z = 0; z < roomsize.Z; z++) + for (s16 y = 0; y < roomsize.Y; y++) + for (s16 x = 0; x < roomsize.X; x++) { v3s16 p = roomplace + v3s16(x, y, z); u32 vi = vm->m_area.index(p); - if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_INSIDE) || + if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) || vm->m_data[vi].getContent() == CONTENT_IGNORE) { fits = false; break; From 18973f9af196ca48abfca25e05d4b1a396fdd871 Mon Sep 17 00:00:00 2001 From: Gael-de-Sailly Date: Fri, 28 Aug 2015 16:16:19 +0200 Subject: [PATCH 335/670] Ores: change ore chance in clusters to better respect clust_num_ores for dense clusters --- src/mg_ore.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp index a94d1d6d9..0d0f74bf5 100644 --- a/src/mg_ore.cpp +++ b/src/mg_ore.cpp @@ -132,7 +132,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed, (nmax.Y - nmin.Y + 1) * (nmax.Z - nmin.Z + 1); u32 csize = clust_size; - u32 orechance = (csize * csize * csize) / clust_num_ores; + u32 cvolume = csize * csize * csize; u32 nclusters = volume / clust_scarcity; for (u32 i = 0; i != nclusters; i++) { @@ -154,7 +154,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed, for (u32 z1 = 0; z1 != csize; z1++) for (u32 y1 = 0; y1 != csize; y1++) for (u32 x1 = 0; x1 != csize; x1++) { - if (pr.range(1, orechance) != 1) + if (pr.range(1, cvolume) > clust_num_ores) continue; u32 i = vm->m_area.index(x0 + x1, y0 + y1, z0 + z1); From 9c44aace4fce5f4b496201214d3215899f1481c3 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 30 Aug 2015 01:17:03 +0200 Subject: [PATCH 336/670] l_mainmenu.h: remove unused l_get_dirlist function The commit 8f9af57314f71aae1cc77e13f9996e13015d776d "Add core.get_dir_list" by @ShadowNinja has removed the implementation of the l_get_dirlist function and all its usages from the l_mainmenu.cpp file, but hasn't removed it from the header file. The reason why this hasn't been detected earlier is that C++ has this interesting feature to still make it possible to create instances of classes whose never used private methods are declared but not defined. --- src/script/lua_api/l_mainmenu.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index 9c1fed272..405af25e8 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -119,8 +119,6 @@ private: static int l_get_texturepath_share(lua_State *L); - static int l_get_dirlist(lua_State *L); - static int l_create_dir(lua_State *L); static int l_delete_dir(lua_State *L); From 2c637ce1c26145269b09c62afb451240a8def401 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 31 Aug 2015 13:26:40 +0200 Subject: [PATCH 337/670] Make ClientInterface::statenames consistent with the state enum again Fixes minetest.get_player_information segfault due to out of bounds access problems, when compiled as debug build. --- src/clientiface.cpp | 6 ++++-- src/clientiface.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/clientiface.cpp b/src/clientiface.cpp index d4efe60ef..a6ab1ef41 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -38,10 +38,12 @@ const char *ClientInterface::statenames[] = { "Disconnecting", "Denied", "Created", - "InitSent", + "AwaitingInit2", + "HelloSent", "InitDone", "DefinitionsSent", - "Active" + "Active", + "SudoMode", }; diff --git a/src/clientiface.h b/src/clientiface.h index 9be8bda61..0d2bca196 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -167,6 +167,9 @@ namespace con { #define CI_ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0])) +// Also make sure to update the ClientInterface::statenames +// array when modifying these enums + enum ClientState { CS_Invalid, From 714b68add28bc0604f8bbc670c8faa34dae00e20 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 31 Aug 2015 16:37:02 +0200 Subject: [PATCH 338/670] Credits tab: fix accidental merger of two contributors Fixes #3125 --- builtin/mainmenu/tab_credits.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 33c84f58f..46d2cf1d6 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -48,7 +48,8 @@ tab_credits = { ",Andrew Ward (rubenwardy) ," .. ",Aaron Suen ," .. ",Sokomine ," .. - ",Břetislav Štec (TeTpaAka)," .. + ",Břetislav Štec (t0suj4/TBC_x)," .. + ",TeTpaAka," .. ",Jean-Patrick G (kilbith) ," .. ",Rui ," .. ",Diego Martinez (kaeza) ," .. From dce9468925b2208b8178722af218d9cd30a35a64 Mon Sep 17 00:00:00 2001 From: jh10001 Date: Tue, 1 Sep 2015 02:36:02 +0800 Subject: [PATCH 339/670] gettext.cpp: Fix syntax error when using MSVC Also remove trailing whitespaces from the file --- src/gettext.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gettext.cpp b/src/gettext.cpp index 0fd6b574e..e8819f131 100644 --- a/src/gettext.cpp +++ b/src/gettext.cpp @@ -167,7 +167,7 @@ void init_gettext(const char *path, const std::string &configured_language) { if (parameters != "") { ptr_parameters = parameters.c_str(); } - + /** users may start by short name in commandline without extention **/ std::string appname = argv[0]; if (appname.substr(appname.length() - 4) != ".exe") { @@ -184,7 +184,7 @@ void init_gettext(const char *path, const std::string &configured_language) { NULL, &startupinfo, &processinfo)) { - char buffer[1024]; + char buffer[1024]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), @@ -202,14 +202,14 @@ void init_gettext(const char *path, const std::string &configured_language) { else { exit(0); } + } #else - errorstream << "*******************************************************" << std::endl; - errorstream << "Can't apply locale workaround for server!" << std::endl; - errorstream << "Expect language to be broken!" << std::endl; - errorstream << "*******************************************************" << std::endl; + errorstream << "*******************************************************" << std::endl; + errorstream << "Can't apply locale workaround for server!" << std::endl; + errorstream << "Expect language to be broken!" << std::endl; + errorstream << "*******************************************************" << std::endl; #endif - } setlocale(LC_ALL,configured_language.c_str()); #else // Mingw From 0903190ba2ed2134c464f2efe694d7281ead1c09 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 1 Sep 2015 03:07:02 +0200 Subject: [PATCH 340/670] Hide minimap if it has been disabled by server --- src/client.cpp | 1 + src/client.h | 4 ++++ src/game.cpp | 3 +++ src/hud.h | 4 ++-- src/network/clientpackethandler.cpp | 12 ++++++++++++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index dda0f5191..4a9398f70 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -228,6 +228,7 @@ Client::Client( m_particle_manager(&m_env), m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), m_device(device), + m_minimap_disabled_by_server(false), m_server_ser_ver(SER_FMT_VER_INVALID), m_proto_ver(0), m_playeritem(0), diff --git a/src/client.h b/src/client.h index 75fd0c984..5b57aa52a 100644 --- a/src/client.h +++ b/src/client.h @@ -510,6 +510,9 @@ public: Mapper* getMapper () { return m_mapper; } + bool isMinimapDisabledByServer() + { return m_minimap_disabled_by_server; } + // IGameDef interface virtual IItemDefManager* getItemDefManager(); virtual INodeDefManager* getNodeDefManager(); @@ -590,6 +593,7 @@ private: con::Connection m_con; IrrlichtDevice *m_device; Mapper *m_mapper; + bool m_minimap_disabled_by_server; // Server serialization version u8 m_server_ser_ver; diff --git a/src/game.cpp b/src/game.cpp index 0e26493a2..840d627b6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1857,6 +1857,9 @@ void Game::run() updateFrame(highlight_boxes, &graph, &stats, &runData, dtime, flags, cam_view); updateProfilerGraphs(&graph); + + // Update if minimap has been disabled by the server + flags.show_minimap &= !client->isMinimapDisabledByServer(); } } diff --git a/src/hud.h b/src/hud.h index 614e7c92d..65453aec1 100644 --- a/src/hud.h +++ b/src/hud.h @@ -33,8 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #define HUD_CORNER_CENTER 2 // Note that these visibility flags do not determine if the hud items are -// actually drawn, but rather, allows the item to be drawn should the rest of -// the game state permit it. +// actually drawn, but rather, whether to draw the item should the rest +// of the game state permit it. #define HUD_FLAG_HOTBAR_VISIBLE (1 << 0) #define HUD_FLAG_HEALTHBAR_VISIBLE (1 << 1) #define HUD_FLAG_CROSSHAIR_VISIBLE (1 << 2) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 04f94c58b..d49c96029 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "map.h" #include "mapsector.h" +#include "minimap.h" #include "nodedef.h" #include "serialization.h" #include "server.h" @@ -1094,8 +1095,19 @@ void Client::handleCommand_HudSetFlags(NetworkPacket* pkt) Player *player = m_env.getLocalPlayer(); assert(player != NULL); + bool was_minimap_visible = player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE; + player->hud_flags &= ~mask; player->hud_flags |= flags; + + m_minimap_disabled_by_server = !(player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE); + + // Hide minimap if it has been disabled by the server + if (m_minimap_disabled_by_server && was_minimap_visible) { + // defers a minimap update, therefore only call it if really + // needed, by checking that minimap was visible before + m_mapper->setMinimapMode(MINIMAP_MODE_OFF); + } } void Client::handleCommand_HudSetParam(NetworkPacket* pkt) From 4124e360cb676f68ee0d20ff7f9282f8f80f44c7 Mon Sep 17 00:00:00 2001 From: Rui Date: Tue, 1 Sep 2015 06:57:12 +0900 Subject: [PATCH 341/670] Minor tweaks __builtin:falling_node --- builtin/game/falling.lua | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua index 58f68fc56..5b5e806f5 100644 --- a/builtin/game/falling.lua +++ b/builtin/game/falling.lua @@ -18,18 +18,6 @@ core.register_entity(":__builtin:falling_node", { set_node = function(self, node) self.node = node - local stack = ItemStack(node.name) - local itemtable = stack:to_table() - local itemname = nil - if itemtable then - itemname = stack:to_table().name - end - local item_texture = nil - local item_type = "" - if core.registered_items[itemname] then - item_texture = core.registered_items[itemname].inventory_image - item_type = core.registered_items[itemname].type - end local prop = { is_visible = true, textures = {node.name}, @@ -43,7 +31,9 @@ core.register_entity(":__builtin:falling_node", { on_activate = function(self, staticdata) self.object:set_armor_groups({immortal=1}) - self:set_node({name=staticdata}) + if staticdata then + self:set_node({name=staticdata}) + end end, on_step = function(self, dtime) From fa30a14c5ce4cac402a6cecaee2e450969625f68 Mon Sep 17 00:00:00 2001 From: Marcin Date: Sun, 30 Aug 2015 20:28:48 +0200 Subject: [PATCH 342/670] Make example config more readable --- minetest.conf.example | 171 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 170 insertions(+), 1 deletion(-) diff --git a/minetest.conf.example b/minetest.conf.example index 656abd13b..54fd66bcb 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -31,6 +31,7 @@ # Port to connect to (UDP) #remote_port = + # Key mappings. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 #keymap_forward = KEY_KEY_W @@ -40,6 +41,7 @@ #keymap_jump = KEY_SPACE #keymap_sneak = KEY_LSHIFT #keymap_inventory = KEY_KEY_I + # Go down ladder / go down in fly mode / go fast in fast mode #keymap_special1 = KEY_KEY_E #keymap_chat = KEY_KEY_T @@ -50,12 +52,16 @@ #keymap_fastmove = KEY_KEY_J #keymap_cinematic = KEY_F8 #keymap_screenshot = KEY_F12 + # If true, keymap_special1 instead of keymap_sneak is used for climbing down and descending #aux1_descends = false + # Double-tapping the jump key toggles fly mode #doubletap_jump = false + # If false aux1 is used to fly fast #always_fly_fast = true + # Some (temporary) keys for debugging #keymap_print_debug_stacks = KEY_KEY_P #keymap_quicktune_prev = KEY_HOME @@ -66,100 +72,143 @@ # If set to true, you can place blocks at the position (feet + eye level) where you stand. # This is helpful when working with nodeboxes. #enable_build_where_you_stand = false + # Minimum FPS. # The amount of rendered stuff is dynamically set according to this. #wanted_fps = 30 + # If FPS would go higher than this, limit it by sleeping # to not waste CPU power for no benefit. #fps_max = 60 + # Maximum FPS when game is paused #pause_fps_max = 20 + # The allowed adjustment range for the automatic rendering range adjustment #viewing_range_nodes_max = 160 #viewing_range_nodes_min = 35 + # Initial window size #screenW = 800 #screenH = 600 #fullscreen = false #fullscreen_bpp = 24 + # Experimental option, might cause visible spaces between blocks # when set to higher number than 0. #fsaa = 0 + +# Vertical synchronization #vsync = false + # Field of view in degrees #fov = 72 + # Address to connect to (#blank = start local server) #address = + # Enable random user input, for testing #random_input = false + # Timeout for client to remove unused map data from memory #client_unload_unused_data_timeout = 600 + # Maximum number of mapblocks for client to be kept in memory # Set to -1 for unlimited amount #client_mapblock_limit = 5000 + # Whether to fog out the end of the visible area #enable_fog = true + # Whether to show the client debug info (has the same effect as hitting F5) #show_debug = false + # Enable a bit lower water surface; disable for speed (not quite optimized) #new_style_water = false + # Max liquids processed per step #liquid_loop_max = 100000 + # The time (in seconds) that the liquids queue may grow beyond processing # capacity until an attempt is made to decrease its size by dumping old queue # items. A value of 0 disables the functionality. #liquid_queue_purge_time = 0 + # Liquid update interval in seconds #liquid_update = 1.0 + # Leaves style: # fancy - all faces visible # simple - only outer faces, if defined special_tiles are used # opaque - disable transparency #leaves_style = fancy + # Connects glass if supported by node #connected_glass = false + # Enable smooth lighting with simple ambient occlusion. # Disable for speed or for different looks. #smooth_lighting = true + # Adjust the gamma encoding for the light tables. Valid values are in the range # 1.0 to 3.0 (inclusive); lower numbers are brighter. This setting is for the # client only and is ignored by the server #display_gamma = 1.8 + # Path to texture directory. All textures are first searched from here. #texture_path = + # Video back-end. # Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl. #video_driver = opengl + # Unobstructed movement without physics, downwards key is keymap_special1 #free_move = false + # Continuous forward movement (for testing) #continuous_forward = false + # Enable cinematic mode #cinematic = false + # Camera smoothing - smooths rotation of camera. 0 is no smoothing. # Must be equal to or greater than 0, and less than 1. #camera_smoothing = 0.0 + # Camera smoothing when in cinematic mode #cinematic_camera_smoothing = 0.7 + # Fast movement (keymap_special1) #fast_move = false + # Invert mouse #invert_mouse = false + # Enable/disable clouds #enable_clouds = true + +# Height on which clouds are appearing #cloud_height = 120 + # Radius of cloud area stated in number of 64 node cloud squares. # Values larger than 26 will start to produce sharp cutoffs at cloud area corners. #cloud_radius = 12 + +# Use 3D cloud look instead of flat #enable_3d_clouds = true + # Use a cloud animation for the main menu background #menu_clouds = true + # Path for screenshots #screenshot_path = + # Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double) #view_bobbing_amount = 1.0 + # Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double) #fall_bobbing_amount = 0.0 + # 3d support. # Currently: # "none" = no 3d output. @@ -168,58 +217,78 @@ # "topbottom" = split screen top/bottom. # "sidebyside" = split screen side by side. #3d_mode = none + +# Strength of parallax #3d_parallax_strength = 0.025 + # In-game chat console background color (R,G,B) #console_color = (0,0,0) + # In-game chat console background alpha (opaqueness, between 0 and 255) #console_alpha = 200 + # Selection box border color (R,G,B) #selectionbox_color = (0,0,0) + # Crosshair color (R,G,B) #crosshair_color = (255,255,255) + # Cross alpha (opaqueness, between 0 and 255) #crosshair_alpha = 255 + # Scale gui by a user specified value # Use a nearest-neighbor-anti-alias filter to scale the GUI. # This will smooth over some of the rough edges, and blend # pixels when scaling down, at the cost of blurring some # edge pixels when images are scaled by non-integer sizes. #gui_scaling = 1.0 + # When gui_scaling_filter is true, all GUI images need to be # filtered in software, but some images are generated directly # to hardware (e.g. render-to-texture for nodes in inventory). +#gui_scaling_filter = false + # When gui_scaling_filter_txr2img is true, copy those images # from hardware to software for scaling. When false, fall back # to the old scaling method, for video drivers that don't # propery support downloading textures back from hardware. -#gui_scaling_filter = false #gui_scaling_filter_txr2img = true + # Sensitivity multiplier #mouse_sensitivity = 0.2 + # Sound settings #enable_sound = true #sound_volume = 0.7 + # Whether node texture animations should be desynchronized per mapblock #desynchronize_mapblock_texture_animation = true + # Width of the selectionbox's lines (Between 1 and 5) #selectionbox_width = 2 + # Maximum proportion of current window to be used for hotbar. # Useful if there's something to be displayed right or left of hotbar. #hud_hotbar_max_width = 1.0 + # Save the map received by the client on disk #enable_local_map_saving = false + # Enable selection highlighting for nodes (disables selectionbox) #enable_node_highlighting = false + # Texture filtering settings #mip_map = false #anisotropic_filter = false #bilinear_filter = false #trilinear_filter = false + # Filtered textures can blend RGB values with fully-transparent neighbors, # which PNG optimizers usually discard, sometimes resulting in a dark or # light edge to transparent textures. Apply this filter to clean that up # at texture load time. #texture_clean_transparent = false + # When using bilinear/trilinear/anisotropic filters, low-resolution textures # can be blurred, so automatically upscale them with nearest-neighbor # interpolation to preserve crisp pixels. This sets the minimum texture size @@ -228,53 +297,72 @@ # have a visible effect unless bilinear/trilinear/anisotropic filtering is # enabled. #texture_min_size = 64 + # Set to true to pre-generate all item visuals #preload_item_visuals = false + # Set to true to enable shaders. Disable them if video_driver = direct3d9/8. #enable_shaders = true + # Set to true to enable textures bumpmapping. Requires shaders enabled. #enable_bumpmapping = false + # Set to true enables on the fly normalmap generation (Emboss effect). # Requires bumpmapping enabled. #generate_normalmaps = false + # Strength of generated normalmaps #normalmaps_strength = 0.6 + # Defines sampling step of texture (0 - 2). # A higher value results in smoother normal maps. #normalmaps_smooth = 0 + # 0 = parallax occlusion with slope information (faster) # 1 = relief mapping (slower, more accurate) #parallax_occlusion_mode = 1 + # Set to true enables parallax occlusion mapping. Requires shaders enabled. #enable_parallax_occlusion = false + # Number of parallax occlusion iterations #parallax_occlusion_iterations = 4 + # Overall scale of parallax occlusion effect #parallax_occlusion_scale = 0.08 + # Overall bias of parallax occlusion effect, usually scale/2 #parallax_occlusion_bias = 0.04 + # Set to true enables waving water. Requires shaders enabled. #enable_waving_water = false + # Parameters for waving water: #water_wave_height = 1.0 #water_wave_length = 20.0 #water_wave_speed = 5.0 + # Set to true enables waving leaves. Requires shaders enabled. #enable_waving_leaves = false + # Set to true enables waving plants. Requires shaders enabled. #enable_waving_plants = false + # The strength (darkness) of node ambient-occlusion shading. # Lower is darker, Higher is lighter. The valid range of values for this # setting is 0.25 to 4.0 inclusive. If the value is out of range it will be # set to the nearest valid value. #ambient_occlusion_gamma = 2.2 + # Enables caching of facedir rotated meshes #enable_mesh_cache = false # Enables minimap #enable_minimap = true + # true - round shape, false - square #minimap_shape_round = true + # true = 256, false = 128 # useable to make minimap smoother on slower machines #minimap_double_scan_height = true @@ -282,40 +370,54 @@ # The time in seconds it takes between repeated # right clicks when holding the right mouse button. #repeat_rightclick_time = 0.25 + # Make fog and sky colors depend on daytime (dawn/sunset) and view direction #directional_colored_fog = true + # Delay showing tooltips, stated in milliseconds #tooltip_show_delay = 400 + # Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens #screen_dpi = 72 + # Default timeout for cURL, stated in milliseconds. # Only has an effect if compiled with cURL. #curl_timeout = 5000 + # Limits number of parallel HTTP requests. Affects: # Media fetch if server uses remote_media setting. # Serverlist download and server announcement. # Downloads performed by main menu (e.g. mod manager). # Only has an effect if compiled with cURL. #curl_parallel_limit = 8 + # Maximum time in ms a file download (e.g. a mod download) may take #curl_file_download_timeout = 300000 + # Enable usage of remote media server (if provided by server) #enable_remote_media_server = true + # Url to the server list displayed in the Multiplayer Tab #serverlist_url = servers.minetest.net + # File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab #serverlist_file = favoriteservers.txt + # Whether freetype fonts are used, requires freetype support to be compiled in #freetype = true + # Path to TrueTypeFont or bitmap #font_path = fonts/liberationsans.ttf #font_size = 15 + # Font shadow offset, if 0 then shadow will not be drawn #font_shadow = 1 + # Font shadow alpha (opaqueness, between 0 and 255) #font_shadow_alpha = 128 #mono_font_path = fonts/liberationmono.ttf #mono_font_size = 15 + # This font will be used for certain languages #fallback_font_path = fonts/DroidSansFallbackFull.ttf #fallback_font_size = 15 @@ -328,63 +430,90 @@ # Network port to listen (UDP) #port = 30000 + # Bind address #bind_address = + # Name of server #server_name = Minetest server + # Description of server #server_description = mine here + # Domain name of server #server_address = game.minetest.net + # Homepage of server #server_url = http://minetest.net + # Automaticaly report to masterserver #server_announce = 0 + # Announce to this masterserver. # If you want to announce your ipv6 address - use serverlist_url = v6.servers.minetest.net. #serverlist_url = servers.minetest.net + # Default game (default when creating a new world) #default_game = minetest + # World directory (everything in the world is stored here) #map-dir = /custom/world + # Message of the Day #motd = Welcome to this awesome Minetest server! + # Maximum number of players connected simultaneously #max_users = 15 + # Set to true to disallow old clients from connecting #strict_protocol_version_checking = false + # Time in seconds for item entity to live. Default value: 900s. # Setting it to -1 disables the feature. #item_entity_ttl = 900 + # Set to true to enable creative mode (unlimited inventory) #creative_mode = false + # Enable players getting damage and dying #enable_damage = false + # A chosen map seed for a new map, leave empty for random #fixed_map_seed = + # Gives some stuff to players at the beginning #give_initial_stuff = false + # New users need to input this password #default_password = + # Available privileges: interact, shout, teleport, settime, privs, ... # See /privs in game for a full list on your server and mod configuration. #default_privs = interact, shout + # Whether players are shown to clients without any range limit. # Deprecated, use the setting player_transfer_distance instead. #unlimited_player_transfer_distance = true + # Defines the maximal player transfer distance in blocks (0 = unlimited) #player_transfer_distance = 0 + # Whether to enable players killing each other #enable_pvp = true + # If this is set, players will always (re)spawn at the given position #static_spawnpoint = 0, 10, 0 + # If true, new players cannot join with an empty password #disallow_empty_password = false + # If true, disable cheat prevention in multiplayer #disable_anticheat = false + # If true, actions are recorded for rollback # This option is only read when server starts #enable_rollback_recording = false + # Handling for deprecated lua api calls: # "legacy" = (try to) mimic old behaviour (default for release). # "log" = mimic and log backtrace of deprecated call (default for debug). @@ -393,32 +522,43 @@ # A message to be displayed to all clients when the server shuts down #kick_msg_shutdown = Server shutting down. + # A message to be displayed to all clients when the server crashes #kick_msg_crash = This server has experienced an internal error. You will now be disconnected. + # Whether to ask clients to reconnect after a (lua) crash. # Set this to true if your server is set up to restart automatically. #ask_reconnect_on_crash = false # Mod profiler #mod_profiling = false + # Detailed mod profile data #detailed_profiling = false + # Profiler data print interval. #0 = disable. #profiler_print_interval = 0 #enable_mapgen_debug_info = false + # From how far client knows about objects #active_object_send_range_blocks = 3 + # How large area of blocks are subject to the active block stuff. # Active = objects are loaded and ABMs run. #active_block_range = 2 + # How many blocks are flying in the wire simultaneously per client #max_simultaneous_block_sends_per_client = 10 + # How many blocks are flying in the wire simultaneously per server #max_simultaneous_block_sends_server_total = 40 + # From how far blocks are sent to clients, stated in mapblocks (16 nodes) #max_block_send_distance = 10 + # From how far blocks are generated for clients, stated in mapblocks (16 nodes) #max_block_generate_distance = 6 + # Where the map generator stops. # Please note: # * Limited to 31000 (setting above has no effect) @@ -426,51 +566,71 @@ # * Those groups have an offset of -32, -32 nodes from the origin. # * Only groups which are within the map_generation_limit are generated #map_generation_limit = 31000 + # Number of extra blocks that can be loaded by /clearobjects at once. # This is a trade-off between sqlite transaction overhead and # memory consumption (4096=100MB, as a rule of thumb). #max_clearobjects_extra_loaded_blocks = 4096 + # Maximum number of forceloaded blocks #max_forceloaded_blocks = 16 + # Interval of sending time of day to clients #time_send_interval = 5 + # Controls length of day/night cycle. # 72=20min, 360=4min, 1=24hour, 0=day/night/whatever stays unchanged. #time_speed = 72 + +# How much the server will wait before unloading unused MapBlocks. +# Higher value is smoother, but will use more RAM. #server_unload_unused_data_timeout = 29 + # Maximum number of statically stored objects in a block #max_objects_per_block = 49 + # Interval of saving important changes in the world, stated in seconds #server_map_save_interval = 5.3 + # http://www.sqlite.org/pragma.html#pragma_synchronous only numeric values: 0 1 2 #sqlite_synchronous = 2 + # To reduce lag, block transfers are slowed down when a player is building something. # This determines how long they are slowed down after placing or removing a node. #full_block_send_enable_min_time_from_building = 2.0 + # Length of a server tick and the interval at which objects are generally updated over network #dedicated_server_step = 0.1 + # Can be set to true to disable shutting down on invalid world data #ignore_world_load_errors = false + # Specifies URL from which client fetches media instead of using UDP. # $filename should be accessible from $remote_media$filename via cURL # (obviously, remote_media should end with a slash). # Files that are not present would be fetched the usual way. #remote_media = + # Level of logging to be written to debug.txt: # 0 = none, 1 = errors and debug, 2 = action, 3 = info, 4 = verbose. #debug_log_level = 2 + # Maximum number of blocks that can be queued for loading #emergequeue_limit_total = 256 + # 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 = 32 + # 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 = 32 + # Number of emerge threads to use. Make this field blank, or increase this number # to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly # at the cost of slightly buggy caves. #num_emerge_threads = 1 + # Maximum number of packets sent per send step, if you have a slow connection # try reducing it, but don't reduce it to a number below double of targeted # client number. @@ -478,18 +638,22 @@ # Enable/disable IPv6 #enable_ipv6 = true + # Enable/disable running an IPv6 server. An IPv6 server may be restricted # to IPv6 clients, depending on system configuration. # Ignored if bind_address is set. #ipv6_server = false + #main_menu_script = #main_menu_game_mgr = 0 #main_menu_mod_mgr = 1 #modstore_download_url = https://forum.minetest.net/media/ #modstore_listmods_url = https://forum.minetest.net/mmdb/mods/ #modstore_details_url = https://forum.minetest.net/mmdb/mod/*/ + # Makes DirectX work with LuaJIT. Disable if it causes troubles. #high_precision_fpu = true + # Override language. When no value is provided (default) system language is used. # Check "locale" directory for the list of available translations. #language = @@ -519,10 +683,13 @@ # Name of map generator to be used. # Currently supported: v5, v6, v7, singlenode. #mg_name = v6 + # Water surface level of map #water_level = 1 + # Size of chunks to be generated, stated in mapblocks (16 nodes) #chunksize = 5 + # Global map generation attributes. # Currently supported: trees, caves, flat, dungeons, light. # Flags that are not specified in the flag string are not modified from the default. @@ -534,6 +701,7 @@ # Currently supported: jungles, biomeblend, mudflow, snowbiomes. # When snowbiomes are enabled jungles are enabled and the jungles flag is ignored. #mgv6_spflags = jungles, biomeblend, mudflow, snowbiomes + # Controls size of deserts and beaches in Mapgen V6 # When snowbiomes are enabled 'mgv6_freq_desert' is ignored. #mgv6_freq_desert = 0.45 @@ -612,6 +780,7 @@ # Prevent mods from doing insecure things like running shell commands. #secure.enable_security = false + # Comma-separated list of trusted mods that are allowed to access insecure # functions even when mod security is on (via request_insecure_environment()). #secure.trusted_mods = From 7419504079c894dd15fd84116505b853feb44287 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Tue, 1 Sep 2015 14:26:15 -0400 Subject: [PATCH 343/670] Enable server build when no builds are enabled --- src/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2d52de68b..b69c371cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,6 +27,12 @@ set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH) +if(NOT (BUILD_CLIENT OR BUILD_SERVER)) + message(WARNING "Neither BUILD_CLIENT nor BUILD_SERVER is set! Setting BUILD_SERVER=true") + set(BUILD_SERVER TRUE) +endif() + + option(ENABLE_CURL "Enable cURL support for fetching media" TRUE) set(USE_CURL FALSE) From e511282d78a844af24602791cd3cab9aa6e6996d Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Tue, 1 Sep 2015 14:27:41 -0400 Subject: [PATCH 344/670] Warn when building without cURL --- src/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b69c371cd..32e25c3bd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,6 +46,15 @@ else() mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR) endif() +if(NOT USE_CURL) + if(BUILD_CLIENT) + message(WARNING "cURL is required to load the server list") + endif() + if(BUILD_SERVER) + message(WARNING "cURL is required to announce to the server list") + endif() +endif() + option(ENABLE_GETTEXT "Use GetText for internationalization" FALSE) set(USE_GETTEXT FALSE) From 94961b3364f76d5861913af321e9be6200d080b3 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 2 Sep 2015 01:34:37 +0200 Subject: [PATCH 345/670] Don't add line number to comment when running updatepo.sh Otherwise, this updates all .po files for all line numbers that changed since the last time updatepo.sh was run. We still add the filename, but this information shouldn't change too often. xgettext beginning with 0.18.4 supports this feature. --- util/updatepo.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/updatepo.sh b/util/updatepo.sh index 1fc723373..f4a401f2c 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -50,7 +50,7 @@ cd .. potfile=po/minetest.pot xgettext --package-name=minetest \ --sort-by-file \ - --add-location \ + --add-location=file \ --keyword=N_ \ --keyword=wgettext \ --keyword=fgettext \ From 196975ba5c11f798851dc89a4a8cf677646e6b39 Mon Sep 17 00:00:00 2001 From: Ner'zhul Date: Tue, 1 Sep 2015 22:36:12 +0200 Subject: [PATCH 346/670] Add two missing directories to doxygen --- doc/Doxyfile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 062fc67a5..d35fbf65f 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -12,6 +12,8 @@ SORT_MEMBERS_CTORS_1ST = YES WARN_IF_UNDOCUMENTED = NO INPUT = @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 \ From d4938554818aa71aceb0d360f33c6cfd42f67008 Mon Sep 17 00:00:00 2001 From: Rui Date: Thu, 3 Sep 2015 01:09:48 +0900 Subject: [PATCH 347/670] Small fixes of minetest.has_feature --- builtin/game/features.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/game/features.lua b/builtin/game/features.lua index f082b0db8..a5f17e540 100644 --- a/builtin/game/features.lua +++ b/builtin/game/features.lua @@ -12,9 +12,9 @@ core.features = { function core.has_feature(arg) if type(arg) == "table" then - missing_features = {} - result = true - for ft, _ in pairs(arg) do + local missing_features = {} + local result = true + for ftr in pairs(arg) do if not core.features[ftr] then missing_features[ftr] = true result = false From 2035bfc3a64e7c0c82f0cb100cd7d4cc588d0203 Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 3 Sep 2015 05:58:29 +0200 Subject: [PATCH 348/670] Areastore: fix "attempt to index a number value" Before, calling get_areas_in_area for an areastore with both include_borders and include_data would result in a lua error, if there was at least one area as result: attempt to index a number value in function 'get_areas_in_area' --- src/script/lua_api/l_areastore.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp index 1e9075119..72fe24b20 100644 --- a/src/script/lua_api/l_areastore.cpp +++ b/src/script/lua_api/l_areastore.cpp @@ -45,6 +45,7 @@ static void push_area(lua_State *L, const Area *a, { if (!include_borders && !include_data) { lua_pushboolean(L, true); + return; } lua_newtable(L); if (include_borders) { From c345657289ff64a7e623a264d4c57ac06c3213db Mon Sep 17 00:00:00 2001 From: HEXcube Date: Wed, 2 Sep 2015 16:22:12 +0530 Subject: [PATCH 349/670] Rename minetest-icon.svg to minetest.svg - Fixes #1564 -Complies with the Linux standard freedesktop icon naming specs: http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html#guidelines -Ensures compatibility with icon themes -Edit minetest.desktop, CMakeLists.txt and README.md to reflect this change --- CMakeLists.txt | 2 +- README.txt | 2 +- misc/minetest.desktop | 2 +- misc/{minetest-icon.svg => minetest.svg} | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename misc/{minetest-icon.svg => minetest.svg} (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92ef53ef3..15774d564 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,7 +178,7 @@ if(UNIX AND NOT APPLE) install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6") install(FILES "misc/minetest.desktop" DESTINATION "${XDG_APPS_DIR}") install(FILES "misc/minetest.appdata.xml" DESTINATION "${APPDATADIR}") - install(FILES "misc/minetest-icon.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") + install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") endif() if(APPLE) diff --git a/README.txt b/README.txt index 06122dee1..0760faf67 100644 --- a/README.txt +++ b/README.txt @@ -381,7 +381,7 @@ BlockMen: erlehmann: misc/minetest-icon-24x24.png misc/minetest-icon.ico - misc/minetest-icon.svg + misc/minetest.svg textures/base/pack/logo.png License of Minetest source code diff --git a/misc/minetest.desktop b/misc/minetest.desktop index 4257cef37..1d2430a2c 100644 --- a/misc/minetest.desktop +++ b/misc/minetest.desktop @@ -9,7 +9,7 @@ Comment[ja]=マルチプレイに対応した、無限の世界のブロック Comment[ru]=Игра-песочница с безграничным миром, состоящим из блоков Comment[tr]=Tek-Çok oyuncuyla küplerden sonsuz dünyalar inşa et Exec=minetest -Icon=minetest-icon +Icon=minetest Terminal=false Type=Application Categories=Game; diff --git a/misc/minetest-icon.svg b/misc/minetest.svg similarity index 99% rename from misc/minetest-icon.svg rename to misc/minetest.svg index 46c9ac702..fe036c3dd 100644 --- a/misc/minetest-icon.svg +++ b/misc/minetest.svg @@ -14,7 +14,7 @@ id="svg2856" version="1.1" inkscape:version="0.47 r22583" - sodipodi:docname="minetest-icon.svg" + sodipodi:docname="minetest.svg" inkscape:export-filename="/home/erlehmann/pics/icons/minetest/minetest-icon-24x24.png" inkscape:export-xdpi="45" inkscape:export-ydpi="45"> From 91bf68e1fee1dd82fe1ed1d7aaeb895321260d95 Mon Sep 17 00:00:00 2001 From: Rui914 Date: Fri, 4 Sep 2015 05:55:31 +0900 Subject: [PATCH 350/670] Change my email --- builtin/mainmenu/tab_credits.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 46d2cf1d6..cc9613242 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -51,7 +51,7 @@ tab_credits = { ",Břetislav Štec (t0suj4/TBC_x)," .. ",TeTpaAka," .. ",Jean-Patrick G (kilbith) ," .. - ",Rui ," .. + ",Rui ," .. ",Diego Martinez (kaeza) ," .. ",," .. "#FFFF00," .. fgettext("Previous Core Developers") .."," .. From 588f0c1fb03db162c573ac92b13f0de465e3040c Mon Sep 17 00:00:00 2001 From: Pavel Puchkin Date: Thu, 27 Aug 2015 20:51:07 +0200 Subject: [PATCH 351/670] Fix building on OSX, broken since "Clean up threading" Commit e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd - Clean up threading by @ShadowNinja has broken the OSX build. Including things inside a namespace isn't good. Also fixes #3124. --- src/porting.h | 19 +++++++++---------- src/threading/thread.cpp | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/porting.h b/src/porting.h index 492c9d3a8..a4016e8d7 100644 --- a/src/porting.h +++ b/src/porting.h @@ -108,6 +108,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #endif +#ifndef _WIN32 // Posix + #include + #include + #if defined(__MACH__) && defined(__APPLE__) + #include + #include + #endif +#endif + namespace porting { @@ -158,10 +167,6 @@ void initIrrlicht(irr::IrrlichtDevice * ); Overflow can occur at any value higher than 10000000. */ #ifdef _WIN32 // Windows -#ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 -#endif - #include inline u32 getTimeS() { @@ -190,12 +195,6 @@ void initIrrlicht(irr::IrrlichtDevice * ); } #else // Posix -#include -#include -#if defined(__MACH__) && defined(__APPLE__) -#include -#include -#endif inline u32 getTimeS() { diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp index a1cb720af..73a951194 100644 --- a/src/threading/thread.cpp +++ b/src/threading/thread.cpp @@ -80,7 +80,7 @@ DEALINGS IN THE SOFTWARE. #include #elif defined(__APPLE__) #include - #include + #include #endif From 31b6d2678455c0b3de7f4b97c9607388b06c8f8c Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 3 Sep 2015 06:53:35 +0200 Subject: [PATCH 352/670] Fix occasionally failing travis builds We require sudo right now, tell this travis, so that they don't try to run it on their container based infrastructure. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d17af5463..d7ee23876 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ env: - PLATFORM=Linux before_install: ./util/travis/before_install.sh script: ./util/travis/script.sh +sudo: required notifications: email: false matrix: From 645e2086734e3d2d1ec95f50faa39f0f24304761 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Mon, 24 Aug 2015 14:32:15 -0400 Subject: [PATCH 353/670] Use CUSTOM_LOCALEDIR if specified --- src/cmake_config.h.in | 1 + src/main.cpp | 4 ++-- src/porting.cpp | 8 +++++++- src/porting.h | 7 ++++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in index 04f368594..bda7a891a 100644 --- a/src/cmake_config.h.in +++ b/src/cmake_config.h.in @@ -12,6 +12,7 @@ #define VERSION_STRING "@VERSION_STRING@" #define PRODUCT_VERSION_STRING "@VERSION_MAJOR@.@VERSION_MINOR@" #define STATIC_SHAREDIR "@SHAREDIR@" +#define STATIC_LOCALEDIR "@LOCALEDIR@" #define BUILD_TYPE "@CMAKE_BUILD_TYPE@" #cmakedefine01 RUN_IN_PLACE #cmakedefine01 USE_GETTEXT diff --git a/src/main.cpp b/src/main.cpp index 950d30b5a..dece27428 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -472,10 +472,10 @@ static bool init_common(int *log_level, const Settings &cmd_args, int argc, char httpfetch_init(g_settings->getS32("curl_parallel_limit")); #ifdef _MSC_VER - init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(), + init_gettext(porting::path_locale.c_str(), g_settings->get("language"), argc, argv); #else - init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(), + init_gettext(porting::path_locale.c_str(), g_settings->get("language")); #endif diff --git a/src/porting.cpp b/src/porting.cpp index cb9f3270b..5fea1d9cf 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -136,6 +136,8 @@ void signal_handler_init(void) // Default to RUN_IN_PLACE style relative paths std::string path_share = ".."; std::string path_user = ".."; +std::string path_locale = path_share + DIR_DELIM + "locale"; + std::string getDataPath(const char *subpath) { @@ -503,13 +505,17 @@ void initializePaths() path_share = execpath; path_user = execpath; } - #else infostream << "Using system-wide paths (NOT RUN_IN_PLACE)" << std::endl; if (!setSystemPaths()) errorstream << "Failed to get one or more system-wide path" << std::endl; +#endif +#ifdef STATIC_LOCALEDIR + path_locale = STATIC_LOCALEDIR[0] ? STATIC_LOCALEDIR : getDataPath("locale"); +#else + path_locale = getDataPath("locale"); #endif infostream << "Detected share path: " << path_share << std::endl; diff --git a/src/porting.h b/src/porting.h index a4016e8d7..a86d37fbb 100644 --- a/src/porting.h +++ b/src/porting.h @@ -142,6 +142,11 @@ extern std::string path_share; */ extern std::string path_user; +/* + Path to gettext locale files +*/ +extern std::string path_locale; + /* Get full path of stuff in data directory. Example: "stone.png" -> "../data/stone.png" @@ -149,7 +154,7 @@ extern std::string path_user; std::string getDataPath(const char *subpath); /* - Initialize path_share and path_user. + Initialize path_*. */ void initializePaths(); From 4967e483b617e50332869d42975e0b947c41971f Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 7 Sep 2015 02:15:13 +0100 Subject: [PATCH 354/670] Mgv5/mgv7 biomes: Reduce heat and humidity noise spreads to former value of 750 --- minetest.conf.example | 4 ++-- src/mapgen.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 54fd66bcb..695e413c9 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -733,9 +733,9 @@ # other noise parameters are shown in positional format to save space. # Noise parameters for biome API temperature, humidity and biome blend -#mg_biome_np_heat = 50, 50, (1000, 1000, 1000), 5349, 3, 0.5, 2.0 +#mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 #mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 -#mg_biome_np_humidity = 50, 50, (1000, 1000, 1000), 842, 3, 0.5, 2.0 +#mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 #mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 #mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 diff --git a/src/mapgen.h b/src/mapgen.h index 46328ba92..4b28ec936 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -127,9 +127,9 @@ struct MapgenParams { seed(0), water_level(1), flags(MG_TREES | MG_CAVES | MG_LIGHT), - np_biome_heat(NoiseParams(50, 50, v3f(1000.0, 1000.0, 1000.0), 5349, 3, 0.5, 2.0)), + np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)), np_biome_heat_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0)), - np_biome_humidity(NoiseParams(50, 50, v3f(1000.0, 1000.0, 1000.0), 842, 3, 0.5, 2.0)), + np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)), np_biome_humidity_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)), sparams(NULL) {} From 0b875560481ca16782ace98b0bace9f02d18b22d Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 7 Sep 2015 21:48:58 +0200 Subject: [PATCH 355/670] Shaders: use triple-frequency waving for leaves and plants --- .../shaders/nodes_shader/opengl_vertex.glsl | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 53d5c92d0..91536ba10 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -15,23 +15,30 @@ varying vec3 lightVec; varying vec3 tsEyeVec; varying vec3 tsLightVec; varying float area_enable_parallax; +varying float disp; const float e = 2.718281828459; const float BS = 10.0; + float smoothCurve(float x) { return x * x * (3.0 - 2.0 * x); } + + float triangleWave(float x) { return abs(fract(x + 0.5) * 2.0 - 1.0); } + + float smoothTriangleWave(float x) { return smoothCurve(triangleWave(x)) * 2.0 - 1.0; } + void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; @@ -47,48 +54,39 @@ void main(void) area_enable_parallax = 0.0; #endif -#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER) + +#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 = (smoothTriangleWave(animationTimer * 31.0 + tOffset) + + smoothTriangleWave(animationTimer * 29.0 + tOffset) + + smoothTriangleWave(animationTimer * 13.0 + tOffset)) - 0.9; +#endif + + +#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER vec4 pos = gl_Vertex; pos.y -= 2.0; - float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH); - pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT; gl_Position = mWorldViewProj * pos; #elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES vec4 pos = gl_Vertex; - vec4 pos2 = mWorld * gl_Vertex; - - /* - * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition) - * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication) - * And bufferize calcul to a float - */ - float pos2XpZ = pos2.x + pos2.z; - - pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4; - pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2; - pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4; + pos.x += disp * 0.1; + pos.y += disp * 0.1; + pos.z += disp; gl_Position = mWorldViewProj * pos; #elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS vec4 pos = gl_Vertex; - vec4 pos2 = mWorld * gl_Vertex; if (gl_TexCoord[0].y < 0.05) { - /* - * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition) - * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication) - * And bufferize calcul to a float - */ - float pos2XpZ = pos2.x + pos2.z; - - pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8; - pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4; + pos.z += disp; } gl_Position = mWorldViewProj * pos; #else gl_Position = mWorldViewProj * gl_Vertex; #endif + vPosition = gl_Position.xyz; worldPosition = (mWorld * gl_Vertex).xyz; From fe6575b8d38b29026adb9bf3d6226b5b3ceb4cab Mon Sep 17 00:00:00 2001 From: Robert Zenz Date: Mon, 7 Sep 2015 18:51:45 +0200 Subject: [PATCH 356/670] Add more information about how get_node_light works. --- doc/lua_api.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 5372cb834..b07d046c4 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1914,9 +1914,13 @@ and `minetest.auth_reload` call the authetification handler. * Returns `{name="ignore", ...}` for unloaded area * `minetest.get_node_or_nil(pos)` * Returns `nil` for unloaded area -* `minetest.get_node_light(pos, timeofday)` returns a number between `0` and `15` or `nil` +* `minetest.get_node_light(pos, timeofday)` + * Gets the light value at the given position. Note that the light value + "inside" the node at the given position is returned, so you usually want + to get the light value of a neighbor. + * `pos`: The position where to measure the light. * `timeofday`: `nil` for current time, `0` for night, `0.5` for day - + * Returns a number between `0` and `15` or `nil` * `minetest.place_node(pos, node)` * Place node with the same effects that a player would cause * `minetest.dig_node(pos)` From 1f1e14ab7fe1680eae12955929be004af7f39fe4 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Tue, 8 Sep 2015 18:29:02 +0200 Subject: [PATCH 357/670] Change m_client_event_queue's type to std::queue As indicated in its name, m_client_event_queue should be a queue. Change std::list to std::queue to improve the queue's performance. --- src/environment.cpp | 6 +++--- src/environment.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index c337139e8..eb599668b 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -2562,7 +2562,7 @@ void ClientEnvironment::damageLocalPlayer(u8 damage, bool handle_hp) event.type = CEE_PLAYER_DAMAGE; event.player_damage.amount = damage; event.player_damage.send_to_server = handle_hp; - m_client_event_queue.push_back(event); + m_client_event_queue.push(event); } void ClientEnvironment::updateLocalPlayerBreath(u16 breath) @@ -2570,7 +2570,7 @@ void ClientEnvironment::updateLocalPlayerBreath(u16 breath) ClientEnvEvent event; event.type = CEE_PLAYER_BREATH; event.player_breath.amount = breath; - m_client_event_queue.push_back(event); + m_client_event_queue.push(event); } /* @@ -2604,7 +2604,7 @@ ClientEnvEvent ClientEnvironment::getClientEvent() event.type = CEE_NONE; else { event = m_client_event_queue.front(); - m_client_event_queue.pop_front(); + m_client_event_queue.pop(); } return event; } diff --git a/src/environment.h b/src/environment.h index 6ace12671..22840a9fc 100644 --- a/src/environment.h +++ b/src/environment.h @@ -534,7 +534,7 @@ private: IrrlichtDevice *m_irr; std::map m_active_objects; std::vector m_simple_objects; - std::list m_client_event_queue; + std::queue m_client_event_queue; IntervalLimiter m_active_object_light_update_interval; IntervalLimiter m_lava_hurt_interval; IntervalLimiter m_drowning_interval; From 183d0d5633b94bfa831528cb637fdb29342676d4 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 8 Sep 2015 21:45:16 +0200 Subject: [PATCH 358/670] Update leveldb git url Google code was shut down, project moved to github. --- build/android/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/android/Makefile b/build/android/Makefile index 08cc179f3..66d12ac8b 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -89,7 +89,7 @@ LEVELDB_DIR = $(ROOT)/deps/leveldb/ LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp LEVELDB_TIMESTAMP_INT = $(ROOT)/deps/leveldb_timestamp -LEVELDB_URL_GIT = https://code.google.com/p/leveldb/ +LEVELDB_URL_GIT = https://github.com/google/leveldb OPENAL_DIR = $(ROOT)/deps/openal-soft/ OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so From 2a9da62b21b5c509496b8fd427f29dd650035fe6 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 8 Sep 2015 23:57:28 +0200 Subject: [PATCH 359/670] Improve locale directory detection Use in-place locale directory if that exists, and static one (RUN_IN_PLACE or CUSTOM_LOCALEDIR) doesn't exist. Report to errorstream if neither static nor in-place locale dirs exist, and report successfully found paths to infostreem. Fixes two bugs: -> Regression of commit [1] where if we use RUN_IN_PLACE=false, but don't make install, locales aren't found. One might think this is no regression, as its no bug, but all other paths (mainmenu, etc.) are detected properly. -> Regression of commit [1] where locales don't work on windows. References: [1]: Commit 645e2086734e3d2d1ec95f50faa39f0f24304761 "Use CUSTOM_LOCALEDIR if specified" by @ShadowNinja --- src/porting.cpp | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/porting.cpp b/src/porting.cpp index 5fea1d9cf..d0dfc801f 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -511,15 +511,36 @@ void initializePaths() if (!setSystemPaths()) errorstream << "Failed to get one or more system-wide path" << std::endl; -#endif -#ifdef STATIC_LOCALEDIR - path_locale = STATIC_LOCALEDIR[0] ? STATIC_LOCALEDIR : getDataPath("locale"); -#else - path_locale = getDataPath("locale"); #endif infostream << "Detected share path: " << path_share << std::endl; infostream << "Detected user path: " << path_user << std::endl; + + bool found_localedir = false; +#ifdef STATIC_LOCALEDIR + 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; + } + } +#else + path_locale = getDataPath("locale"); + if (fs::PathExists(path_locale)) { + found_localedir = true; + } +#endif + if (!found_localedir) { + errorstream << "Couldn't find a locale directory!" << std::endl; + } + } From 64a5eec1bd92a352995ac510b69e6051421ee774 Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 10 Sep 2015 10:23:00 +0200 Subject: [PATCH 360/670] networkprotocol.h: remove "u16 command" from doc Its obvious that "u16 command" is inside every packet, therefore this commit removes all mentions of the command, if non-array like notation is used. We already didn't add "u16 command" to new packets or removed it at packet changes, so now we remove it from existing packets. --- src/network/networkprotocol.h | 48 +---------------------------------- 1 file changed, 1 insertion(+), 47 deletions(-) diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 82c82f79e..674c68104 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -208,7 +208,6 @@ enum ToClientCommand TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks TOCLIENT_ADDNODE = 0x21, /* - u16 command v3s16 position serialized mapnode u8 keep_metadata // Added in protocol version 22 @@ -255,7 +254,6 @@ enum ToClientCommand /* Sent as unreliable. - u16 command u16 number of player positions for each player: u16 peer_id @@ -271,7 +269,6 @@ enum ToClientCommand TOCLIENT_TIME_OF_DAY = 0x29, /* - u16 command u16 time (0-23999) Added in a later version: f1000 time_speed @@ -281,14 +278,12 @@ enum ToClientCommand TOCLIENT_CHAT_MESSAGE = 0x30, /* - u16 command u16 length wstring message */ TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31, /* - u16 command u16 count of removed objects for all removed objects { u16 id @@ -304,7 +299,6 @@ enum ToClientCommand TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32, /* - u16 command for all objects { u16 id @@ -315,13 +309,11 @@ enum ToClientCommand TOCLIENT_HP = 0x33, /* - u16 command u8 hp */ TOCLIENT_MOVE_PLAYER = 0x34, /* - u16 command v3f1000 player position f1000 player pitch f1000 player yaw @@ -329,14 +321,12 @@ enum ToClientCommand TOCLIENT_ACCESS_DENIED_LEGACY = 0x35, /* - u16 command u16 reason_length wstring reason */ TOCLIENT_PLAYERITEM = 0x36, // Obsolete /* - u16 command u16 count of player items for all player items { u16 peer id @@ -347,14 +337,12 @@ enum ToClientCommand TOCLIENT_DEATHSCREEN = 0x37, /* - u16 command u8 bool set camera point target v3f1000 camera point target (to point the death cause or whatever) */ TOCLIENT_MEDIA = 0x38, /* - u16 command u16 total number of texture bunches u16 index of this bunch u32 number of files in this bunch @@ -370,21 +358,18 @@ enum ToClientCommand TOCLIENT_TOOLDEF = 0x39, /* - u16 command u32 length of the next item serialized ToolDefManager */ TOCLIENT_NODEDEF = 0x3a, /* - u16 command u32 length of the next item serialized NodeDefManager */ TOCLIENT_CRAFTITEMDEF = 0x3b, /* - u16 command u32 length of the next item serialized CraftiItemDefManager */ @@ -392,7 +377,6 @@ enum ToClientCommand TOCLIENT_ANNOUNCE_MEDIA = 0x3c, /* - u16 command u32 number of files for each texture { u16 length of name @@ -404,14 +388,12 @@ enum ToClientCommand TOCLIENT_ITEMDEF = 0x3d, /* - u16 command u32 length of next item serialized ItemDefManager */ TOCLIENT_PLAY_SOUND = 0x3f, /* - u16 command s32 sound_id u16 len u8[len] sound name @@ -424,13 +406,11 @@ enum ToClientCommand TOCLIENT_STOP_SOUND = 0x40, /* - u16 command s32 sound_id */ TOCLIENT_PRIVILEGES = 0x41, /* - u16 command u16 number of privileges for each privilege u16 len @@ -439,7 +419,6 @@ enum ToClientCommand TOCLIENT_INVENTORY_FORMSPEC = 0x42, /* - u16 command u32 len u8[len] formspec */ @@ -463,7 +442,6 @@ enum ToClientCommand TOCLIENT_MOVEMENT = 0x45, /* - u16 command f1000 movement_acceleration_default f1000 movement_acceleration_air f1000 movement_acceleration_fast @@ -480,7 +458,6 @@ enum ToClientCommand TOCLIENT_SPAWN_PARTICLE = 0x46, /* - u16 command v3f1000 pos v3f1000 velocity v3f1000 acceleration @@ -494,7 +471,6 @@ enum ToClientCommand TOCLIENT_ADD_PARTICLESPAWNER = 0x47, /* - u16 command u16 amount f1000 spawntime v3f1000 minpos @@ -516,13 +492,11 @@ enum ToClientCommand TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, /* - u16 command u16 id */ TOCLIENT_HUDADD = 0x49, /* - u16 command u32 id u8 type v2f1000 pos @@ -542,13 +516,11 @@ enum ToClientCommand TOCLIENT_HUDRM = 0x4a, /* - u16 command u32 id */ TOCLIENT_HUDCHANGE = 0x4b, /* - u16 command u32 id u8 stat [v2f1000 data | @@ -559,14 +531,12 @@ enum ToClientCommand TOCLIENT_HUD_SET_FLAGS = 0x4c, /* - u16 command u32 flags u32 mask */ TOCLIENT_HUD_SET_PARAM = 0x4d, /* - u16 command u16 param u16 len u8[len] value @@ -574,13 +544,11 @@ enum ToClientCommand TOCLIENT_BREATH = 0x4e, /* - u16 command u16 breath */ TOCLIENT_SET_SKY = 0x4f, /* - u16 command u8[4] color (ARGB) u8 len u8[len] type @@ -592,14 +560,12 @@ enum ToClientCommand TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50, /* - u16 command u8 do_override (boolean) u16 day-night ratio 0...65535 */ TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51, /* - u16 command v2s32 stand/idle v2s32 walk v2s32 dig @@ -609,14 +575,12 @@ enum ToClientCommand TOCLIENT_EYE_OFFSET = 0x52, /* - u16 command v3f1000 first v3f1000 third */ TOCLIENT_DELETE_PARTICLESPAWNER = 0x53, /* - u16 command u32 id */ @@ -624,7 +588,6 @@ enum ToClientCommand /* Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP. - u16 command std::string bytes_s std::string bytes_B */ @@ -735,7 +698,6 @@ enum ToServerCommand TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete /* - u16 command v3s16 blockpos s16 id u16 textlen @@ -749,14 +711,12 @@ enum ToServerCommand TOSERVER_CHAT_MESSAGE = 0x32, /* - u16 command u16 length wstring message */ TOSERVER_SIGNNODETEXT = 0x33, // obsolete /* - u16 command v3s16 p u16 textlen textdata @@ -773,7 +733,6 @@ enum ToServerCommand TOSERVER_DAMAGE = 0x35, /* - u16 command u8 amount */ @@ -818,14 +777,12 @@ enum ToServerCommand TOSERVER_REMOVED_SOUNDS = 0x3a, /* - u16 command u16 len s32[len] sound_id */ TOSERVER_NODEMETA_FIELDS = 0x3b, /* - u16 command v3s16 p u16 len u8[len] form name (reserved for future use) @@ -839,7 +796,6 @@ enum ToServerCommand TOSERVER_INVENTORY_FIELDS = 0x3c, /* - u16 command u16 len u8[len] form name (reserved for future use) u16 number of fields @@ -852,7 +808,6 @@ enum ToServerCommand TOSERVER_REQUEST_MEDIA = 0x40, /* - u16 command u16 number of files requested for each file { u16 length of name @@ -862,12 +817,11 @@ enum ToServerCommand TOSERVER_RECEIVED_MEDIA = 0x41, /* - u16 command + */ TOSERVER_BREATH = 0x42, /* - u16 command u16 breath */ From beb963f10a3d8154fa58341f3d99078589bae72d Mon Sep 17 00:00:00 2001 From: hahoyer Date: Tue, 11 Aug 2015 21:25:13 +0200 Subject: [PATCH 361/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 698f6920e..de3872c5e 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-09 21:51+0200\n" -"Last-Translator: sfan5 \n" +"PO-Revision-Date: 2015-08-11 21:25+0200\n" +"Last-Translator: hahoyer \n" "Language-Team: German " "\n" "Language: de\n" From e4831d9249f39ebc127a4d51ce16161929d8400f Mon Sep 17 00:00:00 2001 From: Rui Date: Thu, 13 Aug 2015 19:32:32 +0200 Subject: [PATCH 362/670] Translated using Weblate (Japanese) Currently translated at 100.0% (270 of 270 strings) --- po/ja/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index fb68d7304..b717d764f 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-17 14:33+0200\n" +"PO-Revision-Date: 2015-08-13 19:32+0200\n" "Last-Translator: Rui \n" "Language-Team: Japanese " "\n" @@ -482,7 +482,7 @@ msgstr "メニューの大きさ" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " -msgstr "メニューの大きさとして設定する数値: " +msgstr "メニューの大きさとして設定されている数値: " #: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" @@ -554,7 +554,7 @@ msgstr "情報がありません" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" -msgstr "テクスチャパック" +msgstr "テクスチャ" #: src/client.cpp:1721 msgid "Loading textures..." @@ -760,11 +760,11 @@ msgstr "決定" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "操作の設定です。(変更に失敗した場合、minetest.confから該当する設定を削除してください)" +msgstr "操作設定です。(変更に失敗した場合、minetest.confから該当する設定を削除してください)" #: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" -msgstr "「使用」で降りる" +msgstr "「使用」キーで降りる" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" From 8ae30bb9d6a9b0ef4e3f5d7ae0b284cd8d1d2c38 Mon Sep 17 00:00:00 2001 From: Rui Date: Thu, 13 Aug 2015 20:18:47 +0200 Subject: [PATCH 363/670] Translated using Weblate (Japanese) Currently translated at 100.0% (270 of 270 strings) --- po/ja/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index b717d764f..e8685d067 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-13 19:32+0200\n" +"PO-Revision-Date: 2015-08-13 20:18+0200\n" "Last-Translator: Rui \n" "Language-Team: Japanese " "\n" @@ -768,7 +768,7 @@ msgstr "「使用」キーで降りる" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" -msgstr "「ジャンプ」二回押しで飛行モード" +msgstr "「ジャンプ」キー二回押しで飛行モード" #: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" From 67175a9e1d53fbe5b8b74e0c831dfa9bc341bfa4 Mon Sep 17 00:00:00 2001 From: Rui Date: Sat, 15 Aug 2015 03:28:03 +0200 Subject: [PATCH 364/670] Translated using Weblate (Japanese) Currently translated at 100.0% (270 of 270 strings) --- po/ja/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index e8685d067..969bcddcd 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-13 20:18+0200\n" -"Last-Translator: Rui \n" +"PO-Revision-Date: 2015-08-15 03:28+0200\n" +"Last-Translator: Rui \n" "Language-Team: Japanese " "\n" "Language: ja\n" @@ -1156,7 +1156,7 @@ msgstr "ExSel" #: src/keycode.cpp:248 msgid "OEM Clear" -msgstr "OEM Clear" +msgstr "OEMクリア" #: src/keycode.cpp:248 msgid "PA1" From 38d3f6ca45d05cc37af2ce9c719326c15a7a14cc Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 15 Aug 2015 15:37:45 +0200 Subject: [PATCH 365/670] Translated using Weblate (Lojban) Currently translated at 100% (0 of 0 strings) Created new translation. --- po/jbo/minetest.po | 1141 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1141 insertions(+) create mode 100644 po/jbo/minetest.po diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po new file mode 100644 index 000000000..59e5ad53d --- /dev/null +++ b/po/jbo/minetest.po @@ -0,0 +1,1141 @@ +# Language jbo translations for minetest package. +# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"PO-Revision-Date: 2015-07-17 07:23+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: jbo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +msgid "Ok" +msgstr "" + +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 +msgid "Hide Game" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 +msgid "Hide mp content" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:49 +msgid "Mod:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +msgid "Depends:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 +msgid "Save" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:55 +#: builtin/mainmenu/dlg_create_world.lua:64 +#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 +#: src/keycode.cpp:223 +msgid "Cancel" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:71 +msgid "Enable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:73 +msgid "Disable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 +msgid "enabled" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:85 +msgid "Enable all" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:50 +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:53 +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:56 +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:59 +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:63 +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:68 +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:69 +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:72 +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:73 +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:99 +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:116 +msgid "No worldname given or no game selected" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:26 +msgid "Are you sure you want to delete \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:27 +#: builtin/mainmenu/dlg_delete_world.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:28 +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:41 +msgid "Modmgr: failed to delete \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:45 +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua:24 +msgid "Delete World \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua:26 +msgid "No" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua:26 +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +msgid "Accept" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:344 +msgid "Install Mod: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:345 +msgid "" +"\n" +"Install Mod: unsupported filetype \"$1\" or broken archive" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:365 +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:368 +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:388 +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" + +#: builtin/mainmenu/store.lua:88 +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua:160 +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua:162 +msgid "Shortname:" +msgstr "" + +#: builtin/mainmenu/store.lua:472 +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua:497 +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/store.lua:499 +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua:518 +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua:526 +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:22 +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:31 +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:47 +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:30 +msgid "Installed Mods:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:39 +msgid "Online mod repository" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:78 +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:82 +msgid "Mod information:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:93 +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:95 +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:106 +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:121 +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:165 +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:23 +msgid "Address / Port :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:24 +msgid "Name / Password :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:29 +#: builtin/mainmenu/tab_simple_main.lua:30 +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 +msgid "Delete" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:38 +#: builtin/mainmenu/tab_simple_main.lua:34 +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:257 +msgid "Client" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:29 +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:100 +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:35 +msgid "Public" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:45 +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:47 +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:51 +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 +msgid "Server" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:21 +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:23 +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 +msgid "Are you sure to reset your singleplayer world?" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:102 +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:202 +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:204 +msgid "Enable Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:206 +msgid "3D Clouds" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:208 +msgid "Opaque Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:210 +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 +msgid "Restart minetest for driver change to take effect" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:228 +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:233 +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:236 +msgid "Reset singleplayer world" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:240 +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:244 +msgid "Scaling factor applied to menu elements: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:250 +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:256 +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +msgid "Bumpmapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +msgid "Generate Normalmaps" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:308 +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:430 +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua:82 +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua:83 +msgid "Config mods" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua:201 +msgid "Main" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +msgid "Play" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua:246 +msgid "Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua:49 +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua:69 +msgid "No information available" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua:114 +msgid "Texturepacks" +msgstr "" + +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 +msgid "Item textures..." +msgstr "" + +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + +#: src/fontengine.cpp:70 src/fontengine.cpp:226 +msgid "needs_fallback_font" +msgstr "" + +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "" + +#: src/game.cpp:1073 +msgid "Respawn" +msgstr "" + +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +msgid "Change Keys" +msgstr "" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp:2322 +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp:2329 +msgid "Media..." +msgstr "" + +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" + +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" + +#: src/game.cpp:4363 +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/guiFormSpecMenu.cpp:2855 +msgid "Enter " +msgstr "" + +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:125 +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:165 +msgid "\"Use\" = climb down" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:180 +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:295 +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:373 +msgid "press key" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:399 +msgid "Forward" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:400 +msgid "Backward" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +msgid "Right" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:403 +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:404 +msgid "Jump" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:405 +msgid "Sneak" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:406 +msgid "Drop" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:407 +msgid "Inventory" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:408 +msgid "Chat" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:409 +msgid "Command" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:410 +msgid "Console" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:411 +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:412 +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:413 +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:414 +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:415 +msgid "Range select" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:416 +msgid "Print stacks" +msgstr "" + +#: src/guiPasswordChange.cpp:108 +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp:124 +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp:139 +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp:155 +msgid "Change" +msgstr "" + +#: src/guiPasswordChange.cpp:164 +msgid "Passwords do not match!" +msgstr "" + +#: src/guiVolumeChange.cpp:105 +msgid "Sound Volume: " +msgstr "" + +#: src/guiVolumeChange.cpp:119 +msgid "Exit" +msgstr "" + +#: src/keycode.cpp:223 +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp:223 +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp:223 +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp:223 +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Back" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Clear" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Return" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Tab" +msgstr "" + +#: src/keycode.cpp:224 +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Capital" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Control" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Kana" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Menu" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Pause" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Shift" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Convert" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Escape" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Final" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Junja" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp:227 +msgid "End" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Home" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Next" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Prior" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Space" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Down" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Execute" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Print" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Select" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Up" +msgstr "" + +#: src/keycode.cpp:229 +msgid "Help" +msgstr "" + +#: src/keycode.cpp:229 +msgid "Insert" +msgstr "" + +#: src/keycode.cpp:229 +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp:232 +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Apps" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp:239 +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp:239 +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp:240 +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp:240 +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Comma" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Minus" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Period" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Plus" +msgstr "" + +#: src/keycode.cpp:247 +msgid "Attn" +msgstr "" + +#: src/keycode.cpp:247 +msgid "CrSel" +msgstr "" + +#: src/keycode.cpp:248 +msgid "Erase OEF" +msgstr "" + +#: src/keycode.cpp:248 +msgid "ExSel" +msgstr "" + +#: src/keycode.cpp:248 +msgid "OEM Clear" +msgstr "" + +#: src/keycode.cpp:248 +msgid "PA1" +msgstr "" + +#: src/keycode.cpp:248 +msgid "Zoom" +msgstr "" From a9586d59e29c84e515f784de2e56c017d89fd436 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 15 Aug 2015 15:34:22 +0200 Subject: [PATCH 366/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index de3872c5e..128ea54d2 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-11 21:25+0200\n" -"Last-Translator: hahoyer \n" +"PO-Revision-Date: 2015-08-15 15:34+0200\n" +"Last-Translator: Wuzzy \n" "Language-Team: German " "\n" "Language: de\n" @@ -38,8 +38,8 @@ msgstr "Lädt ..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Bitte versuchen Sie die Öffentliche Serverliste neu zu aktivieren, und " -"prüfen Sie Ihre Internetverbindung." +"Bitte versuchen Sie die öffentliche Serverliste neu zu aktivieren und prüfen " +"Sie Ihre Internetverbindung." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -872,7 +872,7 @@ msgstr "Neues Passwort" #: src/guiPasswordChange.cpp:139 msgid "Confirm Password" -msgstr "Passwort wiederholen" +msgstr "Passwort wiederh." #: src/guiPasswordChange.cpp:155 msgid "Change" From 97493614e30f497488c60f6ba68ec0c3a9c7a827 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 15 Aug 2015 16:30:47 +0200 Subject: [PATCH 367/670] Translated using Weblate (Lojban) Currently translated at 38.5% (104 of 270 strings) --- po/jbo/minetest.po | 235 +++++++++++++++++++++++---------------------- 1 file changed, 122 insertions(+), 113 deletions(-) diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po index 59e5ad53d..cb8acab72 100644 --- a/po/jbo/minetest.po +++ b/po/jbo/minetest.po @@ -8,13 +8,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-17 07:23+0200\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2015-08-15 16:30+0200\n" +"Last-Translator: Wuzzy \n" +"Language-Team: Lojban " +"\n" "Language: jbo\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 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" @@ -26,11 +29,11 @@ msgstr "" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" -msgstr "" +msgstr "je'e" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." -msgstr "" +msgstr ".i ca'o samymo'i" #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." @@ -55,19 +58,20 @@ msgid "Mod:" msgstr "" #: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#, fuzzy msgid "Depends:" -msgstr "" +msgstr "nitcu" #: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" -msgstr "" +msgstr "rejgau" #: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 #: src/keycode.cpp:223 msgid "Cancel" -msgstr "" +msgstr "fitytoltu'i" #: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" @@ -80,7 +84,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua:77 #: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" -msgstr "" +msgstr "selpli" #: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" @@ -88,11 +92,11 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua:50 msgid "World name" -msgstr "" +msgstr "munje cmene" #: builtin/mainmenu/dlg_create_world.lua:53 msgid "Seed" -msgstr "" +msgstr "le munje ke cunso namcu" #: builtin/mainmenu/dlg_create_world.lua:56 msgid "Mapgen" @@ -104,7 +108,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua:63 msgid "Create" -msgstr "" +msgstr "zbasu" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." @@ -116,7 +120,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." -msgstr "" +msgstr ".i .e'unai la'o gy.Minimal Development Test.gy. cu tutci le finti" #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" @@ -124,7 +128,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" -msgstr "" +msgstr ".i lo munje me'e la'o gy.$1.gy. cu zasti" #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" @@ -132,17 +136,17 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr ".i xu do je'u djica lo nu vimcu la'o gy.$1.gy." #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 #: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" -msgstr "" +msgstr "go'i" #: builtin/mainmenu/dlg_delete_mod.lua:28 msgid "No of course not!" -msgstr "" +msgstr "nasai go'i" #: builtin/mainmenu/dlg_delete_mod.lua:41 msgid "Modmgr: failed to delete \"$1\"" @@ -154,11 +158,11 @@ msgstr "" #: builtin/mainmenu/dlg_delete_world.lua:24 msgid "Delete World \"$1\"?" -msgstr "" +msgstr ".i xu do djica lo nu vimcu lo munje be me'e zoi gy.$1.gy." #: builtin/mainmenu/dlg_delete_world.lua:26 msgid "No" -msgstr "" +msgstr "na go'i" #: builtin/mainmenu/dlg_rename_modpack.lua:26 msgid "Rename Modpack:" @@ -166,7 +170,7 @@ msgstr "" #: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" -msgstr "" +msgstr "fitytu'i" #: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" @@ -192,11 +196,11 @@ msgstr "" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" -msgstr "" +msgstr "kalsa" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" -msgstr "" +msgstr "sisku" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." @@ -207,8 +211,9 @@ msgid "Successfully installed:" msgstr "" #: builtin/mainmenu/store.lua:162 +#, fuzzy msgid "Shortname:" -msgstr "" +msgstr "tordu cmene" #: builtin/mainmenu/store.lua:472 msgid "Rating" @@ -228,11 +233,11 @@ msgstr "" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" -msgstr "" +msgstr "$1 moi le'i papri poi ke'a $1 mei" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" -msgstr "" +msgstr "lo finti liste" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" @@ -288,11 +293,11 @@ msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 msgid "Address / Port :" -msgstr "" +msgstr "lo samjudri jo'u judrnporte" #: builtin/mainmenu/tab_multiplayer.lua:24 msgid "Name / Password :" -msgstr "" +msgstr "lo cmene .e lo lerpoijaspu" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 @@ -302,17 +307,17 @@ msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 #: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" -msgstr "" +msgstr "vimcu" #: builtin/mainmenu/tab_multiplayer.lua:38 #: builtin/mainmenu/tab_simple_main.lua:34 msgid "Connect" -msgstr "" +msgstr "samjongau" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 msgid "Creative mode" -msgstr "" +msgstr "le nu finti kelci" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 @@ -326,11 +331,11 @@ msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" -msgstr "" +msgstr "lo samtciselse'u" #: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" -msgstr "" +msgstr "cnino" #: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" @@ -338,16 +343,17 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:29 msgid "Start Game" -msgstr "" +msgstr "cfari fa lo nu kelci" #: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:100 +#, fuzzy msgid "Select World:" -msgstr "" +msgstr "cuxna lo munje" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 #: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" -msgstr "" +msgstr "le nu finti kelci" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 #: builtin/mainmenu/tab_singleplayer.lua:103 @@ -356,11 +362,11 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" -msgstr "" +msgstr "gubni" #: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 msgid "Name/Password" -msgstr "" +msgstr "lo cmene .e lo lerpoijaspu" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" @@ -368,32 +374,32 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" -msgstr "" +msgstr "lo judrnporte" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" -msgstr "" +msgstr "lo samtcise'u judrnporte" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 msgid "No world created or selected!" -msgstr "" +msgstr ".i lo no munje cu puzi zbasu gi'a cuxna" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" -msgstr "" +msgstr "lo samtcise'u" #: builtin/mainmenu/tab_settings.lua:21 msgid "Opaque Leaves" -msgstr "" +msgstr "lo tolkli pezli" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" -msgstr "" +msgstr "lo sampu pezli" #: builtin/mainmenu/tab_settings.lua:23 msgid "Fancy Leaves" -msgstr "" +msgstr "lo melbi pezli" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" @@ -401,11 +407,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" -msgstr "" +msgstr "lo puvyrelyli'iju'e" #: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" -msgstr "" +msgstr "lo puvycibli'iju'e" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" @@ -413,39 +419,39 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" -msgstr "" +msgstr "lo puvrmipmepi" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr ".i xu do je'u djica lo nu kraga'igau le do za'e pavykelci munje" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "" +msgstr "nasai go'i" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" -msgstr "" +msgstr "lo xutla se gusni" #: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" -msgstr "" +msgstr "lo kantu" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" -msgstr "" +msgstr "le bliku dilnu" #: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" -msgstr "" +msgstr "lo tolkli djacu" #: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" -msgstr "" +msgstr "lo jorne blaci" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" @@ -465,7 +471,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" -msgstr "" +msgstr "lo ti'orkemsamtci" #: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" @@ -473,7 +479,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" -msgstr "" +msgstr "kraga'igau le za'e pavykelci munje" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" @@ -533,7 +539,7 @@ msgstr "" #: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" -msgstr "" +msgstr "lo ralju" #: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" @@ -541,7 +547,7 @@ msgstr "" #: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" -msgstr "" +msgstr "pa kelci" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" @@ -557,7 +563,7 @@ msgstr "" #: src/client.cpp:1721 msgid "Loading textures..." -msgstr "" +msgstr ".i ca'o samymo'i le tengu datnyvei" #: src/client.cpp:1736 msgid "Rebuilding shaders..." @@ -565,15 +571,15 @@ msgstr "" #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "" +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "" +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." #: src/client.cpp:1768 msgid "Item textures..." -msgstr "" +msgstr ".i ca'o samymo'i le dacti ke tengu datnyvei" #: src/client.cpp:1793 msgid "Done!" @@ -609,7 +615,7 @@ msgstr "" #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" -msgstr "" +msgstr "no" #: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" @@ -617,11 +623,11 @@ msgstr "" #: src/game.cpp:1072 msgid "You died." -msgstr "" +msgstr ".i do pu morsi" #: src/game.cpp:1073 msgid "Respawn" -msgstr "" +msgstr "gasnu lo nu mi tolcanci" #: src/game.cpp:1092 msgid "" @@ -656,11 +662,11 @@ msgstr "" #: src/game.cpp:1125 msgid "Continue" -msgstr "" +msgstr "ranji" #: src/game.cpp:1129 msgid "Change Password" -msgstr "" +msgstr "gafygau lo lerpoijaspu" #: src/game.cpp:1134 msgid "Sound Volume" @@ -676,7 +682,7 @@ msgstr "" #: src/game.cpp:1141 msgid "Exit to OS" -msgstr "" +msgstr "tolcfagau" #: src/game.cpp:1841 msgid "Shutting down..." @@ -684,27 +690,29 @@ msgstr "" #: src/game.cpp:1948 msgid "Creating server..." -msgstr "" +msgstr ".i lo samtcise'u cu se zbasu" #: src/game.cpp:1984 msgid "Creating client..." -msgstr "" +msgstr ".i lo samtciselse'u cu se zbasu" #: src/game.cpp:2159 msgid "Resolving address..." -msgstr "" +msgstr ".i ca'o troci lo nu facki lo samjudri" #: src/game.cpp:2261 msgid "Connecting to server..." -msgstr "" +msgstr ".i ca'o troci lo za'i samjo'e lo samse'u" #: src/game.cpp:2317 +#, fuzzy msgid "Item definitions..." -msgstr "" +msgstr ".i ca'o samymo'i tu'a le dacti" #: src/game.cpp:2322 +#, fuzzy msgid "Node definitions..." -msgstr "" +msgstr ".i ca'o samymo'i tu'a lo me la'o gy.node.gy." #: src/game.cpp:2329 msgid "Media..." @@ -729,8 +737,9 @@ msgid "Enter " msgstr "" #: src/guiFormSpecMenu.cpp:2875 +#, fuzzy msgid "ok" -msgstr "" +msgstr "je'e" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" @@ -750,51 +759,51 @@ msgstr "" #: src/guiKeyChangeMenu.cpp:373 msgid "press key" -msgstr "" +msgstr "ko da'ergau le batke" #: src/guiKeyChangeMenu.cpp:399 msgid "Forward" -msgstr "" +msgstr "za'i ca'u muvdu" #: src/guiKeyChangeMenu.cpp:400 msgid "Backward" -msgstr "" +msgstr "za'i ti'a muvdu" #: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" -msgstr "" +msgstr "za'i zu'e muvdu" #: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" -msgstr "" +msgstr "za'i ri'u muvdu" #: src/guiKeyChangeMenu.cpp:403 msgid "Use" -msgstr "" +msgstr "mu'e pilno" #: src/guiKeyChangeMenu.cpp:404 msgid "Jump" -msgstr "" +msgstr "mu'e plipe" #: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" -msgstr "" +msgstr "za'i masno cadzu" #: src/guiKeyChangeMenu.cpp:406 msgid "Drop" -msgstr "" +msgstr "mu'e falcru" #: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" -msgstr "" +msgstr "lo dacti uidje" #: src/guiKeyChangeMenu.cpp:408 msgid "Chat" -msgstr "" +msgstr "samta'a" #: src/guiKeyChangeMenu.cpp:409 msgid "Command" -msgstr "" +msgstr "minde" #: src/guiKeyChangeMenu.cpp:410 msgid "Console" @@ -802,11 +811,11 @@ msgstr "" #: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" -msgstr "" +msgstr "mu'e co'a jonai mo'u vofli" #: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" -msgstr "" +msgstr "mu'e co'a jonai mo'u sutra" #: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" @@ -818,7 +827,7 @@ msgstr "" #: src/guiKeyChangeMenu.cpp:415 msgid "Range select" -msgstr "" +msgstr "mu'e cuxna fi le'i se kuspe" #: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" @@ -826,27 +835,27 @@ msgstr "" #: src/guiPasswordChange.cpp:108 msgid "Old Password" -msgstr "" +msgstr "lo slabu lerpoijaspu" #: src/guiPasswordChange.cpp:124 msgid "New Password" -msgstr "" +msgstr "lo cnino lerpoijaspu" #: src/guiPasswordChange.cpp:139 msgid "Confirm Password" -msgstr "" +msgstr "le rapli lerpoijaspu" #: src/guiPasswordChange.cpp:155 msgid "Change" -msgstr "" +msgstr "gafygau" #: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" -msgstr "" +msgstr ".i lo lerpoijaspu na mintu" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " -msgstr "" +msgstr "lo ni sance " #: src/guiVolumeChange.cpp:119 msgid "Exit" @@ -854,19 +863,19 @@ msgstr "" #: src/keycode.cpp:223 msgid "Left Button" -msgstr "" +msgstr "lo zulselpevysmacu" #: src/keycode.cpp:223 msgid "Middle Button" -msgstr "" +msgstr "lo mijyselpevysmacu" #: src/keycode.cpp:223 msgid "Right Button" -msgstr "" +msgstr "lo prityselpevysmacu" #: src/keycode.cpp:223 msgid "X Button 1" -msgstr "" +msgstr "la'o gy.X Button 1.gy." #: src/keycode.cpp:224 msgid "Back" @@ -886,7 +895,7 @@ msgstr "" #: src/keycode.cpp:224 msgid "X Button 2" -msgstr "" +msgstr "la'o gy.X Button 2.gy." #: src/keycode.cpp:225 msgid "Capital" @@ -946,7 +955,7 @@ msgstr "" #: src/keycode.cpp:227 msgid "Mode Change" -msgstr "" +msgstr "la'o gy.Mode Change.gy." #: src/keycode.cpp:227 msgid "Next" @@ -1098,43 +1107,43 @@ msgstr "" #: src/keycode.cpp:243 msgid "Comma" -msgstr "" +msgstr "slaka bu" #: src/keycode.cpp:243 msgid "Minus" -msgstr "" +msgstr "vu'u bu" #: src/keycode.cpp:243 msgid "Period" -msgstr "" +msgstr "denpa bu" #: src/keycode.cpp:243 msgid "Plus" -msgstr "" +msgstr "su'i bu" #: src/keycode.cpp:247 msgid "Attn" -msgstr "" +msgstr "la'o gy.Attn.gy." #: src/keycode.cpp:247 msgid "CrSel" -msgstr "" +msgstr "la'o gy.CrSel.gy." #: src/keycode.cpp:248 msgid "Erase OEF" -msgstr "" +msgstr "la'o gy.Erase OEF.gy." #: src/keycode.cpp:248 msgid "ExSel" -msgstr "" +msgstr "la'o gy.ExSel.gy." #: src/keycode.cpp:248 msgid "OEM Clear" -msgstr "" +msgstr "la'o gy.OEM Clear.gy." #: src/keycode.cpp:248 msgid "PA1" -msgstr "" +msgstr "la'o gy.PA1.gy." #: src/keycode.cpp:248 msgid "Zoom" From ba31be0e47a7db8375afedf9165f587f56509fe3 Mon Sep 17 00:00:00 2001 From: betacentury Date: Mon, 24 Aug 2015 20:35:12 +0200 Subject: [PATCH 368/670] Translated using Weblate (Italian) Currently translated at 80.7% (218 of 270 strings) --- po/it/minetest.po | 54 ++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/po/it/minetest.po b/po/it/minetest.po index ae9614944..16a79bc2f 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: Minetest 0.4.9\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-07 14:43+0200\n" -"Last-Translator: Michal Čihař \n" -"Language-Team: Italian \n" +"PO-Revision-Date: 2015-08-24 20:35+0200\n" +"Last-Translator: betacentury \n" +"Language-Team: Italian " +"\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +21,11 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Si è verificato un errore in uno script Lua, come ad esempio un modulo:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Si è verificato un errore:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -111,11 +111,11 @@ msgstr "Creare" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "" +msgstr "Non hai installato nessun sottogioco." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "" +msgstr "Scaricane uno da minetest.net" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." @@ -123,7 +123,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Scarica un sottogioco, come minetest_game, da minetest.net" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" @@ -175,16 +175,15 @@ msgstr "Accettare" #: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" -msgstr "Installare un modulo: file: \"$1\"" +msgstr "Installazione modulo: file: \"$1\"" #: builtin/mainmenu/modmgr.lua:345 -#, fuzzy msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Installare un modulo: tipo di file non supportato \"$1\"" +"Installazione modulo: tipo di file non supportato \"$1\"" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" @@ -203,11 +202,11 @@ msgstr "" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" -msgstr "" +msgstr "Non categorizzato" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" -msgstr "" +msgstr "Cerca" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." @@ -215,7 +214,7 @@ msgstr "" #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" -msgstr "" +msgstr "Installato con successo:" #: builtin/mainmenu/store.lua:162 #, fuzzy @@ -332,9 +331,8 @@ msgstr "Modalità creativa" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 -#, fuzzy msgid "Damage enabled" -msgstr "attivata" +msgstr "Danni abilitati" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 @@ -387,7 +385,7 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" -msgstr "" +msgstr "Porta" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" @@ -406,13 +404,12 @@ msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Acqua opaca" +msgstr "Foglie opache" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" -msgstr "" +msgstr "Foglie semplici" #: builtin/mainmenu/tab_settings.lua:23 #, fuzzy @@ -421,15 +418,13 @@ msgstr "Alberi migliori" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Nessun Filtro" #: builtin/mainmenu/tab_settings.lua:33 -#, fuzzy msgid "Bilinear Filter" msgstr "Filtro Bi-Lineare" #: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy msgid "Trilinear Filter" msgstr "Filtro Tri-Lineare" @@ -451,7 +446,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "" +msgstr "No!!!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" @@ -475,8 +470,9 @@ msgid "Connected Glass" msgstr "Connettere" #: builtin/mainmenu/tab_settings.lua:212 +#, fuzzy msgid "Node Highlighting" -msgstr "" +msgstr "Evidenziamento Nodi" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" @@ -487,8 +483,9 @@ msgid "Rendering:" msgstr "" #: builtin/mainmenu/tab_settings.lua:226 +#, fuzzy msgid "Restart minetest for driver change to take effect" -msgstr "" +msgstr "Riavviare minetest per rendere effettive le modifiche" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" @@ -558,9 +555,8 @@ msgid "Start Singleplayer" msgstr "Giocatore singolo" #: builtin/mainmenu/tab_simple_main.lua:83 -#, fuzzy msgid "Config mods" -msgstr "Configurare" +msgstr "Config. moduli" #: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy From 26f81955c8a7d7afcbb570e14f5d585eb7af535d Mon Sep 17 00:00:00 2001 From: betacentury Date: Mon, 24 Aug 2015 20:44:17 +0200 Subject: [PATCH 369/670] Translated using Weblate (Italian) Currently translated at 82.9% (224 of 270 strings) --- po/it/minetest.po | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/po/it/minetest.po b/po/it/minetest.po index 16a79bc2f..478cb261d 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Minetest 0.4.9\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-24 20:35+0200\n" +"PO-Revision-Date: 2015-08-24 20:44+0200\n" "Last-Translator: betacentury \n" "Language-Team: Italian " "\n" @@ -595,12 +595,14 @@ msgid "Rebuilding shaders..." msgstr "Risoluzione dell'indirizzo..." #: src/client.cpp:1743 +#, fuzzy msgid "Initializing nodes..." -msgstr "" +msgstr "Inizializzazione nodi..." #: src/client.cpp:1760 +#, fuzzy msgid "Initializing nodes" -msgstr "" +msgstr "Inizializzazione nodi" #: src/client.cpp:1768 msgid "Item textures..." @@ -608,7 +610,7 @@ msgstr "Immagini degli oggetti..." #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Fatto!" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" @@ -616,7 +618,7 @@ msgstr "Menù principale" #: src/client/clientlauncher.cpp:223 msgid "Player name too long." -msgstr "" +msgstr "Nome del giocatore troppo lungo." #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" @@ -630,7 +632,7 @@ msgstr "" #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "Il percorso del mondo fornito non esiste: " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" @@ -759,11 +761,11 @@ msgstr "Media..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" @@ -774,12 +776,13 @@ msgstr "" "Controllare debug.txt per i dettagli." #: src/guiFormSpecMenu.cpp:2855 +#, fuzzy msgid "Enter " -msgstr "" +msgstr "Invio " #: src/guiFormSpecMenu.cpp:2875 msgid "ok" -msgstr "" +msgstr "ok" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" From 51064d0362479e87f222cbf96c99af27d3ca1a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Van=C4=9Bk?= Date: Tue, 25 Aug 2015 19:47:36 +0200 Subject: [PATCH 370/670] Translated using Weblate (Czech) Currently translated at 95.5% (258 of 270 strings) --- po/cs/minetest.po | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 4fcaab18a..4b1343888 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-02-12 16:16+0100\n" +"PO-Revision-Date: 2015-08-25 18:58+0100\n" "Last-Translator: Jakub Vanek \n" "Language-Team: Czech <>\n" "Language: cs\n" @@ -19,11 +19,11 @@ msgstr "" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Nastala chyba v Lua skriptu, což může být např. mod:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Nastala chyba:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -36,6 +36,8 @@ msgstr "Nahrávám..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Zkuste znovu povolit seznam veřejných serverů a zkontrolujte své internetové " +"připojení." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -240,16 +242,15 @@ msgstr "Autoři" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" -msgstr "Vývojáři jádra" +msgstr "Klíčoví vývojáři" #: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "Aktivní přispěvatelé" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Vývojáři jádra" +msgstr "Bývalí klíčoví vývojáři" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -382,28 +383,24 @@ msgstr "Port serveru" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "Nebyla vybrána podhra nebo název" +msgstr "Nevybrali jste žádný svět!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Neprůhledná voda" +msgstr "Neprůhledné listí" #: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy msgid "Simple Leaves" -msgstr "Vlnění listů" +msgstr "Jednoduché listí" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Ozdobné stromy" +msgstr "Vícevrstevné listí" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" @@ -575,12 +572,11 @@ msgstr "Sestavuji shadery..." #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "Inicializuji bloky..." +msgstr "Vytvářím bloky..." #: src/client.cpp:1760 -#, fuzzy msgid "Initializing nodes" -msgstr "Inicializuji bloky..." +msgstr "Vytvářím bloky" #: src/client.cpp:1768 msgid "Item textures..." @@ -747,11 +743,11 @@ msgstr "Média..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" @@ -848,9 +844,8 @@ msgid "Toggle fast" msgstr "Turbo" #: src/guiKeyChangeMenu.cpp:413 -#, fuzzy msgid "Toggle Cinematic" -msgstr "Turbo" +msgstr "Režim pohybu kamery" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" From 14dc75c470a12b82fb8f330489cacca8c1d50ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Van=C4=9Bk?= Date: Tue, 25 Aug 2015 19:54:13 +0200 Subject: [PATCH 371/670] Translated using Weblate (Czech) Currently translated at 100.0% (270 of 270 strings) --- po/cs/minetest.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 4b1343888..780fa529c 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -8,14 +8,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-25 18:58+0100\n" -"Last-Translator: Jakub Vanek \n" -"Language-Team: Czech <>\n" +"PO-Revision-Date: 2015-08-25 19:54+0200\n" +"Last-Translator: Jakub Vaněk \n" +"Language-Team: Czech " +"\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" @@ -123,7 +125,7 @@ msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývoj #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Stáhněte si z minetest.net podhru, například minetest_game." +msgstr "Stáhněte si z minetest.net podhru, například minetest_game" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" @@ -468,7 +470,7 @@ msgstr "Renderování:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" -msgstr "Aby se změna ovladače projevila, restartujte Minetest." +msgstr "Aby se změna ovladače projevila, restartujte Minetest" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" @@ -845,7 +847,7 @@ msgstr "Turbo" #: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" -msgstr "Režim pohybu kamery" +msgstr "Plynulý pohyb kamery" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" From 7dcc115b02af411844152ae49c8579d1bd146108 Mon Sep 17 00:00:00 2001 From: shadowninja Date: Wed, 26 Aug 2015 01:25:25 +0200 Subject: [PATCH 372/670] Translated using Weblate (Spanish) Currently translated at 100.0% (270 of 270 strings) --- po/es/minetest.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 29dca2f2d..f2b2b5758 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-02-14 13:35+0100\n" -"Last-Translator: Diego Martínez \n" -"Language-Team: \n" +"PO-Revision-Date: 2015-08-26 01:25+0200\n" +"Last-Translator: shadowninja \n" +"Language-Team: Spanish " +"\n" "Language: es\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: Poedit 1.7.4\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" @@ -404,9 +405,8 @@ msgid "Simple Leaves" msgstr "Hojas simples" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Árboles detallados" +msgstr "Hojas elegantes" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" @@ -751,11 +751,11 @@ msgstr "Media..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" From 17e83c05c5958de358a1d0a3e7f5ad21eafd3dbb Mon Sep 17 00:00:00 2001 From: shadowninja Date: Wed, 26 Aug 2015 01:29:54 +0200 Subject: [PATCH 373/670] Translated using Weblate (Spanish) Currently translated at 100.0% (270 of 270 strings) --- po/es/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index f2b2b5758..b3f563249 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-26 01:25+0200\n" +"PO-Revision-Date: 2015-08-26 01:29+0200\n" "Last-Translator: shadowninja \n" "Language-Team: Spanish " "\n" @@ -910,7 +910,7 @@ msgstr "Botón derecho" #: src/keycode.cpp:223 msgid "X Button 1" -msgstr "X Button 1" +msgstr "X Botón 1" #: src/keycode.cpp:224 msgid "Back" @@ -930,7 +930,7 @@ msgstr "Tabulador" #: src/keycode.cpp:224 msgid "X Button 2" -msgstr "X Button 2" +msgstr "X Botón 2" #: src/keycode.cpp:225 msgid "Capital" From d58211264e98d80dc80fc5b15171670a2b82abb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Van=C4=9Bk?= Date: Tue, 1 Sep 2015 18:04:11 +0200 Subject: [PATCH 374/670] Translated using Weblate (Czech) Currently translated at 100.0% (270 of 270 strings) --- po/cs/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 780fa529c..3aa1b151f 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-25 19:54+0200\n" +"PO-Revision-Date: 2015-09-01 18:04+0200\n" "Last-Translator: Jakub Vaněk \n" "Language-Team: Czech " "\n" @@ -578,7 +578,7 @@ msgstr "Vytvářím bloky..." #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "Vytvářím bloky" +msgstr "Inicializuji bloky" #: src/client.cpp:1768 msgid "Item textures..." From 0d1b41f3800d17915c4cbac86f6fbdc282b27aa4 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 3 Sep 2015 19:24:34 +0200 Subject: [PATCH 375/670] Translated using Weblate (Esperanto) Currently translated at 100% (0 of 0 strings) Created new translation. --- po/eo/minetest.po | 1142 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1142 insertions(+) create mode 100644 po/eo/minetest.po diff --git a/po/eo/minetest.po b/po/eo/minetest.po new file mode 100644 index 000000000..c19e19ca0 --- /dev/null +++ b/po/eo/minetest.po @@ -0,0 +1,1142 @@ +# Esperanto translations for minetest package. +# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"PO-Revision-Date: 2015-07-17 07:23+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: eo\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" + +#: builtin/fstk/ui.lua:82 +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua:84 +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +msgid "Ok" +msgstr "" + +#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua:240 +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:29 +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:33 +#: builtin/mainmenu/dlg_config_world.lua:35 +msgid "Hide Game" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:39 +#: builtin/mainmenu/dlg_config_world.lua:41 +msgid "Hide mp content" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:49 +msgid "Mod:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +msgid "Depends:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 +msgid "Save" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:55 +#: builtin/mainmenu/dlg_create_world.lua:64 +#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 +#: src/keycode.cpp:223 +msgid "Cancel" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:71 +msgid "Enable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:73 +msgid "Disable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:77 +#: builtin/mainmenu/dlg_config_world.lua:79 +msgid "enabled" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua:85 +msgid "Enable all" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:50 +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:53 +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:56 +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:59 +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:63 +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:68 +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:69 +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:72 +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:73 +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:99 +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua:116 +msgid "No worldname given or no game selected" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:26 +msgid "Are you sure you want to delete \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:27 +#: builtin/mainmenu/dlg_delete_world.lua:25 +#: builtin/mainmenu/tab_settings.lua:100 +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:28 +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:41 +msgid "Modmgr: failed to delete \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua:45 +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua:24 +msgid "Delete World \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua:26 +msgid "No" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua:26 +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +msgid "Accept" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:344 +msgid "Install Mod: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:345 +msgid "" +"\n" +"Install Mod: unsupported filetype \"$1\" or broken archive" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:365 +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:368 +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" + +#: builtin/mainmenu/modmgr.lua:388 +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" + +#: builtin/mainmenu/store.lua:88 +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua:126 +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua:160 +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua:162 +msgid "Shortname:" +msgstr "" + +#: builtin/mainmenu/store.lua:472 +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua:497 +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/store.lua:499 +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua:518 +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua:526 +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:22 +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:31 +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:47 +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:54 +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua:59 +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:30 +msgid "Installed Mods:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:39 +msgid "Online mod repository" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:78 +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:82 +msgid "Mod information:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:93 +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:95 +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:106 +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:121 +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua:165 +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:23 +msgid "Address / Port :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:24 +msgid "Name / Password :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:29 +#: builtin/mainmenu/tab_simple_main.lua:30 +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 +#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 +msgid "Delete" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:38 +#: builtin/mainmenu/tab_simple_main.lua:34 +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:62 +#: builtin/mainmenu/tab_simple_main.lua:45 +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:63 +#: builtin/mainmenu/tab_simple_main.lua:46 +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:64 +#: builtin/mainmenu/tab_simple_main.lua:47 +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua:257 +msgid "Client" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:29 +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:100 +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 +#: builtin/mainmenu/tab_singleplayer.lua:101 +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 +#: builtin/mainmenu/tab_singleplayer.lua:103 +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:35 +msgid "Public" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:45 +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:47 +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:51 +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:138 +#: builtin/mainmenu/tab_singleplayer.lua:165 +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua:191 +msgid "Server" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:21 +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:22 +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:23 +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:32 +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:33 +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:34 +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:43 +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:44 +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:45 +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:98 +msgid "Are you sure to reset your singleplayer world?" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:102 +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:202 +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:204 +msgid "Enable Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:206 +msgid "3D Clouds" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:208 +msgid "Opaque Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:210 +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:212 +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:217 +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:222 +msgid "Rendering:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:226 +msgid "Restart minetest for driver change to take effect" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:228 +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:233 +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:236 +msgid "Reset singleplayer world" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:240 +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:244 +msgid "Scaling factor applied to menu elements: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:250 +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:256 +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +msgid "Bumpmapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +msgid "Generate Normalmaps" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:308 +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua:430 +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua:82 +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua:83 +msgid "Config mods" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua:201 +msgid "Main" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +msgid "Play" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua:246 +msgid "Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua:49 +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua:69 +msgid "No information available" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua:114 +msgid "Texturepacks" +msgstr "" + +#: src/client.cpp:1721 +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp:1736 +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp:1743 +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp:1760 +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp:1768 +msgid "Item textures..." +msgstr "" + +#: src/client.cpp:1793 +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp:185 +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp:223 +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp:261 +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp:425 +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp:432 +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp:441 +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp:459 +msgid "Invalid gamespec." +msgstr "" + +#: src/fontengine.cpp:70 src/fontengine.cpp:226 +msgid "needs_fallback_font" +msgstr "" + +#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +msgid "Proceed" +msgstr "" + +#: src/game.cpp:1072 +msgid "You died." +msgstr "" + +#: src/game.cpp:1073 +msgid "Respawn" +msgstr "" + +#: src/game.cpp:1092 +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/game.cpp:1106 +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp:1125 +msgid "Continue" +msgstr "" + +#: src/game.cpp:1129 +msgid "Change Password" +msgstr "" + +#: src/game.cpp:1134 +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp:1136 +msgid "Change Keys" +msgstr "" + +#: src/game.cpp:1139 +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp:1141 +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp:1841 +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp:1948 +msgid "Creating server..." +msgstr "" + +#: src/game.cpp:1984 +msgid "Creating client..." +msgstr "" + +#: src/game.cpp:2159 +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp:2261 +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp:2317 +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp:2322 +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp:2329 +msgid "Media..." +msgstr "" + +#: src/game.cpp:2334 +msgid "KiB/s" +msgstr "" + +#: src/game.cpp:2338 +msgid "MiB/s" +msgstr "" + +#: src/game.cpp:4363 +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/guiFormSpecMenu.cpp:2855 +msgid "Enter " +msgstr "" + +#: src/guiFormSpecMenu.cpp:2875 +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:125 +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:165 +msgid "\"Use\" = climb down" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:180 +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:295 +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:373 +msgid "press key" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:399 +msgid "Forward" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:400 +msgid "Backward" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +msgid "Right" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:403 +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:404 +msgid "Jump" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:405 +msgid "Sneak" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:406 +msgid "Drop" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:407 +msgid "Inventory" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:408 +msgid "Chat" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:409 +msgid "Command" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:410 +msgid "Console" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:411 +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:412 +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:413 +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:414 +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:415 +msgid "Range select" +msgstr "" + +#: src/guiKeyChangeMenu.cpp:416 +msgid "Print stacks" +msgstr "" + +#: src/guiPasswordChange.cpp:108 +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp:124 +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp:139 +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp:155 +msgid "Change" +msgstr "" + +#: src/guiPasswordChange.cpp:164 +msgid "Passwords do not match!" +msgstr "" + +#: src/guiVolumeChange.cpp:105 +msgid "Sound Volume: " +msgstr "" + +#: src/guiVolumeChange.cpp:119 +msgid "Exit" +msgstr "" + +#: src/keycode.cpp:223 +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp:223 +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp:223 +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp:223 +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Back" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Clear" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Return" +msgstr "" + +#: src/keycode.cpp:224 +msgid "Tab" +msgstr "" + +#: src/keycode.cpp:224 +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Capital" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Control" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Kana" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Menu" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Pause" +msgstr "" + +#: src/keycode.cpp:225 +msgid "Shift" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Convert" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Escape" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Final" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Junja" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp:226 +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp:227 +msgid "End" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Home" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Next" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Prior" +msgstr "" + +#: src/keycode.cpp:227 +msgid "Space" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Down" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Execute" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Print" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Select" +msgstr "" + +#: src/keycode.cpp:228 +msgid "Up" +msgstr "" + +#: src/keycode.cpp:229 +msgid "Help" +msgstr "" + +#: src/keycode.cpp:229 +msgid "Insert" +msgstr "" + +#: src/keycode.cpp:229 +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp:232 +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Apps" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp:233 +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp:234 +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp:235 +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp:239 +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp:239 +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp:240 +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp:240 +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp:241 +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Comma" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Minus" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Period" +msgstr "" + +#: src/keycode.cpp:243 +msgid "Plus" +msgstr "" + +#: src/keycode.cpp:247 +msgid "Attn" +msgstr "" + +#: src/keycode.cpp:247 +msgid "CrSel" +msgstr "" + +#: src/keycode.cpp:248 +msgid "Erase OEF" +msgstr "" + +#: src/keycode.cpp:248 +msgid "ExSel" +msgstr "" + +#: src/keycode.cpp:248 +msgid "OEM Clear" +msgstr "" + +#: src/keycode.cpp:248 +msgid "PA1" +msgstr "" + +#: src/keycode.cpp:248 +msgid "Zoom" +msgstr "" From ca32374ff7b558d705644b88520d4d29c15df961 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 3 Sep 2015 22:38:34 +0200 Subject: [PATCH 376/670] Translated using Weblate (Esperanto) Currently translated at 44.8% (121 of 270 strings) --- po/eo/minetest.po | 291 +++++++++++++++++++++++++--------------------- 1 file changed, 157 insertions(+), 134 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index c19e19ca0..ca1ef8adc 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -8,124 +8,131 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-17 07:23+0200\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2015-09-03 22:38+0200\n" +"Last-Translator: Tim \n" +"Language-Team: Esperanto " +"\n" "Language: eo\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 +#, fuzzy msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Eraro okazis en Lua skripto (Ekzemple de modifo):" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Eraro okazis:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" -msgstr "" +msgstr "Bone" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." -msgstr "" +msgstr "Ŝargas…" #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." -msgstr "" +msgstr "Provu reŝalti la publikan serviloliston kaj kontrolu vian retkonekton." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" -msgstr "" +msgstr "Mondo:" #: builtin/mainmenu/dlg_config_world.lua:33 #: builtin/mainmenu/dlg_config_world.lua:35 msgid "Hide Game" -msgstr "" +msgstr "Kaŝu ludon" #: builtin/mainmenu/dlg_config_world.lua:39 #: builtin/mainmenu/dlg_config_world.lua:41 msgid "Hide mp content" -msgstr "" +msgstr "Kaŝu modifarojn" #: builtin/mainmenu/dlg_config_world.lua:49 msgid "Mod:" -msgstr "" +msgstr "Modifo:" #: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" -msgstr "" +msgstr "Dependas:" #: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" -msgstr "" +msgstr "Konservi" #: builtin/mainmenu/dlg_config_world.lua:55 #: builtin/mainmenu/dlg_create_world.lua:64 #: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 #: src/keycode.cpp:223 msgid "Cancel" -msgstr "" +msgstr "Nuligi" #: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" -msgstr "" +msgstr "Ŝaltu modifaron" #: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" -msgstr "" +msgstr "Malŝaltu modifaron" #: builtin/mainmenu/dlg_config_world.lua:77 #: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" -msgstr "" +msgstr "ŝaltita" #: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" -msgstr "" +msgstr "Ŝaltu ĉiujn" #: builtin/mainmenu/dlg_create_world.lua:50 msgid "World name" -msgstr "" +msgstr "Monda nomo" #: builtin/mainmenu/dlg_create_world.lua:53 +#, fuzzy msgid "Seed" -msgstr "" +msgstr "Fonta nombro" #: builtin/mainmenu/dlg_create_world.lua:56 msgid "Mapgen" -msgstr "" +msgstr "Mondogenerilo" #: builtin/mainmenu/dlg_create_world.lua:59 msgid "Game" -msgstr "" +msgstr "Ludo" #: builtin/mainmenu/dlg_create_world.lua:63 msgid "Create" -msgstr "" +msgstr "Krei" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "" +msgstr "Neniu instalantaj subludoj." #: builtin/mainmenu/dlg_create_world.lua:69 +#, fuzzy msgid "Download one from minetest.net" -msgstr "" +msgstr "Elŝutu ludon el minetest.net" #: builtin/mainmenu/dlg_create_world.lua:72 +#, fuzzy msgid "Warning: The minimal development test is meant for developers." -msgstr "" +msgstr "Averto: La minimuma programista testo estas intencita por programistoj" #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" #: builtin/mainmenu/dlg_create_world.lua:99 +#, fuzzy msgid "A world named \"$1\" already exists" -msgstr "" +msgstr "Mondo nomata \"$1\" jam ekzistas." #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" @@ -133,17 +140,17 @@ msgstr "" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr "Ĉu vi certas forigi \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua:27 #: builtin/mainmenu/dlg_delete_world.lua:25 #: builtin/mainmenu/tab_settings.lua:100 msgid "Yes" -msgstr "" +msgstr "Jes" #: builtin/mainmenu/dlg_delete_mod.lua:28 msgid "No of course not!" -msgstr "" +msgstr "Ne, memkompreneble!" #: builtin/mainmenu/dlg_delete_mod.lua:41 msgid "Modmgr: failed to delete \"$1\"" @@ -154,24 +161,25 @@ msgid "Modmgr: invalid modpath \"$1\"" msgstr "" #: builtin/mainmenu/dlg_delete_world.lua:24 +#, fuzzy msgid "Delete World \"$1\"?" -msgstr "" +msgstr "Ĉu forigi mondon \"$1\"?" #: builtin/mainmenu/dlg_delete_world.lua:26 msgid "No" -msgstr "" +msgstr "Ne" #: builtin/mainmenu/dlg_rename_modpack.lua:26 msgid "Rename Modpack:" -msgstr "" +msgstr "Alinomi modifaron:" #: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 msgid "Accept" -msgstr "" +msgstr "Akcepti" #: builtin/mainmenu/modmgr.lua:344 msgid "Install Mod: file: \"$1\"" -msgstr "" +msgstr "Instali modifon: dosiero \"$1\"" #: builtin/mainmenu/modmgr.lua:345 msgid "" @@ -193,11 +201,11 @@ msgstr "" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" -msgstr "" +msgstr "Neordigita" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" -msgstr "" +msgstr "Serĉi" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." @@ -213,23 +221,24 @@ msgstr "" #: builtin/mainmenu/store.lua:472 msgid "Rating" -msgstr "" +msgstr "Takso" #: builtin/mainmenu/store.lua:497 msgid "re-Install" -msgstr "" +msgstr "Instali denove" #: builtin/mainmenu/store.lua:499 msgid "Install" -msgstr "" +msgstr "Instali" #: builtin/mainmenu/store.lua:518 msgid "Close store" -msgstr "" +msgstr "Fermi" #: builtin/mainmenu/store.lua:526 +#, fuzzy msgid "Page $1 of $2" -msgstr "" +msgstr "Paĝo $1 el $2" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" @@ -237,23 +246,23 @@ msgstr "" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" -msgstr "" +msgstr "Kernprogramistoj" #: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" -msgstr "" +msgstr "Aktivaj kontribuistoj" #: builtin/mainmenu/tab_credits.lua:54 msgid "Previous Core Developers" -msgstr "" +msgstr "Eksaj kernprogramistoj" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" -msgstr "" +msgstr "Eksaj kontribuistoj" #: builtin/mainmenu/tab_mods.lua:30 msgid "Installed Mods:" -msgstr "" +msgstr "Instalantaj modifoj:" #: builtin/mainmenu/tab_mods.lua:39 msgid "Online mod repository" @@ -265,11 +274,11 @@ msgstr "" #: builtin/mainmenu/tab_mods.lua:82 msgid "Mod information:" -msgstr "" +msgstr "Modifaj informoj:" #: builtin/mainmenu/tab_mods.lua:93 msgid "Rename" -msgstr "" +msgstr "Alinomi" #: builtin/mainmenu/tab_mods.lua:95 msgid "Uninstall selected modpack" @@ -285,35 +294,35 @@ msgstr "" #: builtin/mainmenu/tab_mods.lua:165 msgid "Mods" -msgstr "" +msgstr "Modifoj" #: builtin/mainmenu/tab_multiplayer.lua:23 msgid "Address / Port :" -msgstr "" +msgstr "Adreso / Pordo:" #: builtin/mainmenu/tab_multiplayer.lua:24 msgid "Name / Password :" -msgstr "" +msgstr "Nomo / Pasvorto:" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 msgid "Public Serverlist" -msgstr "" +msgstr "Publika servilolisto" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 #: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" -msgstr "" +msgstr "Forigi" #: builtin/mainmenu/tab_multiplayer.lua:38 #: builtin/mainmenu/tab_simple_main.lua:34 msgid "Connect" -msgstr "" +msgstr "Konekti" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 msgid "Creative mode" -msgstr "" +msgstr "Kreiva reĝimo" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 @@ -327,28 +336,28 @@ msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" -msgstr "" +msgstr "Kliento" #: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" -msgstr "" +msgstr "Nova" #: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" -msgstr "" +msgstr "Agordi" #: builtin/mainmenu/tab_server.lua:29 msgid "Start Game" -msgstr "" +msgstr "Startigi ludon" #: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" -msgstr "" +msgstr "Elektu mondon:" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 #: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" -msgstr "" +msgstr "Kreiva reĝimo" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 #: builtin/mainmenu/tab_singleplayer.lua:103 @@ -357,11 +366,11 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" -msgstr "" +msgstr "Publika" #: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 msgid "Name/Password" -msgstr "" +msgstr "Nomo/Pasvorto" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" @@ -369,11 +378,11 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" -msgstr "" +msgstr "Pordo" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" -msgstr "" +msgstr "Servila pordo" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 @@ -382,7 +391,7 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" -msgstr "" +msgstr "Servilo" #: builtin/mainmenu/tab_settings.lua:21 msgid "Opaque Leaves" @@ -390,35 +399,36 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" -msgstr "" +msgstr "Simplaj foliaĵoj" #: builtin/mainmenu/tab_settings.lua:23 +#, fuzzy msgid "Fancy Leaves" -msgstr "" +msgstr "Ŝikaj foliaĵoj" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Neniu filtrilo" #: builtin/mainmenu/tab_settings.lua:33 msgid "Bilinear Filter" -msgstr "" +msgstr "Bilineara filtrilo" #: builtin/mainmenu/tab_settings.lua:34 msgid "Trilinear Filter" -msgstr "" +msgstr "Triineara filtrilo" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" -msgstr "" +msgstr "Neniu Mipmapo" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" -msgstr "" +msgstr "Mipmapo" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Mipmapo + Malizotropa filtrilo" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" @@ -426,7 +436,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "" +msgstr "Ne!!!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" @@ -438,7 +448,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" -msgstr "" +msgstr "3D nuboj" #: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" @@ -458,7 +468,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "" +msgstr "Bildigo:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" @@ -466,11 +476,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" -msgstr "" +msgstr "Ombrigiloj" #: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" -msgstr "" +msgstr "Ŝanĝi klavojn" #: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" @@ -522,11 +532,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" -msgstr "" +msgstr "Agordoj" #: builtin/mainmenu/tab_simple_main.lua:82 msgid "Start Singleplayer" -msgstr "" +msgstr "Startigi solludanton" #: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" @@ -534,15 +544,15 @@ msgstr "" #: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" -msgstr "" +msgstr "Ĉefmenuo" #: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" -msgstr "" +msgstr "Ludi" #: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" -msgstr "" +msgstr "Solludanto" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" @@ -578,15 +588,15 @@ msgstr "" #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Finita!" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" -msgstr "" +msgstr "Ĉefmenuo" #: src/client/clientlauncher.cpp:223 msgid "Player name too long." -msgstr "" +msgstr "Ludanta nomo trolongas." #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" @@ -618,7 +628,7 @@ msgstr "" #: src/game.cpp:1072 msgid "You died." -msgstr "" +msgstr "Vi mortis." #: src/game.cpp:1073 msgid "Respawn" @@ -654,6 +664,17 @@ msgid "" "- Mouse wheel: select item\n" "- T: chat\n" msgstr "" +"Defaŭltaj Klavoj:\n" +"- WASD: movi\n" +"- Spacetklavo: salti/klimi\n" +"- Majuskliga Klavo: lanti/malsupreniri\n" +"- Q: lasi aĵon\n" +"- I: inventaro\n" +"- Muso: turni/rigardi\n" +"- Muso maldekstra: fosi/bati\n" +"- Muso dekstra: lokigi/uzi\n" +"- Musrado: elekti aĵon\n" +"- T: babili\n" #: src/game.cpp:1125 msgid "Continue" @@ -669,19 +690,19 @@ msgstr "" #: src/game.cpp:1136 msgid "Change Keys" -msgstr "" +msgstr "Ŝanĝi klavojn" #: src/game.cpp:1139 msgid "Exit to Menu" -msgstr "" +msgstr "Foriri al menuo" #: src/game.cpp:1141 msgid "Exit to OS" -msgstr "" +msgstr "Foriri al operaciumo" #: src/game.cpp:1841 msgid "Shutting down..." -msgstr "" +msgstr "Malŝaltiĝi…" #: src/game.cpp:1948 msgid "Creating server..." @@ -727,11 +748,11 @@ msgstr "" #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " -msgstr "" +msgstr "Enen " #: src/guiFormSpecMenu.cpp:2875 msgid "ok" -msgstr "" +msgstr "bone" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" @@ -751,71 +772,72 @@ msgstr "" #: src/guiKeyChangeMenu.cpp:373 msgid "press key" -msgstr "" +msgstr "premi klavon" #: src/guiKeyChangeMenu.cpp:399 msgid "Forward" -msgstr "" +msgstr "Antaŭen" #: src/guiKeyChangeMenu.cpp:400 msgid "Backward" -msgstr "" +msgstr "Malantaŭen" #: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" -msgstr "" +msgstr "Maldekstren" #: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" -msgstr "" +msgstr "Dekstren" #: src/guiKeyChangeMenu.cpp:403 msgid "Use" -msgstr "" +msgstr "Uzi" #: src/guiKeyChangeMenu.cpp:404 msgid "Jump" -msgstr "" +msgstr "Salti" #: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" -msgstr "" +msgstr "Lanti" #: src/guiKeyChangeMenu.cpp:406 msgid "Drop" -msgstr "" +msgstr "Lasi" #: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" -msgstr "" +msgstr "Inventaro" #: src/guiKeyChangeMenu.cpp:408 msgid "Chat" -msgstr "" +msgstr "Babili" #: src/guiKeyChangeMenu.cpp:409 msgid "Command" -msgstr "" +msgstr "Komando" #: src/guiKeyChangeMenu.cpp:410 msgid "Console" -msgstr "" +msgstr "Konzolo" #: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" -msgstr "" +msgstr "Baskuli flugreĝimon" #: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" -msgstr "" +msgstr "Baskuli rapidreĝimon" #: src/guiKeyChangeMenu.cpp:413 msgid "Toggle Cinematic" -msgstr "" +msgstr "Baskuli filmreĝimon" #: src/guiKeyChangeMenu.cpp:414 +#, fuzzy msgid "Toggle noclip" -msgstr "" +msgstr "Baskuli tondadon" #: src/guiKeyChangeMenu.cpp:415 msgid "Range select" @@ -827,23 +849,24 @@ msgstr "" #: src/guiPasswordChange.cpp:108 msgid "Old Password" -msgstr "" +msgstr "Malnova pasvorto" #: src/guiPasswordChange.cpp:124 msgid "New Password" -msgstr "" +msgstr "Nova pasvorto" #: src/guiPasswordChange.cpp:139 msgid "Confirm Password" -msgstr "" +msgstr "Certigi pasvorton" #: src/guiPasswordChange.cpp:155 msgid "Change" -msgstr "" +msgstr "Ŝanĝi" #: src/guiPasswordChange.cpp:164 +#, fuzzy msgid "Passwords do not match!" -msgstr "" +msgstr "Pasvortoj ne kongruas!" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " @@ -851,7 +874,7 @@ msgstr "" #: src/guiVolumeChange.cpp:119 msgid "Exit" -msgstr "" +msgstr "Foriri" #: src/keycode.cpp:223 msgid "Left Button" @@ -959,7 +982,7 @@ msgstr "" #: src/keycode.cpp:227 msgid "Space" -msgstr "" +msgstr "Spacetklavo" #: src/keycode.cpp:228 msgid "Down" @@ -1019,51 +1042,51 @@ msgstr "" #: src/keycode.cpp:234 msgid "Numpad 2" -msgstr "" +msgstr "Klavareto 2" #: src/keycode.cpp:234 msgid "Numpad 3" -msgstr "" +msgstr "Klavareto 3" #: src/keycode.cpp:234 msgid "Numpad 4" -msgstr "" +msgstr "Klavareto 4" #: src/keycode.cpp:234 msgid "Numpad 5" -msgstr "" +msgstr "Klavareto 5" #: src/keycode.cpp:234 msgid "Numpad 6" -msgstr "" +msgstr "Klavareto 6" #: src/keycode.cpp:234 msgid "Numpad 7" -msgstr "" +msgstr "Klavareto 7" #: src/keycode.cpp:235 msgid "Numpad *" -msgstr "" +msgstr "Klavareto *" #: src/keycode.cpp:235 msgid "Numpad +" -msgstr "" +msgstr "Klavareto +" #: src/keycode.cpp:235 msgid "Numpad -" -msgstr "" +msgstr "Klavareto -" #: src/keycode.cpp:235 msgid "Numpad /" -msgstr "" +msgstr "Klavareto /" #: src/keycode.cpp:235 msgid "Numpad 8" -msgstr "" +msgstr "Klavareto 8" #: src/keycode.cpp:235 msgid "Numpad 9" -msgstr "" +msgstr "Klavareto 9" #: src/keycode.cpp:239 msgid "Num Lock" @@ -1139,4 +1162,4 @@ msgstr "" #: src/keycode.cpp:248 msgid "Zoom" -msgstr "" +msgstr "Zomo" From 73c93787436750a66ae79bb548b2cdcbaf2886ce Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 3 Sep 2015 21:35:21 +0200 Subject: [PATCH 377/670] Translated using Weblate (German) Currently translated at 100.0% (270 of 270 strings) --- po/de/minetest.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 128ea54d2..63a4daf71 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-15 15:34+0200\n" -"Last-Translator: Wuzzy \n" +"PO-Revision-Date: 2015-09-03 21:35+0200\n" +"Last-Translator: Tim \n" "Language-Team: German " "\n" "Language: de\n" @@ -678,14 +678,14 @@ msgid "" "- T: chat\n" msgstr "" "Standard-Tastenbelegung:\n" -"- WASD: Bewegen\n" -"- Leertaste: Springen/Klettern\n" -"- Umschalt: Kriechen/herunterklettern\n" +"- WASD: bewegen\n" +"- Leertaste: springen/klettern\n" +"- Umschalt: kriechen/herunterklettern\n" "- Q: Item fallen lassen\n" "- I: Inventar\n" "- Maus: drehen/umschauen\n" -"- Maus links: Abbauen/Schlagen\n" -"- Maus rechts: Platzieren/Benutzen\n" +"- Maus links: graben/schlagen\n" +"- Maus rechts: platzieren/benutzen\n" "- Mausrad: Gegenstand auswählen\n" "- T: Chat\n" @@ -872,7 +872,7 @@ msgstr "Neues Passwort" #: src/guiPasswordChange.cpp:139 msgid "Confirm Password" -msgstr "Passwort wiederh." +msgstr "Passwort bestätigen" #: src/guiPasswordChange.cpp:155 msgid "Change" @@ -880,7 +880,7 @@ msgstr "Ändern" #: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" -msgstr "Passwörter passen nicht zusammen!" +msgstr "Passwörter stimmen nicht überein!" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " From 5cea06bfd5f89d034cece35331628b3dd51e19a3 Mon Sep 17 00:00:00 2001 From: "E. Kastelijn" Date: Sat, 5 Sep 2015 08:38:59 +0200 Subject: [PATCH 378/670] Translated using Weblate (Dutch) Currently translated at 90.7% (245 of 270 strings) --- po/nl/minetest.po | 113 +++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 61 deletions(-) diff --git a/po/nl/minetest.po b/po/nl/minetest.po index 9efaf95fc..26d6fdc44 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -8,23 +8,24 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2014-01-05 11:31+0200\n" -"Last-Translator: b p \n" -"Language-Team: \n" +"PO-Revision-Date: 2015-09-05 08:38+0200\n" +"Last-Translator: E. Kastelijn \n" +"Language-Team: Dutch " +"\n" "Language: nl\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 1.7-dev\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Er is een fout opgetreden in een Lua script, zoals een mod:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Er is een fout opgetreden:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -37,6 +38,8 @@ msgstr "Bezig met laden..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Probeer de publieke serverlijst opnieuw in te schakelen en controleer de " +"internet verbinding." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -110,19 +113,19 @@ msgstr "Maak aan" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "" +msgstr "Je heb geen sub-spellen geïnstalleerd." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" -msgstr "" +msgstr "Download er een van minetest.net" #: builtin/mainmenu/dlg_create_world.lua:72 msgid "Warning: The minimal development test is meant for developers." -msgstr "" +msgstr "Waarschuwing: De minimale ontwikkel test is bedoeld voor ontwikkelaars." #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Download een sub-game, zoals minetest_game, van minetest.net" #: builtin/mainmenu/dlg_create_world.lua:99 msgid "A world named \"$1\" already exists" @@ -197,19 +200,19 @@ msgstr "Mod installeren: kan geen echte modnaam vinden voor: $1" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" -msgstr "" +msgstr "Ongesorteerd" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" -msgstr "" +msgstr "Zoeken" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." -msgstr "" +msgstr "$1 aan het downloaden, even wachten..." #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" -msgstr "" +msgstr "Succesvol geïnstalleerd:" #: builtin/mainmenu/store.lua:162 #, fuzzy @@ -229,8 +232,9 @@ msgid "Install" msgstr "Installeren" #: builtin/mainmenu/store.lua:518 +#, fuzzy msgid "Close store" -msgstr "" +msgstr "winkel sluiten" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" @@ -249,9 +253,8 @@ msgid "Active Contributors" msgstr "Actieve bijdragers" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Hoofdontwikkelaars" +msgstr "Eerdere hoofdontwikkelaars" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -294,14 +297,12 @@ msgid "Mods" msgstr "Mods" #: builtin/mainmenu/tab_multiplayer.lua:23 -#, fuzzy msgid "Address / Port :" -msgstr "IP-Adres/Poort" +msgstr "IP-Adres / Poort :" #: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy msgid "Name / Password :" -msgstr "Naam/Wachtwoord" +msgstr "Naam / Wachtwoord :" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 @@ -320,7 +321,6 @@ msgstr "Verbinden" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 -#, fuzzy msgid "Creative mode" msgstr "Creatieve Modus" @@ -332,9 +332,8 @@ msgstr "ingeschakeld" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 -#, fuzzy msgid "PvP enabled" -msgstr "ingeschakeld" +msgstr "PvP ingeschakeld" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" @@ -381,7 +380,7 @@ msgstr "" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" -msgstr "" +msgstr "Poort" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" @@ -389,31 +388,28 @@ msgstr "Serverpoort" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd" +msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Ondoorzichtig water" +msgstr "Ondoorzichtige bladeren" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" -msgstr "" +msgstr "Eenvoudige bladeren" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Mooie bomen" +msgstr "Mooie bladeren" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Geen filter" #: builtin/mainmenu/tab_settings.lua:33 #, fuzzy @@ -427,11 +423,11 @@ msgstr "Tri-Lineare Filtering" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" -msgstr "" +msgstr "Geen Mipmap" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" -msgstr "" +msgstr "Mipmap" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" @@ -439,11 +435,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr "Weet je zeker dat je je wereld wilt resetten?" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" -msgstr "" +msgstr "Nee!!!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" @@ -462,9 +458,8 @@ msgid "Opaque Water" msgstr "Ondoorzichtig water" #: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy msgid "Connected Glass" -msgstr "Verbinden" +msgstr "Verbonden glas" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" @@ -480,7 +475,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" -msgstr "" +msgstr "Herstart minetest om de driver te activeren" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" @@ -491,17 +486,16 @@ msgid "Change keys" msgstr "Toetsen" #: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy msgid "Reset singleplayer world" -msgstr "Singleplayer" +msgstr "Reset Singleplayer wereld" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" -msgstr "" +msgstr "GUI schaal-factor" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " -msgstr "" +msgstr "Schaal-factor toegepast op menu elementen: " #: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" @@ -526,15 +520,15 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" -msgstr "" +msgstr "Golvend water" #: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" -msgstr "" +msgstr "Bewegende bladeren" #: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" -msgstr "" +msgstr "Bewegende planten" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." @@ -545,9 +539,8 @@ msgid "Settings" msgstr "Instellingen" #: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy msgid "Start Singleplayer" -msgstr "Singleplayer" +msgstr "Start Singleplayer" #: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy @@ -592,11 +585,11 @@ msgstr "IP-adres opzoeken..." #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "" +msgstr "Nodes initialiseren..." #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "" +msgstr "Nodes initialiseren" #: src/client.cpp:1768 msgid "Item textures..." @@ -604,7 +597,7 @@ msgstr "Voorwerp texturen..." #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Klaar!" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" @@ -612,7 +605,7 @@ msgstr "Hoofdmenu" #: src/client/clientlauncher.cpp:223 msgid "Player name too long." -msgstr "" +msgstr "Spelernaam te lang." #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" @@ -624,7 +617,7 @@ msgstr "Geen wereld en adres geselecteerd. Niks te doen." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "Het gespecificeerde wereld-pad bestaat niet: " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" @@ -705,9 +698,8 @@ msgid "Sound Volume" msgstr "Volume" #: src/game.cpp:1136 -#, fuzzy msgid "Change Keys" -msgstr "Toetsen" +msgstr "Toetsen aanpassen" #: src/game.cpp:1139 msgid "Exit to Menu" @@ -718,9 +710,8 @@ msgid "Exit to OS" msgstr "Afsluiten" #: src/game.cpp:1841 -#, fuzzy msgid "Shutting down..." -msgstr "Stopzetten..." +msgstr "Uitschakelen..." #: src/game.cpp:1948 #, fuzzy @@ -753,11 +744,11 @@ msgstr "Media..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" @@ -773,7 +764,7 @@ msgstr "" #: src/guiFormSpecMenu.cpp:2875 msgid "ok" -msgstr "" +msgstr "ok" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" From 458293977e9ab8057c3af8e4ea89dc5c05e4a4d1 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 4 Sep 2015 15:07:45 +0200 Subject: [PATCH 379/670] Translated using Weblate (Esperanto) Currently translated at 73.7% (199 of 270 strings) --- po/eo/minetest.po | 160 ++++++++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 82 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index ca1ef8adc..1784b7a36 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-09-03 22:38+0200\n" +"PO-Revision-Date: 2015-09-04 15:07+0200\n" "Last-Translator: Tim \n" "Language-Team: Esperanto " "\n" @@ -20,9 +20,8 @@ msgstr "" "X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua:82 -#, fuzzy msgid "An error occured in a Lua script, such as a mod:" -msgstr "Eraro okazis en Lua skripto (Ekzemple de modifo):" +msgstr "Eraro okazis en Lua skripto, kiel modifo:" #: builtin/fstk/ui.lua:84 msgid "An error occured:" @@ -116,27 +115,24 @@ msgid "You have no subgames installed." msgstr "Neniu instalantaj subludoj." #: builtin/mainmenu/dlg_create_world.lua:69 -#, fuzzy msgid "Download one from minetest.net" msgstr "Elŝutu ludon el minetest.net" #: builtin/mainmenu/dlg_create_world.lua:72 -#, fuzzy msgid "Warning: The minimal development test is meant for developers." -msgstr "Averto: La minimuma programista testo estas intencita por programistoj" +msgstr "Averto: La minimuma programista testo estas intencita por programistoj." #: builtin/mainmenu/dlg_create_world.lua:73 msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Elŝutu subludon, kiel minetest_game, el minetest.net" #: builtin/mainmenu/dlg_create_world.lua:99 -#, fuzzy msgid "A world named \"$1\" already exists" -msgstr "Mondo nomata \"$1\" jam ekzistas." +msgstr "Mondo nomata \"$1\" jam ekzistas" #: builtin/mainmenu/dlg_create_world.lua:116 msgid "No worldname given or no game selected" -msgstr "" +msgstr "Neniu mondonomo donitas aŭ neniu ludon elektitas" #: builtin/mainmenu/dlg_delete_mod.lua:26 msgid "Are you sure you want to delete \"$1\"?" @@ -154,14 +150,13 @@ msgstr "Ne, memkompreneble!" #: builtin/mainmenu/dlg_delete_mod.lua:41 msgid "Modmgr: failed to delete \"$1\"" -msgstr "" +msgstr "Modmgr: fiaskis forigi \"$1\"" #: builtin/mainmenu/dlg_delete_mod.lua:45 msgid "Modmgr: invalid modpath \"$1\"" -msgstr "" +msgstr "Modmgr: malvalida modifo-dosierindiko \"$1\"" #: builtin/mainmenu/dlg_delete_world.lua:24 -#, fuzzy msgid "Delete World \"$1\"?" msgstr "Ĉu forigi mondon \"$1\"?" @@ -186,18 +181,20 @@ msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" +"\n" +"Instali Modifon: malsubtenata dosiertipo \"$1\" aŭ rompiĝata arkivo" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" -msgstr "" +msgstr "Fiaskis instali $1 al $2" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "" +msgstr "Instali modifon: Ne povis trovi ĝustan dosierujan nomon por modifaro $1" #: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" -msgstr "" +msgstr "Instali modifon: Ne povis trovi veran modifonomon por $1" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" @@ -209,15 +206,15 @@ msgstr "Serĉi" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." -msgstr "" +msgstr "Elŝutas $1, bonvolu atendi…" #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" -msgstr "" +msgstr "Instalis sukcese:" #: builtin/mainmenu/store.lua:162 msgid "Shortname:" -msgstr "" +msgstr "Konciza nomo:" #: builtin/mainmenu/store.lua:472 msgid "Rating" @@ -242,7 +239,7 @@ msgstr "Paĝo $1 el $2" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" -msgstr "" +msgstr "Kontribuantaro" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" @@ -266,11 +263,11 @@ msgstr "Instalantaj modifoj:" #: builtin/mainmenu/tab_mods.lua:39 msgid "Online mod repository" -msgstr "" +msgstr "Interreta modifo-deponejo" #: builtin/mainmenu/tab_mods.lua:78 msgid "No mod description available" -msgstr "" +msgstr "Neniu modifa priskribo disponeblas" #: builtin/mainmenu/tab_mods.lua:82 msgid "Mod information:" @@ -282,15 +279,15 @@ msgstr "Alinomi" #: builtin/mainmenu/tab_mods.lua:95 msgid "Uninstall selected modpack" -msgstr "" +msgstr "Malinstali selektan modifaron" #: builtin/mainmenu/tab_mods.lua:106 msgid "Uninstall selected mod" -msgstr "" +msgstr "Malinstali selektan modifo" #: builtin/mainmenu/tab_mods.lua:121 msgid "Select Mod File:" -msgstr "" +msgstr "Selekti modifan dosieron:" #: builtin/mainmenu/tab_mods.lua:165 msgid "Mods" @@ -327,12 +324,12 @@ msgstr "Kreiva reĝimo" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 msgid "Damage enabled" -msgstr "" +msgstr "Damaĝo ŝaltitas" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 msgid "PvP enabled" -msgstr "" +msgstr "Dueloj ŝaltitas" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" @@ -362,7 +359,7 @@ msgstr "Kreiva reĝimo" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 #: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" -msgstr "" +msgstr "Ŝalti damaĝon" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" @@ -374,7 +371,7 @@ msgstr "Nomo/Pasvorto" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" -msgstr "" +msgstr "Asocianta adreso" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" @@ -387,7 +384,7 @@ msgstr "Servila pordo" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 msgid "No world created or selected!" -msgstr "" +msgstr "Neniu mondo kreintas aŭ selektantas!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" @@ -395,14 +392,13 @@ msgstr "Servilo" #: builtin/mainmenu/tab_settings.lua:21 msgid "Opaque Leaves" -msgstr "" +msgstr "Opakaj foliaĵoj" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" msgstr "Simplaj foliaĵoj" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" msgstr "Ŝikaj foliaĵoj" @@ -432,7 +428,7 @@ msgstr "Mipmapo + Malizotropa filtrilo" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr "Ĉu vi certas, ke vi volas nuligi vian solludantan mondon?" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" @@ -440,11 +436,11 @@ msgstr "Ne!!!" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" -msgstr "" +msgstr "Glatiga lumo" #: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" -msgstr "" +msgstr "Ŝalti partiklojn" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" @@ -452,15 +448,15 @@ msgstr "3D nuboj" #: builtin/mainmenu/tab_settings.lua:208 msgid "Opaque Water" -msgstr "" +msgstr "Opaka akvo" #: builtin/mainmenu/tab_settings.lua:210 msgid "Connected Glass" -msgstr "" +msgstr "Ligata glaco" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" -msgstr "" +msgstr "Marki nodaĵojn" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" @@ -484,7 +480,7 @@ msgstr "Ŝanĝi klavojn" #: builtin/mainmenu/tab_settings.lua:236 msgid "Reset singleplayer world" -msgstr "" +msgstr "Nuligi solludantan mondon" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" @@ -508,7 +504,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" -msgstr "" +msgstr "Generi Normalmapojn" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" @@ -516,15 +512,15 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" -msgstr "" +msgstr "Ondanta akvo" #: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" -msgstr "" +msgstr "Ondantaj foliaĵoj" #: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" -msgstr "" +msgstr "Ondantaj plantoj" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." @@ -540,7 +536,7 @@ msgstr "Startigi solludanton" #: builtin/mainmenu/tab_simple_main.lua:83 msgid "Config mods" -msgstr "" +msgstr "Agordi modifojn" #: builtin/mainmenu/tab_simple_main.lua:201 msgid "Main" @@ -560,7 +556,7 @@ msgstr "" #: builtin/mainmenu/tab_texturepacks.lua:69 msgid "No information available" -msgstr "" +msgstr "Neniu informoj disponeblas" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" @@ -600,7 +596,7 @@ msgstr "Ludanta nomo trolongas." #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" -msgstr "" +msgstr "Konekteraro (ĉu eltempiĝo?)" #: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." @@ -682,7 +678,7 @@ msgstr "" #: src/game.cpp:1129 msgid "Change Password" -msgstr "" +msgstr "Ŝanĝi pasvorton" #: src/game.cpp:1134 msgid "Sound Volume" @@ -706,27 +702,27 @@ msgstr "Malŝaltiĝi…" #: src/game.cpp:1948 msgid "Creating server..." -msgstr "" +msgstr "Krei servilon…" #: src/game.cpp:1984 msgid "Creating client..." -msgstr "" +msgstr "Krei klienton…" #: src/game.cpp:2159 msgid "Resolving address..." -msgstr "" +msgstr "Adrestrovili…" #: src/game.cpp:2261 msgid "Connecting to server..." -msgstr "" +msgstr "Konekti al servilo…" #: src/game.cpp:2317 msgid "Item definitions..." -msgstr "" +msgstr "Aĵaj difinoj…" #: src/game.cpp:2322 msgid "Node definitions..." -msgstr "" +msgstr "Nodaĵaj difinoj…" #: src/game.cpp:2329 msgid "Media..." @@ -734,11 +730,11 @@ msgstr "" #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" @@ -864,7 +860,6 @@ msgid "Change" msgstr "Ŝanĝi" #: src/guiPasswordChange.cpp:164 -#, fuzzy msgid "Passwords do not match!" msgstr "Pasvortoj ne kongruas!" @@ -878,15 +873,15 @@ msgstr "Foriri" #: src/keycode.cpp:223 msgid "Left Button" -msgstr "" +msgstr "Maldekstra butono" #: src/keycode.cpp:223 msgid "Middle Button" -msgstr "" +msgstr "Meza butono" #: src/keycode.cpp:223 msgid "Right Button" -msgstr "" +msgstr "Dekstra butono" #: src/keycode.cpp:223 msgid "X Button 1" @@ -894,31 +889,32 @@ msgstr "" #: src/keycode.cpp:224 msgid "Back" -msgstr "" +msgstr "Retro" #: src/keycode.cpp:224 msgid "Clear" -msgstr "" +msgstr "Vakigo" #: src/keycode.cpp:224 msgid "Return" -msgstr "" +msgstr "Enen" #: src/keycode.cpp:224 msgid "Tab" -msgstr "" +msgstr "Tabo" #: src/keycode.cpp:224 msgid "X Button 2" msgstr "" #: src/keycode.cpp:225 +#, fuzzy msgid "Capital" -msgstr "" +msgstr "Fiksiĝema reĝimo" #: src/keycode.cpp:225 msgid "Control" -msgstr "" +msgstr "Stiro" #: src/keycode.cpp:225 msgid "Kana" @@ -926,15 +922,15 @@ msgstr "" #: src/keycode.cpp:225 msgid "Menu" -msgstr "" +msgstr "Menuo" #: src/keycode.cpp:225 msgid "Pause" -msgstr "" +msgstr "Haltigo" #: src/keycode.cpp:225 msgid "Shift" -msgstr "" +msgstr "Majuskligo" #: src/keycode.cpp:226 msgid "Convert" @@ -942,7 +938,7 @@ msgstr "" #: src/keycode.cpp:226 msgid "Escape" -msgstr "" +msgstr "Eskapo" #: src/keycode.cpp:226 msgid "Final" @@ -962,19 +958,19 @@ msgstr "" #: src/keycode.cpp:227 msgid "End" -msgstr "" +msgstr "Fino" #: src/keycode.cpp:227 msgid "Home" -msgstr "" +msgstr "Hejmen" #: src/keycode.cpp:227 msgid "Mode Change" -msgstr "" +msgstr "Reĝima ŝanĝo" #: src/keycode.cpp:227 msgid "Next" -msgstr "" +msgstr "Sekvanto" #: src/keycode.cpp:227 msgid "Prior" @@ -986,7 +982,7 @@ msgstr "Spacetklavo" #: src/keycode.cpp:228 msgid "Down" -msgstr "" +msgstr "Malsupren" #: src/keycode.cpp:228 msgid "Execute" @@ -998,15 +994,15 @@ msgstr "" #: src/keycode.cpp:228 msgid "Select" -msgstr "" +msgstr "Selekto" #: src/keycode.cpp:228 msgid "Up" -msgstr "" +msgstr "Supren" #: src/keycode.cpp:229 msgid "Help" -msgstr "" +msgstr "Helpo" #: src/keycode.cpp:229 msgid "Insert" @@ -1026,11 +1022,11 @@ msgstr "" #: src/keycode.cpp:233 msgid "Numpad 0" -msgstr "" +msgstr "Klavareto 0" #: src/keycode.cpp:233 msgid "Numpad 1" -msgstr "" +msgstr "Klavareto 1" #: src/keycode.cpp:233 msgid "Right Windows" @@ -1038,7 +1034,7 @@ msgstr "" #: src/keycode.cpp:233 msgid "Sleep" -msgstr "" +msgstr "Dormo" #: src/keycode.cpp:234 msgid "Numpad 2" @@ -1106,7 +1102,7 @@ msgstr "" #: src/keycode.cpp:241 msgid "Left Control" -msgstr "" +msgstr "Maldekstra Stiro" #: src/keycode.cpp:241 msgid "Left Menu" @@ -1114,7 +1110,7 @@ msgstr "" #: src/keycode.cpp:241 msgid "Right Control" -msgstr "" +msgstr "Dekstra Stiro" #: src/keycode.cpp:241 msgid "Right Menu" From 3e3dfebad63f0f5de330a15862916a3d52fd412e Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Sun, 6 Sep 2015 07:38:42 +0200 Subject: [PATCH 380/670] Translated using Weblate (Indonesian) Currently translated at 97.7% (264 of 270 strings) This is a combination of 9 consecutive commits by the same author. Their messages in chronological order are: Translated using Weblate (Indonesian) Currently translated at 79.2% (214 of 270 strings) Translated using Weblate (Indonesian) Currently translated at 80.0% (216 of 270 strings) Ini merupakan istilah dan tidak perlu diterjemahkan Translated using Weblate (Indonesian) Currently translated at 89.6% (242 of 270 strings) Penerjemahan Translated using Weblate (Indonesian) Currently translated at 94.8% (256 of 270 strings) Penerjemahan Translated using Weblate (Indonesian) Currently translated at 95.9% (259 of 270 strings) Mencari persamaan makna Translated using Weblate (Indonesian) Currently translated at 96.2% (260 of 270 strings) Penerjemahan Translated using Weblate (Indonesian) Currently translated at 96.6% (261 of 270 strings) Mencari persamaan makna Translated using Weblate (Indonesian) Currently translated at 97.0% (262 of 270 strings) Penerjemahan Translated using Weblate (Indonesian) Currently translated at 97.7% (264 of 270 strings) Istilah tidak diterjemahkan --- po/id/minetest.po | 138 +++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/po/id/minetest.po b/po/id/minetest.po index 1cacddc2e..0c071b76b 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -3,20 +3,22 @@ # This file is distributed under the same license as the PACKAGE package. # Muhammad Rifqi Priyo Susanto , 2014. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-03-02 00:21+0700\n" +"PO-Revision-Date: 2015-09-06 08:49+0200\n" "Last-Translator: Muhammad Rifqi Priyo Susanto " "\n" -"Language-Team: Bahasa Indonesia <>\n" +"Language-Team: Indonesian " +"\n" "Language: id\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 2.4-dev\n" #: builtin/fstk/ui.lua:82 msgid "An error occured in a Lua script, such as a mod:" @@ -24,7 +26,7 @@ msgstr "" #: builtin/fstk/ui.lua:84 msgid "An error occured:" -msgstr "" +msgstr "Kesalahan muncul:" #: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 msgid "Ok" @@ -32,11 +34,13 @@ msgstr "Oke" #: builtin/mainmenu/common.lua:239 src/game.cpp:1891 msgid "Loading..." -msgstr "" +msgstr "Memuat..." #: builtin/mainmenu/common.lua:240 msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Cobalah mengaktifkan ulang daftar server publik dan cek koneksi internet " +"Anda." #: builtin/mainmenu/dlg_config_world.lua:29 msgid "World:" @@ -114,7 +118,7 @@ msgstr "Buat" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "Kamu tidak punya sub-permainan terpasang" +msgstr "Kamu tidak punya sub-permainan terpasang." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" @@ -179,7 +183,6 @@ msgid "Install Mod: file: \"$1\"" msgstr "Pemasangan Mod: berkas: \"$1\"" #: builtin/mainmenu/modmgr.lua:345 -#, fuzzy msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -210,16 +213,14 @@ msgid "Search" msgstr "Cari" #: builtin/mainmenu/store.lua:126 -#, fuzzy msgid "Downloading $1, please wait..." -msgstr "mohon tunggu..." +msgstr "Mengunduh $1, mohon tunggu..." #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "Berhasil dipasang:" #: builtin/mainmenu/store.lua:162 -#, fuzzy msgid "Shortname:" msgstr "Nama pendek:" @@ -256,9 +257,8 @@ msgid "Active Contributors" msgstr "Kontributor Aktif" #: builtin/mainmenu/tab_credits.lua:54 -#, fuzzy msgid "Previous Core Developers" -msgstr "Pengembang Inti" +msgstr "Pengembang Inti Sebelumnya" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" @@ -301,14 +301,12 @@ msgid "Mods" msgstr "Mod" #: builtin/mainmenu/tab_multiplayer.lua:23 -#, fuzzy msgid "Address / Port :" -msgstr "Alamat/Port" +msgstr "Alamat / Port:" #: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy msgid "Name / Password :" -msgstr "Nama/Kata sandi" +msgstr "Nama / Kata sandi:" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 @@ -327,21 +325,18 @@ msgstr "Sambung" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 -#, fuzzy msgid "Creative mode" -msgstr "Mode Kreatif" +msgstr "Mode kreatif" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 -#, fuzzy msgid "Damage enabled" -msgstr "diaktifkan" +msgstr "Kerusakan diaktifkan" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 -#, fuzzy msgid "PvP enabled" -msgstr "diaktifkan" +msgstr "PvP diaktifkan" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" @@ -384,7 +379,7 @@ msgstr "Nama/Kata sandi" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" -msgstr "" +msgstr "Alamat Sambungan" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" @@ -396,54 +391,48 @@ msgstr "Port Server" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 -#, fuzzy msgid "No world created or selected!" -msgstr "Tidak ada nama atau permainan yang dipilih" +msgstr "Tidak ada dunia atau permainan yang dipilih!" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "Server" #: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy msgid "Opaque Leaves" -msgstr "Air Buram" +msgstr "Daun Opak" #: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy msgid "Simple Leaves" -msgstr "Daun Melambai" +msgstr "Daun Sederhana" #: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy msgid "Fancy Leaves" -msgstr "Pohon Indah" +msgstr "Daun Megah" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" -msgstr "" +msgstr "Tanpa Filter" #: builtin/mainmenu/tab_settings.lua:33 -#, fuzzy msgid "Bilinear Filter" -msgstr "Bi-Linear Filtering" +msgstr "Bilinear Filter" #: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy msgid "Trilinear Filter" -msgstr "Tri-Linear Filtering" +msgstr "Trilinear Filter" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" -msgstr "" +msgstr "Tanpa Mipmap" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" -msgstr "" +msgstr "Mipmap" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Mipmap + Aniso. Filter" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" @@ -470,7 +459,6 @@ msgid "Opaque Water" msgstr "Air Buram" #: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy msgid "Connected Glass" msgstr "Kaca Tersambung" @@ -480,11 +468,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "" +msgstr "Penteksturan:" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "" +msgstr "Rendering:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" @@ -499,7 +487,6 @@ msgid "Change keys" msgstr "Ubah tombol" #: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy msgid "Reset singleplayer world" msgstr "Atur ulang dunia pemain tunggal" @@ -520,7 +507,6 @@ msgid "Touchthreshold (px)" msgstr "Batas sentuhan (px)" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 -#, fuzzy msgid "Bumpmapping" msgstr "Bumpmapping" @@ -553,17 +539,14 @@ msgid "Settings" msgstr "Pengaturan" #: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy msgid "Start Singleplayer" msgstr "Mulai Pemain Tunggal" #: builtin/mainmenu/tab_simple_main.lua:83 -#, fuzzy msgid "Config mods" msgstr "Konfigurasi mod" #: builtin/mainmenu/tab_simple_main.lua:201 -#, fuzzy msgid "Main" msgstr "Beranda" @@ -584,18 +567,16 @@ msgid "No information available" msgstr "Tidak ada informasi tersedia" #: builtin/mainmenu/tab_texturepacks.lua:114 -#, fuzzy msgid "Texturepacks" msgstr "Paket Tekstur" #: src/client.cpp:1721 -#, fuzzy msgid "Loading textures..." -msgstr "Tekstur barang..." +msgstr "Memuat tekstur..." #: src/client.cpp:1736 msgid "Rebuilding shaders..." -msgstr "" +msgstr "Membangun ulang shaders..." #: src/client.cpp:1743 msgid "Initializing nodes..." @@ -611,7 +592,7 @@ msgstr "Tekstur barang..." #: src/client.cpp:1793 msgid "Done!" -msgstr "" +msgstr "Selesai!" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" @@ -651,7 +632,7 @@ msgstr "Lanjut" #: src/game.cpp:1072 msgid "You died." -msgstr "" +msgstr "Anda mati." #: src/game.cpp:1073 msgid "Respawn" @@ -672,6 +653,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"Kontrol Bawaan:\n" +"Tanpa menu yang tampak:\n" +"- ketuk sekali: tekan tombol\n" +"- ketuk ganda: taruh/pakai\n" +"- geser: melihat sekitar\n" +"Menu/Inventaris tampak:\n" +"- ketuk ganda (di luar):\n" +" -->tutup\n" +"- tekan tumpukan, tekan wadah:\n" +" --> pindah tumpukan\n" +"- tekan&geser, ketuk jari kedua\n" +" --> taruh barang tunggal ke wadah\n" #: src/game.cpp:1106 msgid "" @@ -687,54 +680,61 @@ msgid "" "- Mouse wheel: select item\n" "- T: chat\n" msgstr "" +"Kontrol Bawaan:\n" +"- WASD: bergerak\n" +"- Space: lompat/panjat\n" +"- Shift: merayap/turun\n" +"- Q: jatuhkan barang\n" +"- I: inventaris\n" +"- Mouse: belok/melihat\n" +"- Mouse kiri: gali/pukul\n" +"- Mouse kanan: taruh/pakai\n" +"- Roda mouse: pilih barang\n" +"- T: obrolan\n" #: src/game.cpp:1125 msgid "Continue" msgstr "" #: src/game.cpp:1129 -#, fuzzy msgid "Change Password" -msgstr "Kata Sandi Baru" +msgstr "Ganti Kata Sandi" #: src/game.cpp:1134 -#, fuzzy msgid "Sound Volume" -msgstr "Volume Suara: " +msgstr "Volume Suara" #: src/game.cpp:1136 -#, fuzzy msgid "Change Keys" -msgstr "Ubah tombol" +msgstr "Ubah Tombol" #: src/game.cpp:1139 -#, fuzzy msgid "Exit to Menu" -msgstr "Right Menu" +msgstr "Kembali ke Menu Utama" #: src/game.cpp:1141 msgid "Exit to OS" -msgstr "" +msgstr "Tutup Aplikasi" #: src/game.cpp:1841 msgid "Shutting down..." -msgstr "" +msgstr "Mematikan..." #: src/game.cpp:1948 msgid "Creating server..." -msgstr "" +msgstr "Membuat server..." #: src/game.cpp:1984 msgid "Creating client..." -msgstr "" +msgstr "Membuat klien..." #: src/game.cpp:2159 msgid "Resolving address..." -msgstr "" +msgstr "Mencari alamat..." #: src/game.cpp:2261 msgid "Connecting to server..." -msgstr "" +msgstr "Menghubungkan ke server..." #: src/game.cpp:2317 msgid "Item definitions..." @@ -750,11 +750,11 @@ msgstr "Media..." #: src/game.cpp:2334 msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp:2338 msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp:4363 msgid "" From d5591b65d68379de526a77dc2d79f8dc73e740bf Mon Sep 17 00:00:00 2001 From: "E. Kastelijn" Date: Sun, 6 Sep 2015 07:40:53 +0200 Subject: [PATCH 381/670] Translated using Weblate (Dutch) Currently translated at 97.0% (262 of 270 strings) --- po/nl/minetest.po | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/po/nl/minetest.po b/po/nl/minetest.po index 26d6fdc44..7de0b148a 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-09-05 08:38+0200\n" +"PO-Revision-Date: 2015-09-06 07:40+0200\n" "Last-Translator: E. Kastelijn \n" "Language-Team: Dutch " "\n" @@ -178,13 +178,12 @@ msgid "Install Mod: file: \"$1\"" msgstr "Mod installeren: bestand: \"$1\"" #: builtin/mainmenu/modmgr.lua:345 -#, fuzzy msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Mod installeren: niet ondersteund bestandstype \"$1\"" +"Mod installeren: niet ondersteund bestandstype \"$1\" of defect archief" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" @@ -215,9 +214,8 @@ msgid "Successfully installed:" msgstr "Succesvol geïnstalleerd:" #: builtin/mainmenu/store.lua:162 -#, fuzzy msgid "Shortname:" -msgstr "Naam wereld" +msgstr "Korte naam:" #: builtin/mainmenu/store.lua:472 msgid "Rating" @@ -232,9 +230,8 @@ msgid "Install" msgstr "Installeren" #: builtin/mainmenu/store.lua:518 -#, fuzzy msgid "Close store" -msgstr "winkel sluiten" +msgstr "Winkel sluiten" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" @@ -326,9 +323,8 @@ msgstr "Creatieve Modus" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 -#, fuzzy msgid "Damage enabled" -msgstr "ingeschakeld" +msgstr "Schade ingeschakeld" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 @@ -376,7 +372,7 @@ msgstr "Naam/Wachtwoord" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" -msgstr "" +msgstr "Adres" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" @@ -412,12 +408,10 @@ msgid "No Filter" msgstr "Geen filter" #: builtin/mainmenu/tab_settings.lua:33 -#, fuzzy msgid "Bilinear Filter" msgstr "Bi-Lineaire Filtering" #: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy msgid "Trilinear Filter" msgstr "Tri-Lineare Filtering" @@ -431,7 +425,7 @@ msgstr "Mipmap" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Mipmap + Anisotropisch filteren" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" @@ -463,15 +457,15 @@ msgstr "Verbonden glas" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" -msgstr "" +msgstr "Node markering" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "" +msgstr "Textuur:" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "" +msgstr "Rendering:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" @@ -506,9 +500,8 @@ msgid "Touchthreshold (px)" msgstr "" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 -#, fuzzy msgid "Bumpmapping" -msgstr "Mip-Mapping" +msgstr "Bumpmapping" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" @@ -516,7 +509,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" -msgstr "" +msgstr "Parallax occlusie" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" @@ -543,9 +536,8 @@ msgid "Start Singleplayer" msgstr "Start Singleplayer" #: builtin/mainmenu/tab_simple_main.lua:83 -#, fuzzy msgid "Config mods" -msgstr "Instellingen" +msgstr "Mods configureren" #: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy @@ -574,14 +566,12 @@ msgid "Texturepacks" msgstr "Texturen" #: src/client.cpp:1721 -#, fuzzy msgid "Loading textures..." -msgstr "Bezig met laden..." +msgstr "Bezig met laden van texturen..." #: src/client.cpp:1736 -#, fuzzy msgid "Rebuilding shaders..." -msgstr "IP-adres opzoeken..." +msgstr "Herbouwen van shaders..." #: src/client.cpp:1743 msgid "Initializing nodes..." @@ -714,9 +704,8 @@ msgid "Shutting down..." msgstr "Uitschakelen..." #: src/game.cpp:1948 -#, fuzzy msgid "Creating server..." -msgstr "Bezig server te maken..." +msgstr "Aanmaken van server..." #: src/game.cpp:1984 msgid "Creating client..." @@ -959,7 +948,7 @@ msgstr "Escape" #: src/keycode.cpp:226 msgid "Final" -msgstr "Final" +msgstr "Laatste" #: src/keycode.cpp:226 msgid "Junja" @@ -975,7 +964,7 @@ msgstr "Nonconvert" #: src/keycode.cpp:227 msgid "End" -msgstr "End" +msgstr "Einde" #: src/keycode.cpp:227 msgid "Home" From 1d9eb5a4d5ce0125a1aa0ed6ef50ffc5347b307c Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Sun, 6 Sep 2015 08:59:35 +0200 Subject: [PATCH 382/670] Translated using Weblate (Indonesian) Currently translated at 98.1% (265 of 270 strings) Penerjemahan --- po/id/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/id/minetest.po b/po/id/minetest.po index 0c071b76b..a14eaa3d7 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-09-06 08:49+0200\n" +"PO-Revision-Date: 2015-09-06 08:59+0200\n" "Last-Translator: Muhammad Rifqi Priyo Susanto " "\n" "Language-Team: Indonesian " @@ -694,7 +694,7 @@ msgstr "" #: src/game.cpp:1125 msgid "Continue" -msgstr "" +msgstr "Lanjutkan" #: src/game.cpp:1129 msgid "Change Password" From 02dd60bf5aba575682cb1644625d0e70b68211a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20=E2=80=9CXShell=E2=80=9D=20Schekoldin?= Date: Mon, 7 Sep 2015 11:31:52 +0200 Subject: [PATCH 383/670] Translated using Weblate (Russian) Currently translated at 100.0% (270 of 270 strings) --- po/ru/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index 9675095ae..f274db7b6 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-07-30 15:32+0200\n" -"Last-Translator: Andrey K. \n" +"PO-Revision-Date: 2015-09-07 11:31+0200\n" +"Last-Translator: Alex “XShell” Schekoldin \n" "Language-Team: Russian " "\n" "Language: ru\n" From 90b57c4d82285dd5e7e20f87f4fb9a73691d8edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20=E2=80=9CXShell=E2=80=9D=20Schekoldin?= Date: Mon, 7 Sep 2015 11:49:54 +0200 Subject: [PATCH 384/670] Translated using Weblate (Russian) Currently translated at 100.0% (270 of 270 strings) --- po/ru/minetest.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index f274db7b6..95d31b44d 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-09-07 11:31+0200\n" +"PO-Revision-Date: 2015-09-07 11:49+0200\n" "Last-Translator: Alex “XShell” Schekoldin \n" "Language-Team: Russian " "\n" @@ -97,7 +97,7 @@ msgstr "Название мира" #: builtin/mainmenu/dlg_create_world.lua:53 msgid "Seed" -msgstr "Зерно" +msgstr "Сид" #: builtin/mainmenu/dlg_create_world.lua:56 msgid "Mapgen" @@ -187,7 +187,7 @@ msgstr "" #: builtin/mainmenu/modmgr.lua:365 msgid "Failed to install $1 to $2" -msgstr "Ошибка при установке $1 в $2" +msgstr "Невозможно установить $1 в $2" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" @@ -462,11 +462,11 @@ msgstr "Подсветка нод" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "Текстуирование:" +msgstr "Текстурирование:" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" -msgstr "Отрисовка:" +msgstr "Рендеринг:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" @@ -602,7 +602,7 @@ msgstr "Ошибка соединения (таймаут?)" #: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." -msgstr "Не выбран мир и не введен адрес." +msgstr "Не выбран мир и не введен адрес. Нечего делать." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " From 8eeff63fa289b2628840eed2b185ba290d4be730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kisbenedek=20M=C3=A1rton?= Date: Wed, 9 Sep 2015 16:11:48 +0200 Subject: [PATCH 385/670] Translated using Weblate (Hungarian) Currently translated at 91.1% (246 of 270 strings) --- po/hu/minetest.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/po/hu/minetest.po b/po/hu/minetest.po index 3db7b54e9..79c68478e 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-08-05 13:29+0200\n" +"PO-Revision-Date: 2015-09-09 16:11+0200\n" "Last-Translator: Kisbenedek Márton \n" "Language-Team: Hungarian " "\n" @@ -62,7 +62,7 @@ msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 msgid "Depends:" -msgstr "Függ ettől:" +msgstr "Függőségek:" #: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 msgid "Save" @@ -77,16 +77,16 @@ msgstr "Mégse" #: builtin/mainmenu/dlg_config_world.lua:71 msgid "Enable MP" -msgstr "Modpakk engedélyezése" +msgstr "Csomag engedélyez" #: builtin/mainmenu/dlg_config_world.lua:73 msgid "Disable MP" -msgstr "Modpakk letiltása" +msgstr "Csomag letiltás" #: builtin/mainmenu/dlg_config_world.lua:77 #: builtin/mainmenu/dlg_config_world.lua:79 msgid "enabled" -msgstr "Engedélyezve" +msgstr "Engedélyez" #: builtin/mainmenu/dlg_config_world.lua:85 msgid "Enable all" @@ -115,7 +115,7 @@ msgstr "Létrehozás" #: builtin/mainmenu/dlg_create_world.lua:68 msgid "You have no subgames installed." -msgstr "Nincsenek al-játékok telepítve." +msgstr "Nincsenek aljátékok telepítve." #: builtin/mainmenu/dlg_create_world.lua:69 msgid "Download one from minetest.net" @@ -566,7 +566,7 @@ msgstr "Egyjátékos mód" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" -msgstr "Textúra pakk kiválasztása:" +msgstr "Textúracsomag kiválasztása:" #: builtin/mainmenu/tab_texturepacks.lua:69 msgid "No information available" From a5b34550eb48f78ccaa5814755c6bbbd4c088ba7 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 10 Sep 2015 17:14:30 +0200 Subject: [PATCH 386/670] Translated using Weblate (Esperanto) Currently translated at 100.0% (270 of 270 strings) --- po/eo/minetest.po | 157 +++++++++++++++++++++++++--------------------- 1 file changed, 84 insertions(+), 73 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 1784b7a36..20455e84d 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-17 07:23+0200\n" -"PO-Revision-Date: 2015-09-04 15:07+0200\n" +"PO-Revision-Date: 2015-09-10 17:14+0200\n" "Last-Translator: Tim \n" "Language-Team: Esperanto " "\n" @@ -94,9 +94,8 @@ msgid "World name" msgstr "Monda nomo" #: builtin/mainmenu/dlg_create_world.lua:53 -#, fuzzy msgid "Seed" -msgstr "Fonta nombro" +msgstr "Fontnombro" #: builtin/mainmenu/dlg_create_world.lua:56 msgid "Mapgen" @@ -233,9 +232,8 @@ msgid "Close store" msgstr "Fermi" #: builtin/mainmenu/store.lua:526 -#, fuzzy msgid "Page $1 of $2" -msgstr "Paĝo $1 el $2" +msgstr "Paĝo $1 de $2" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" @@ -460,7 +458,7 @@ msgstr "Marki nodaĵojn" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" -msgstr "" +msgstr "Teksturado:" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" @@ -468,7 +466,7 @@ msgstr "Bildigo:" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" -msgstr "" +msgstr "Restartigu Minetest-on por efikigi pelilan ŝanĝon" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" @@ -484,23 +482,23 @@ msgstr "Nuligi solludantan mondon" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" -msgstr "" +msgstr "GUI skala faktoro" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " -msgstr "" +msgstr "Skala faktoro por menuoj " #: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" -msgstr "" +msgstr "Sentuŝa celo" #: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" -msgstr "" +msgstr "Tuŝa sojlo (px)" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 msgid "Bumpmapping" -msgstr "" +msgstr "Protuberancmapado" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" @@ -508,7 +506,7 @@ msgstr "Generi Normalmapojn" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" -msgstr "" +msgstr "Paralaksa Okludo" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" @@ -524,7 +522,7 @@ msgstr "Ondantaj plantoj" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" +msgstr "Por uzi ombrigilojn, OpenGL-a pelilo estas necesa." #: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" @@ -552,7 +550,7 @@ msgstr "Solludanto" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" -msgstr "" +msgstr "Selekti teksturaron:" #: builtin/mainmenu/tab_texturepacks.lua:69 msgid "No information available" @@ -560,27 +558,27 @@ msgstr "Neniu informoj disponeblas" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" -msgstr "" +msgstr "Teksturaroj" #: src/client.cpp:1721 msgid "Loading textures..." -msgstr "" +msgstr "Ŝargi teksturojn…" #: src/client.cpp:1736 msgid "Rebuilding shaders..." -msgstr "" +msgstr "Refaru ombrigilojn…" #: src/client.cpp:1743 msgid "Initializing nodes..." -msgstr "" +msgstr "Pravalorizi nodaĵojn…" #: src/client.cpp:1760 msgid "Initializing nodes" -msgstr "" +msgstr "Pravalorizi nodaĵojn" #: src/client.cpp:1768 msgid "Item textures..." -msgstr "" +msgstr "Aĵaj teksturoj…" #: src/client.cpp:1793 msgid "Done!" @@ -600,27 +598,27 @@ msgstr "Konekteraro (ĉu eltempiĝo?)" #: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." -msgstr "" +msgstr "Ne mondo selektas kaj ne adreso provizatas. Nenion fari." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "Donita monda dosierindiko ne ekzistas. " #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" -msgstr "" +msgstr "Ne povas trovi aŭ ŝuti ludon \"" #: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." -msgstr "" +msgstr "Nevalida ludspecifo." #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" -msgstr "" +msgstr "no" #: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" -msgstr "" +msgstr "Daŭrigi" #: src/game.cpp:1072 msgid "You died." @@ -628,7 +626,7 @@ msgstr "Vi mortis." #: src/game.cpp:1073 msgid "Respawn" -msgstr "" +msgstr "Renaskiĝi" #: src/game.cpp:1092 msgid "" @@ -645,6 +643,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"Defaŭltaj Klavoj:\n" +"Nevidebla menuo :\n" +"- unufoja tuŝeto: aktivigi butonon\n" +"- dufoja tuŝeto: lokigi/uzi\n" +"- ŝova fingro: rigardi\n" +"Videbla menuo/inventaro:\n" +"- dufoja tuŝeto (ekstere):\n" +" -->fermi\n" +"- tuŝi stakon, tuŝi inventaran spacon:\n" +" --> movi stakon\n" +"- tuŝi kaj treni, tuŝeti duan fingron\n" +" --> lokigi unun aĵon al inventara spaco\n" #: src/game.cpp:1106 msgid "" @@ -674,7 +684,7 @@ msgstr "" #: src/game.cpp:1125 msgid "Continue" -msgstr "" +msgstr "Daŭrigi" #: src/game.cpp:1129 msgid "Change Password" @@ -682,7 +692,7 @@ msgstr "Ŝanĝi pasvorton" #: src/game.cpp:1134 msgid "Sound Volume" -msgstr "" +msgstr "Sonintenso" #: src/game.cpp:1136 msgid "Change Keys" @@ -726,7 +736,7 @@ msgstr "Nodaĵaj difinoj…" #: src/game.cpp:2329 msgid "Media..." -msgstr "" +msgstr "Medioj…" #: src/game.cpp:2334 msgid "KiB/s" @@ -741,6 +751,8 @@ msgid "" "\n" "Check debug.txt for details." msgstr "" +"\n" +"Reviziu debug.txt por detaloj." #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " @@ -753,18 +765,19 @@ msgstr "bone" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" +"Klavagordoj (Se tiu menuo misfunkcias, forigu agordojn el minetest.conf)" #: src/guiKeyChangeMenu.cpp:165 msgid "\"Use\" = climb down" -msgstr "" +msgstr "\"Uzi\" = malsupreniri" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" -msgstr "" +msgstr "Dufoja tuŝeto \"salti\" por baskuli flugreĝimon" #: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" -msgstr "" +msgstr "Klavo jam uzatas" #: src/guiKeyChangeMenu.cpp:373 msgid "press key" @@ -831,17 +844,16 @@ msgid "Toggle Cinematic" msgstr "Baskuli filmreĝimon" #: src/guiKeyChangeMenu.cpp:414 -#, fuzzy msgid "Toggle noclip" -msgstr "Baskuli tondadon" +msgstr "Baskuli nekolizian reĝimon" #: src/guiKeyChangeMenu.cpp:415 msgid "Range select" -msgstr "" +msgstr "Ŝanĝi vidodistancon" #: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" -msgstr "" +msgstr "Presi stakojn" #: src/guiPasswordChange.cpp:108 msgid "Old Password" @@ -865,7 +877,7 @@ msgstr "Pasvortoj ne kongruas!" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " -msgstr "" +msgstr "Sonintenso: " #: src/guiVolumeChange.cpp:119 msgid "Exit" @@ -885,7 +897,7 @@ msgstr "Dekstra butono" #: src/keycode.cpp:223 msgid "X Button 1" -msgstr "" +msgstr "X-Butono 1" #: src/keycode.cpp:224 msgid "Back" @@ -905,12 +917,11 @@ msgstr "Tabo" #: src/keycode.cpp:224 msgid "X Button 2" -msgstr "" +msgstr "X-Butono 2" #: src/keycode.cpp:225 -#, fuzzy msgid "Capital" -msgstr "Fiksiĝema reĝimo" +msgstr "Fiksiĝema klavo" #: src/keycode.cpp:225 msgid "Control" @@ -918,7 +929,7 @@ msgstr "Stiro" #: src/keycode.cpp:225 msgid "Kana" -msgstr "" +msgstr "Kana" #: src/keycode.cpp:225 msgid "Menu" @@ -934,7 +945,7 @@ msgstr "Majuskligo" #: src/keycode.cpp:226 msgid "Convert" -msgstr "" +msgstr "Konverto" #: src/keycode.cpp:226 msgid "Escape" @@ -942,19 +953,19 @@ msgstr "Eskapo" #: src/keycode.cpp:226 msgid "Final" -msgstr "" +msgstr "Finalo" #: src/keycode.cpp:226 msgid "Junja" -msgstr "" +msgstr "Junja" #: src/keycode.cpp:226 msgid "Kanji" -msgstr "" +msgstr "Kanji" #: src/keycode.cpp:226 msgid "Nonconvert" -msgstr "" +msgstr "Nekonverto" #: src/keycode.cpp:227 msgid "End" @@ -974,7 +985,7 @@ msgstr "Sekvanto" #: src/keycode.cpp:227 msgid "Prior" -msgstr "" +msgstr "Antaŭe" #: src/keycode.cpp:227 msgid "Space" @@ -986,11 +997,11 @@ msgstr "Malsupren" #: src/keycode.cpp:228 msgid "Execute" -msgstr "" +msgstr "Ruli" #: src/keycode.cpp:228 msgid "Print" -msgstr "" +msgstr "Presi" #: src/keycode.cpp:228 msgid "Select" @@ -1006,19 +1017,19 @@ msgstr "Helpo" #: src/keycode.cpp:229 msgid "Insert" -msgstr "" +msgstr "Enmeti" #: src/keycode.cpp:229 msgid "Snapshot" -msgstr "" +msgstr "Ekrankopio" #: src/keycode.cpp:232 msgid "Left Windows" -msgstr "" +msgstr "Maldekstra fenestro" #: src/keycode.cpp:233 msgid "Apps" -msgstr "" +msgstr "Aplikaĵoj" #: src/keycode.cpp:233 msgid "Numpad 0" @@ -1030,7 +1041,7 @@ msgstr "Klavareto 1" #: src/keycode.cpp:233 msgid "Right Windows" -msgstr "" +msgstr "Dekstra fenestro" #: src/keycode.cpp:233 msgid "Sleep" @@ -1086,19 +1097,19 @@ msgstr "Klavareto 9" #: src/keycode.cpp:239 msgid "Num Lock" -msgstr "" +msgstr "Nombra Baskulo" #: src/keycode.cpp:239 msgid "Scroll Lock" -msgstr "" +msgstr "Ruluma Baskulo" #: src/keycode.cpp:240 msgid "Left Shift" -msgstr "" +msgstr "Maldekstra Majuskligo" #: src/keycode.cpp:240 msgid "Right Shift" -msgstr "" +msgstr "Dekstra Majuskligo" #: src/keycode.cpp:241 msgid "Left Control" @@ -1106,7 +1117,7 @@ msgstr "Maldekstra Stiro" #: src/keycode.cpp:241 msgid "Left Menu" -msgstr "" +msgstr "Maldekstra Menuo" #: src/keycode.cpp:241 msgid "Right Control" @@ -1114,47 +1125,47 @@ msgstr "Dekstra Stiro" #: src/keycode.cpp:241 msgid "Right Menu" -msgstr "" +msgstr "Dekstra Menuo" #: src/keycode.cpp:243 msgid "Comma" -msgstr "" +msgstr "Komo" #: src/keycode.cpp:243 msgid "Minus" -msgstr "" +msgstr "Minuso" #: src/keycode.cpp:243 msgid "Period" -msgstr "" +msgstr "Punkto" #: src/keycode.cpp:243 msgid "Plus" -msgstr "" +msgstr "Pluso" #: src/keycode.cpp:247 msgid "Attn" -msgstr "" +msgstr "Attn" #: src/keycode.cpp:247 msgid "CrSel" -msgstr "" +msgstr "CrSel" #: src/keycode.cpp:248 msgid "Erase OEF" -msgstr "" +msgstr "Viŝi OEF" #: src/keycode.cpp:248 msgid "ExSel" -msgstr "" +msgstr "ExSel" #: src/keycode.cpp:248 msgid "OEM Clear" -msgstr "" +msgstr "OEM Vakigi" #: src/keycode.cpp:248 msgid "PA1" -msgstr "" +msgstr "PA1" #: src/keycode.cpp:248 msgid "Zoom" From 1d6911676e8e9eadba76ef9f170d750fe6fa31bc Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 12 Sep 2015 23:22:38 +0200 Subject: [PATCH 387/670] Run updatepo.sh After this, it should hopefully not record line numbers anymore, so the diffs of updatepo.sh runs are smaller. Well, this is theory, lets see how it will turn out to be in practice. --- po/be/minetest.po | 1610 ++++++++++++++++----------------- po/cs/minetest.po | 1946 ++++++++++++++++++++-------------------- po/da/minetest.po | 1857 +++++++++++++++++++------------------- po/de/minetest.po | 2018 ++++++++++++++++++++--------------------- po/eo/minetest.po | 1783 +++++++++++++++++++------------------ po/es/minetest.po | 1795 +++++++++++++++++++------------------ po/et/minetest.po | 1943 ++++++++++++++++++++-------------------- po/fr/minetest.po | 2021 +++++++++++++++++++++--------------------- po/hu/minetest.po | 1924 ++++++++++++++++++++-------------------- po/id/minetest.po | 1790 +++++++++++++++++++------------------ po/it/minetest.po | 1898 ++++++++++++++++++++------------------- po/ja/minetest.po | 1764 ++++++++++++++++++------------------ po/jbo/minetest.po | 1685 ++++++++++++++++++----------------- po/ko/minetest.po | 1614 ++++++++++++++++----------------- po/ky/minetest.po | 1841 +++++++++++++++++++------------------- po/lt/minetest.po | 1765 ++++++++++++++++++------------------ po/minetest.pot | 614 ++++++------- po/nb/minetest.po | 1662 +++++++++++++++++----------------- po/nl/minetest.po | 2019 ++++++++++++++++++++--------------------- po/pl/minetest.po | 2017 ++++++++++++++++++++--------------------- po/pt/minetest.po | 2006 ++++++++++++++++++++--------------------- po/pt_BR/minetest.po | 1966 ++++++++++++++++++++-------------------- po/ro/minetest.po | 1902 +++++++++++++++++++-------------------- po/ru/minetest.po | 1998 +++++++++++++++++++++-------------------- po/tr/minetest.po | 1788 +++++++++++++++++++------------------ po/uk/minetest.po | 1885 ++++++++++++++++++++------------------- po/zh_CN/minetest.po | 1965 ++++++++++++++++++++-------------------- 27 files changed, 24935 insertions(+), 24141 deletions(-) diff --git a/po/be/minetest.po b/po/be/minetest.po index daddc00ac..d94858135 100644 --- a/po/be/minetest.po +++ b/po/be/minetest.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-11-23 17:37+0100\n" "Last-Translator: Selat \n" "Language-Team: Belarusian\n" @@ -15,615 +15,670 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" +#: builtin/mainmenu/store.lua +msgid "Rating" msgstr "" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" msgstr "" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" msgstr "" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.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 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: 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 Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 -msgid "Loading textures..." +#: src/client.cpp +msgid "Connection timed out." msgstr "" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "" - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "" - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" +#: src/client.cpp +msgid "Initializing nodes" msgstr "" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." +#: src/client.cpp +msgid "Initializing nodes..." msgstr "" -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." msgstr "" -#: src/game.cpp:1072 -msgid "You died." +#: src/game.cpp +msgid "Change Keys" msgstr "" -#: src/game.cpp:1073 -msgid "Respawn" +#: src/game.cpp +msgid "Change Password" msgstr "" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -639,503 +694,470 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "" - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "" + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" msgstr "" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" msgstr "" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:223 -msgid "Left Button" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "" diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 3aa1b151f..52fc4c61a 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-01 18:04+0200\n" "Last-Translator: Jakub Vaněk \n" -"Language-Team: Czech " -"\n" +"Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,165 +19,180 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Nastala chyba v Lua skriptu, což může být např. mod:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Nastala chyba:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hlavní nabídka" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Připojit" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Nahrávám..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Zkuste znovu povolit seznam veřejných serverů a zkontrolujte své internetové " "připojení." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Svět:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Skrýt vnitřní" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Skrýt obsahy balíčků" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Závislosti:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Uložit" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Zrušit" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Povolit balíček" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Závislosti:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Zakázat balíček" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "povoleno" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Povolit balíček" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Povolit vše" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Název světa" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seedové číslo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Skrýt vnitřní" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generátor mapy" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Skrýt obsahy balíčků" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Hra" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Vytvořit" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Uložit" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Nemáte nainstalované žádné podhry." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Svět:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Stáhněte si jednu z minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "povoleno" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal 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:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Stáhněte si z minetest.net podhru, například minetest_game" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: 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:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Vytvořit" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Stáhněte si z minetest.net podhru, například minetest_game" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Stáhněte si jednu z minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Hra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Generátor mapy" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Nebyla vybrána podhra nebo název" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seedové číslo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal 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 +msgid "World name" +msgstr "Název světa" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Nemáte nainstalované žádné podhry." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Skutečně chcete odstranit \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ano" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Jistě že ne!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Nepodařilo se odstranit \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Neplatná cesta k modu \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Jistě že ne!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ano" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Doopravdy chcete smazat svět \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ne" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Přejmenovat balíček modů:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Přijmout" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalace modu: ze souboru: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Přejmenovat balíček modů:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -185,455 +200,511 @@ msgstr "" "\n" "Instalace modu: špatný archiv nebo nepodporovaný typ souboru \"$1\"" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Selhala instalace $1 do $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalace modu: ze souboru: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalace modu: nenašel jsem skutečné jméno modu: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalace modu: nenašel jsem skutečné jméno modu: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Neřazené" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Hledání" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Stahuji $1, prosím čekejte..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Úspěšně nainstalováno:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Zkratka:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Hodnocení" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Přeinstalovat" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalovat" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Zavřít obchod" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Stahuji $1, prosím čekejte..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalovat" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Strana $1 z $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Autoři" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Hodnocení" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Klíčoví vývojáři" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Hledání" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Zkratka:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Úspěšně nainstalováno:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Neřazené" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Přeinstalovat" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktivní přispěvatelé" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Bývalí klíčoví vývojáři" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Klíčoví vývojáři" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Autoři" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Bývalí přispěvatelé" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Bývalí klíčoví vývojáři" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Nainstalované mody:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online repozitář modů" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Popis modu není dostupný" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informace o modu:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Přejmenovat" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Odinstalovat označený balíček" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Odinstalovat vybraný mod" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Vybrat soubor s modem:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mody" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Popis modu není dostupný" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Přejmenovat" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Vybrat soubor s modem:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Odinstalovat vybraný mod" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Odinstalovat označený balíček" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adresa / Port :" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Jméno / Heslo :" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Seznam veřejných serverů" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Smazat" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Připojit" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Kreativní mód" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Poškození povoleno" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP povoleno" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Klient" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nový" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Připojit" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Nastavit" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Spustit hru" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Vyber svět:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Kreativní mód" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Povolit poškození" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Poškození povoleno" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Veřejný" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Smazat" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Jméno/Heslo" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Jméno / Heslo :" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Seznam veřejných serverů" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP povoleno" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Svázat adresu" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Nastavit" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port serveru" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreativní mód" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Povolit poškození" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Jméno/Heslo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nový" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Nevybrali jste žádný svět!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Port" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Veřejný" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Vyber svět:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Neprůhledné listí" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port serveru" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Jednoduché listí" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Spustit hru" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Vícevrstevné listí" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Žádný filtr" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Bilineární filtr" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Trilineární filtr" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Žádné Mipmapy" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Mipmapa" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmapa + Anizo. filtr" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Jste si jisti, že chcete resetovat místní svět?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Ne!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Plynulé osvětlení" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Povolit částice" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3D mraky" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Neprůhledná voda" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Propojené sklo" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Zvýraznění bloků" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Texturování:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Jste si jisti, že chcete resetovat místní svět?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Renderování:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bilineární filtr" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Aby se změna ovladače projevila, restartujte Minetest" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shadery" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Změnit nastavení kláves" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Reset místního světa" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "Měřítko GUI" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Měřítko aplikované na prvky menu: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "Středový kurzor" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "Dosah dotyku (px)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Bump mapování" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Změnit nastavení kláves" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Propojené sklo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Povolit částice" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Vícevrstevné listí" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "Měřítko GUI" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Generovat normálové mapy" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "Mipmapa" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmapa + Anizo. filtr" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Žádný filtr" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Žádné Mipmapy" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Ne!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Zvýraznění bloků" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Neprůhledné listí" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Neprůhledná voda" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Vlnění vody" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Reset místního světa" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Vlnění listů" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Měřítko aplikované na prvky menu: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Vlnění rostlin" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pro povolení shaderů musíte používat OpenGL ovladač." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Nastavení" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Start místní hry" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shadery" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Jednoduché listí" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Plynulé osvětlení" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Texturování:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Pro povolení shaderů musíte používat OpenGL ovladač." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "Středový kurzor" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "Dosah dotyku (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Trilineární filtr" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Vlnění listů" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Vlnění rostlin" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Vlnění vody" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Nastavení modů" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Hlavní nabídka" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Start místní hry" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Hrát" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Místní hra" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Vyberte balíček textur:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Informace nejsou dostupné" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Vyberte balíček textur:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Balíčky textur" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Načítám textury..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Chyba spojení (vypršel čas?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Sestavuji shadery..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Vytvářím bloky..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Inicializuji bloky" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Textury věcí..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Hotovo!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Hlavní nabídka" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Inicializuji bloky" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Jméno hráče je příliš dlouhé." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Vytvářím bloky..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Textury věcí..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Načítám textury..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Sestavuji shadery..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Chyba spojení (vypršel čas?)" -#: src/client/clientlauncher.cpp:425 +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Hru nebylo možné nahrát nebo najít \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Neplatná specifikace hry." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hlavní nabídka" + +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" "Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat." -#: src/client/clientlauncher.cpp:432 +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Jméno hráče je příliš dlouhé." + +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "Uvedená cesta ke světu neexistuje: " -#: src/client/clientlauncher.cpp:441 -msgid "Could not find or load game \"" -msgstr "Hru nebylo možné nahrát nebo najít \"" - -#: src/client/clientlauncher.cpp:459 -msgid "Invalid gamespec." -msgstr "Neplatná specifikace hry." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Pro detaily se podívejte do debug.txt." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Změnit klávesy" + +#: src/game.cpp +msgid "Change Password" +msgstr "Změnit heslo" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Připojuji se k serveru..." + +#: src/game.cpp +msgid "Continue" msgstr "Pokračovat" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Zemřel jsi." +#: src/game.cpp +msgid "Creating client..." +msgstr "Vytvářím klienta..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Znovu stvořit" +#: src/game.cpp +msgid "Creating server..." +msgstr "Vytvářím server..." -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Výchozí ovládání:\n" +"- WASD: pohyb\n" +"- Mezera: skákání/šplhání\n" +"- Shift: plížení\n" +"- Q: zahodit věc\n" +"- I: inventář\n" +"- Myš: otáčení,rozhlížení\n" +"- Myš(levé tl.): kopat, štípat\n" +"- Myš(pravé tl.): položit, použít\n" +"- Myš(kolečko): vybrat přihrádku\n" +"- T: chat\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -661,609 +732,572 @@ msgstr "" "- stisk a přesun, klik druhým prstem\n" " --> umístit samostatnou věc do přihrádky\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Výchozí ovládání:\n" -"- WASD: pohyb\n" -"- Mezera: skákání/šplhání\n" -"- Shift: plížení\n" -"- Q: zahodit věc\n" -"- I: inventář\n" -"- Myš: otáčení,rozhlížení\n" -"- Myš(levé tl.): kopat, štípat\n" -"- Myš(pravé tl.): položit, použít\n" -"- Myš(kolečko): vybrat přihrádku\n" -"- T: chat\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Pokračovat" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Změnit heslo" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Hlasitost" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Změnit klávesy" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Odejít do nabídky" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Ukončit hru" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Vypínání..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Vytvářím server..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Vytvářím klienta..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Překládám adresu..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Připojuji se k serveru..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Definice věcí..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definice bloků..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Média..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Pro detaily se podívejte do debug.txt." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definice bloků..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Pokračovat" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Překládám adresu..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Znovu stvořit" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Vypínání..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Hlasitost" + +#: src/game.cpp +msgid "You died." +msgstr "Zemřel jsi." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Zadejte " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "OK" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Použít\" = slézt dolů" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Vzad" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Příkaz" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konzole" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Dvojstisk klávesy \"skok\" zapne létání" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Zahodit" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Vpřed" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventář" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Skok" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klávesa je již používána" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z " "minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Použít\" = slézt dolů" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Dvojstisk klávesy \"skok\" zapne létání" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Klávesa je již používána" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "stiskni klávesu" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Vpřed" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Vzad" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Doleva" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Doprava" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Použít" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Skok" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Plížit se" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Zahodit" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventář" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Příkaz" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konzole" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Létání" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Turbo" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "Plynulý pohyb kamery" - -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "Duch" - -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Změna dohledu" - -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "Vypsat hromádky" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Staré heslo" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Změna dohledu" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nové heslo" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Doprava" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Potvrdit heslo" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Plížit se" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Plynulý pohyb kamery" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Turbo" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Létání" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Duch" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Použít" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "stiskni klávesu" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Změnit" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Potvrdit heslo" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nové heslo" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Staré heslo" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hesla se neshodují!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Hlasitost: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Odejít" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Levé tlačítko myši" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Hlasitost: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Prostřední tlačítko myši" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Pravé tlačítko myši" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X Tlačítko 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Zpět" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Vyčistit" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Vrátit" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabulátor" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Tlačítko 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Klávesa velkého písmene" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Nabídka" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pauza" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Změna režimu" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Další" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Předchozí" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Mezerník" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Dolů" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Spustit" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print Screen" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Vybrat" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Nahoru" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Pomoc" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Levá klávesa Windows" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Aplikace" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numerická klávesnice: 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numerická klávesnice: 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Pravá klávesa Windows" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Spánek" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numerická klávesnice: 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numerická klávesnice: 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numerická klávesnice: 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numerická klávesnice: 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numerická klávesnice: 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numerická klávesnice: 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numerická klávesnice: *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numerická klávesnice: +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numerická klávesnice: -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numerická klávesnice: /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numerická klávesnice: 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numerická klávesnice: 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Levý Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Pravý Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Levý Control" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Levá klávesa Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Pravý Control" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Pravá klávesa Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Čárka" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Mínus" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Tečka" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Zpět" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Klávesa velkého písmene" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Vyčistit" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Čárka" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Dolů" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Smazat EOF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Spustit" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Pomoc" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Levé tlačítko myši" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Levý Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Levá klávesa Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Levý Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Levá klávesa Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Nabídka" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Prostřední tlačítko myši" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Mínus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Změna režimu" + +#: src/keycode.cpp +msgid "Next" +msgstr "Další" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numerická klávesnice: *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numerická klávesnice: +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numerická klávesnice: -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numerická klávesnice: /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numerická klávesnice: 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numerická klávesnice: 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numerická klávesnice: 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numerická klávesnice: 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numerická klávesnice: 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numerická klávesnice: 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numerická klávesnice: 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numerická klávesnice: 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numerická klávesnice: 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numerická klávesnice: 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pauza" + +#: src/keycode.cpp +msgid "Period" +msgstr "Tečka" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Předchozí" + +#: src/keycode.cpp +msgid "Return" +msgstr "Vrátit" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Pravé tlačítko myši" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Pravý Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Pravá klávesa Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Pravý Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Pravá klávesa Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Vybrat" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Spánek" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Mezerník" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulátor" + +#: src/keycode.cpp +msgid "Up" +msgstr "Nahoru" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Tlačítko 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Tlačítko 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Přiblížení" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapování" +#~ msgid "Fly mode" +#~ msgstr "Létací režim" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anizotropní filtrování" +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid "Downloading" +#~ msgstr "Stahuji" + +#~ msgid "Game Name" +#~ msgstr "Název hry" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\"" + +#~ msgid "GAMES" +#~ msgstr "HRY" + +#~ msgid "Games" +#~ msgstr "Hry" + +#~ msgid "Mods:" +#~ msgstr "Mody:" + +#~ msgid "edit game" +#~ msgstr "upravit hru" + +#~ msgid "new game" +#~ msgstr "nová hra" + +#~ msgid "EDIT GAME" +#~ msgstr "UPRAVIT HRU" + +#~ msgid "Remove selected mod" +#~ msgstr "Odstranit vybraný mod" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Přidat mod" + +#~ msgid "CLIENT" +#~ msgstr "KLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Oblíbené:" + +#~ msgid "START SERVER" +#~ msgstr "MÍSTNÍ SERVER" + +#~ msgid "Name" +#~ msgstr "Jméno" + +#~ msgid "Password" +#~ msgstr "Heslo" + +#~ msgid "SETTINGS" +#~ msgstr "NASTAVENÍ" + +#~ msgid "Preload item visuals" +#~ msgstr "Přednačíst textury předmětů" + +#~ msgid "Finite Liquid" +#~ msgstr "Konečná voda" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "HRA JEDNOHO HRÁČE" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "BALÍČKY TEXTUR" + +#~ msgid "MODS" +#~ msgstr "MODY" + +#~ msgid "Add mod:" +#~ msgstr "Přidat mod:" + +#~ msgid "Local install" +#~ msgstr "Místní instalace" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět" -#~ msgid "Local install" -#~ msgstr "Místní instalace" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anizotropní filtrování" -#~ msgid "Add mod:" -#~ msgstr "Přidat mod:" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapování" -#~ msgid "MODS" -#~ msgstr "MODY" +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Aby se změna ovladače projevila, restartujte Minetest" -#~ msgid "TEXTURE PACKS" -#~ msgstr "BALÍČKY TEXTUR" +#~ msgid "Rendering:" +#~ msgstr "Renderování:" -#~ msgid "SINGLE PLAYER" -#~ msgstr "HRA JEDNOHO HRÁČE" - -#~ msgid "Finite Liquid" -#~ msgstr "Konečná voda" - -#~ msgid "Preload item visuals" -#~ msgstr "Přednačíst textury předmětů" - -#~ msgid "SETTINGS" -#~ msgstr "NASTAVENÍ" - -#~ msgid "Password" -#~ msgstr "Heslo" - -#~ msgid "Name" -#~ msgstr "Jméno" - -#~ msgid "START SERVER" -#~ msgstr "MÍSTNÍ SERVER" - -#~ msgid "Favorites:" -#~ msgstr "Oblíbené:" - -#~ msgid "CLIENT" -#~ msgstr "KLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Přidat mod" - -#~ msgid "Remove selected mod" -#~ msgstr "Odstranit vybraný mod" - -#~ msgid "EDIT GAME" -#~ msgstr "UPRAVIT HRU" - -#~ msgid "new game" -#~ msgstr "nová hra" - -#~ msgid "edit game" -#~ msgstr "upravit hru" - -#~ msgid "Mods:" -#~ msgstr "Mody:" - -#~ msgid "Games" -#~ msgstr "Hry" - -#~ msgid "GAMES" -#~ msgstr "HRY" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Název hry" - -#~ msgid "Downloading" -#~ msgstr "Stahuji" - -#~ msgid " MB/s" -#~ msgstr " MB/s" - -#~ msgid " KB/s" -#~ msgstr " KB/s" - -#~ msgid "Fly mode" -#~ msgstr "Létací režim" +#~ msgid "Online mod repository" +#~ msgstr "Online repozitář modů" diff --git a/po/da/minetest.po b/po/da/minetest.po index 8405261b2..d2fe23eb5 100644 --- a/po/da/minetest.po +++ b/po/da/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-02-17 00:41+0200\n" "Last-Translator: Rune Biskopstö Christensen \n" "Language-Team: \n" @@ -18,644 +18,705 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hovedmenu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Forbind" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -#, fuzzy -msgid "World:" -msgstr "Vælg verden:" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Anuller" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -#, fuzzy -msgid "Hide Game" -msgstr "Spil" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "afhænger af:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Gem" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Anuller" - -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Aktivér alle" - -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Deaktivér alle" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "aktiveret" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Aktivér alle" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Aktivér alle" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Verdens navn" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Spil" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Skab" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Gem" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Vælg verden:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "aktiveret" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Kan ikke skabe verden: en verden med dette navn eksisterer allerede" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Skab" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Spil" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Verdens navn" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Slet verden" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nej" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accepter" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Mislykkedes i at initialisere verden" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Verdens navn" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Skabt af" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Skabt af" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Vælg verden:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Adresse/port" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Navn/kodeord" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Slet" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Forbind" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Kreativ tilstand" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "aktiveret" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Slet" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Navn/kodeord" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "aktiveret" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Ny" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Konfigurér" -#: builtin/mainmenu/tab_server.lua:29 -#, fuzzy -msgid "Start Game" -msgstr "Start spil / Forbind" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Vælg verden:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "Kreativ tilstand" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Aktivér skade" -#: builtin/mainmenu/tab_server.lua:35 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Navn/kodeord" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Ny" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua #, fuzzy msgid "Public" msgstr "Vis offentlig" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Navn/kodeord" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Vælg verden:" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 -msgid "No world created or selected!" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Opakt (uigennemsigtigt) vand" - -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 +#: builtin/mainmenu/tab_server.lua #, fuzzy -msgid "Fancy Leaves" -msgstr "\"Smarte\" træer" +msgid "Start Game" +msgstr "Start spil / Forbind" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "3D skyer" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 #, fuzzy msgid "Bilinear Filter" msgstr "Bi-lineær filtréring" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Tri-lineær filtréring" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Glat belysning" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Aktivér partikler" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "3D skyer" - -#: builtin/mainmenu/tab_settings.lua:208 -#, fuzzy -msgid "Opaque Water" -msgstr "Opakt (uigennemsigtigt) vand" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Forbind" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shadere" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Skift bindinger" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Enligspiller" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mip-mapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Skift bindinger" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Forbind" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Aktivér partikler" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "\"Smarte\" træer" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Opakt (uigennemsigtigt) vand" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Water" +msgstr "Opakt (uigennemsigtigt) vand" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Enligspiller" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Indstillinger" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Enligspiller" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shadere" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Glat belysning" + +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-lineær filtréring" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Konfigurér" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Hovedmenu" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Enligspiller" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Afspil" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Enligspiller" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "" +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "" - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "" - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Hovedmenu" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." +#: src/client.cpp +msgid "Initializing nodes" msgstr "" -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Kunne ikke finde eller indlæse spil \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Ugyldig spilspecifikationer." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hovedmenu" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Tjek debug.txt for detaljer." + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Skift bindinger" + +#: src/game.cpp +msgid "Change Password" +msgstr "Skift kodeord" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" msgstr "Fortsæt" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Du døde." +#: src/game.cpp +msgid "Creating client..." +msgstr "" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Genopstå" +#: src/game.cpp +msgid "Creating server..." +msgstr "" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -671,553 +732,542 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Fortsæt" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Skift kodeord" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Skift bindinger" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Afslut til menu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Afslut til operativsystemet" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "" - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -"\n" -"Tjek debug.txt for detaljer." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Fortsæt" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "Genopstå" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "Du døde." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" -"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest." -"conf)" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Brug\" = klatre ned" -#: src/guiKeyChangeMenu.cpp:180 +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Baglæns" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Snak" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Kommando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsol" + +#: src/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" msgstr "" "Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-" "tilstand" -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Tast allerede i brug" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "Tryk på en tast" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Fremad" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Baglæns" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Venstre" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Højre" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Brug" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Hop" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Snige" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Drop" msgstr "Slip" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Fremad" + +#: src/guiKeyChangeMenu.cpp msgid "Inventory" msgstr "Beholdning" -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Snak" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Hop" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Kommando" +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tast allerede i brug" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konsol" +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest." +"conf)" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Omstil flyvning" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Venstre" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Omstil hurtig" +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Udskriv stakke" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Afstands vælg" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Højre" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Snige" + +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Omstil hurtig" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Omstil hurtig" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Omstil flyvning" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Omstil fylde" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Afstands vælg" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Brug" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Udskriv stakke" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Tryk på en tast" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Gammelt kodeord" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nyt kodeord" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Bekræft kodeord" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Skift" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Bekræft kodeord" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nyt kodeord" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Gammelt kodeord" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kodeordene er ikke ens!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Venstre knap" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "" -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Midterste knap" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Højre knap" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X knap 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Tilbage" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Ryd" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabulator" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X knap 2" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Capital" -msgstr "Store bogstaver" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Konvertér" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Endelig" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Tilstandsskift" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Næste" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Foregående" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Mellemrum" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Ned" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Eksekvér" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Udskriv" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Vælg" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Op" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Hjælp" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -#, fuzzy -msgid "Snapshot" -msgstr "Tilstandsbillede" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Venstre meta" - -#: src/keycode.cpp:233 +#: src/keycode.cpp #, fuzzy msgid "Apps" msgstr "Applikationer" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Højre meta" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sov" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Venstre Skift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Højre Skift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Venstre Control" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Venstre Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Højre Control" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Højre Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Komma" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punktum" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Giv agt" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Tilbage" + +#: src/keycode.cpp +#, fuzzy +msgid "Capital" +msgstr "Store bogstaver" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Ryd" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konvertér" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Ned" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Udvisk Slut-På-Fil" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Eksekvér" + +#: src/keycode.cpp +msgid "Final" +msgstr "Endelig" + +#: src/keycode.cpp +msgid "Help" +msgstr "Hjælp" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Venstre knap" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Venstre Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Venstre Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Venstre Skift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Venstre meta" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Midterste knap" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Tilstandsskift" + +#: src/keycode.cpp +msgid "Next" +msgstr "Næste" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Ryd" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punktum" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Udskriv" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Foregående" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Højre knap" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Højre Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Højre Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Højre Skift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Højre meta" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Vælg" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sov" + +#: src/keycode.cpp +#, fuzzy +msgid "Snapshot" +msgstr "Tilstandsbillede" + +#: src/keycode.cpp +msgid "Space" +msgstr "Mellemrum" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulator" + +#: src/keycode.cpp +msgid "Up" +msgstr "Op" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X knap 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X knap 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Spil" +#~ msgid "Downloading" +#~ msgstr "Ned" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Spil" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-mapping" -#, fuzzy -#~ msgid "Favorites:" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotropisk filtréring" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed" + +#~ msgid "is required by:" +#~ msgstr "er påkrævet af:" + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguration gemt. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver" + +#~ msgid "Multiplayer" +#~ msgstr "Flerspiller" + +#~ msgid "Advanced" +#~ msgstr "Avanceret" + +#~ msgid "Show Public" +#~ msgstr "Vis offentlig" + +#~ msgid "Show Favorites" #~ msgstr "Vis favoritter" -#, fuzzy -#~ msgid "Password" -#~ msgstr "Gammelt kodeord" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server." -#~ msgid "Preload item visuals" -#~ msgstr "For-indlæs elementernes grafik" +#~ msgid "Create world" +#~ msgstr "Skab verden" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n" -#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. " +#~ msgid "Address required." +#~ msgstr "Adresse påkrævet." -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n" -#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. " +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kan ikke slette verden: ingenting valgt" -#~ msgid "Delete map" -#~ msgstr "Slet mappen" +#~ msgid "Files to be deleted" +#~ msgstr "Filer som slettes" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kan ikke skabe verden: ingen spil fundet" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kan ikke konfigurere verden: ingenting valgt" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Mislykkedes i at slette alle verdenens filer" #~ msgid "" #~ "Default Controls:\n" @@ -1244,63 +1294,38 @@ msgstr "Zoom" #~ "- ESC: denne menu\n" #~ "- T: snak\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Mislykkedes i at slette alle verdenens filer" +#~ msgid "Delete map" +#~ msgstr "Slet mappen" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kan ikke konfigurere verden: ingenting valgt" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n" +#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. " -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kan ikke skabe verden: ingen spil fundet" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n" +#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. " -#~ msgid "Files to be deleted" -#~ msgstr "Filer som slettes" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kan ikke slette verden: ingenting valgt" - -#~ msgid "Address required." -#~ msgstr "Adresse påkrævet." - -#~ msgid "Create world" -#~ msgstr "Skab verden" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server." - -#~ msgid "Show Favorites" -#~ msgstr "Vis favoritter" - -#~ msgid "Show Public" -#~ msgstr "Vis offentlig" - -#~ msgid "Advanced" -#~ msgstr "Avanceret" - -#~ msgid "Multiplayer" -#~ msgstr "Flerspiller" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. " - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguration gemt. " - -#~ msgid "is required by:" -#~ msgstr "er påkrævet af:" - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed" - -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotropisk filtréring" - -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-mapping" +#~ msgid "Preload item visuals" +#~ msgstr "For-indlæs elementernes grafik" #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Ned" +#~ msgid "Password" +#~ msgstr "Gammelt kodeord" + +#, fuzzy +#~ msgid "Favorites:" +#~ msgstr "Vis favoritter" + +#, fuzzy +#~ msgid "Games" +#~ msgstr "Spil" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Spil" diff --git a/po/de/minetest.po b/po/de/minetest.po index 63a4daf71..cd9fd7b36 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-03 21:35+0200\n" "Last-Translator: Tim \n" -"Language-Team: German " -"\n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,167 +19,182 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Ein Fehler ist in Lua aufgetreten (z.B. aufgrund eines Mods):" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Ein Fehler ist aufgetreten:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hauptmenü" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Verbinden" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Lädt ..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Bitte versuchen Sie die öffentliche Serverliste neu zu aktivieren und prüfen " "Sie Ihre Internetverbindung." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Welt:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Spiel ausblenden" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "MP-Mods verstecken" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Abhängig von:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Speichern" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Abbrechen" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "MP aktivieren" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Abhängig von:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "MP deaktivieren" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "Aktiviert" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "MP aktivieren" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Alle an" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Weltname" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Spiel ausblenden" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Weltgenerator" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "MP-Mods verstecken" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Spiel" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Speichern" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Welt:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Aktiviert" + +#: 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 "Create" msgstr "Erstellen" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Keine Spiele installiert." - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Spiele können von minetest.net heruntergeladen werden" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Warnung: Die minimale Testversion ist für Entwickler gedacht." - -#: builtin/mainmenu/dlg_create_world.lua:73 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" "Andere Spiele (wie minetest_game) können von minetest.net heruntergeladen " "werden" -#: builtin/mainmenu/dlg_create_world.lua:99 -msgid "A world named \"$1\" already exists" -msgstr "Eine Welt namens „$1“ existiert bereits" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Spiele können von minetest.net heruntergeladen werden" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Spiel" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Weltgenerator" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Kein Weltname gegeben oder kein Spiel ausgewählt" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.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." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Weltname" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Keine Spiele installiert." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "„$1“ wirklich löschen?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Nein, natürlich nicht!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Fehler beim Löschen von „$1“" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Unzulässiger Modpfad „$1“" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Nein, natürlich nicht!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Welt „$1“ löschen?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nein" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Modpack umbenennen:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Annehmen" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Mod installieren: Datei: „$1“" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Modpack umbenennen:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -187,455 +202,511 @@ msgstr "" "\n" "Mod installieren: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Fehler bei der Installation von $1 nach $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Mod installieren: Datei: „$1“" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Mod installieren: Geeigneter Ordnername für Modpack $1 konnte nicht gefunden " "werden" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Unsortiert" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Suchen" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "$1 wird heruntergeladen, bitte warten ..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Erfolgreich installiert:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Kurzname:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Bewertung" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Erneut installieren" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Installieren" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Schließen" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1 wird heruntergeladen, bitte warten ..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installieren" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Seite $1 von $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Mitwirkende" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Bewertung" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Hauptentwickler" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Suchen" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Kurzname:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Erfolgreich installiert:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Unsortiert" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Erneut installieren" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktive Mitwirkende" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Frühere Hauptentwickler" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Hauptentwickler" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Mitwirkende" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Frühere Mitwirkende" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Frühere Hauptentwickler" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Installierte Mods:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online-Mod-Archiv" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Keine Modbeschreibung verfügbar" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Modinformation:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Umbenennen" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Ausgewähltes Modpack deinstallieren" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Ausgewählte Mod deinstallieren" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Mod-Datei auswählen:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Keine Modbeschreibung verfügbar" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Umbenennen" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Mod-Datei auswählen:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Ausgewählte Mod deinstallieren" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Ausgewähltes Modpack deinstallieren" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adresse/Port:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Name/Passwort:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Öffentliche Serverliste" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Entfernen" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Verbinden" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Kreativmodus" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Schaden aktiviert" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "Spielerkampf aktiviert" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Neu" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Verbinden" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Konfigurieren" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Spiel starten" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Welt wählen:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Kreativmodus" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Schaden einschalten" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Schaden aktiviert" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Öffentlich" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Entfernen" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Name/Passwort" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Name/Passwort:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Öffentliche Serverliste" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Spielerkampf aktiviert" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Bind-Adresse" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Konfigurieren" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Serverport" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreativmodus" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Schaden einschalten" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Name/Passwort" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Neu" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Kein Weltname angegeben oder kein Spiel ausgewählt!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Port" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Öffentlich" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Welt wählen:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Undurchs. Blätter" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Serverport" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Einfache Blätter" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Spiel starten" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Schöne Blätter" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Kein Filter" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Bilinearer Filter" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Trilinearer Filter" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Keine Mipmap" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Mipmap" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap u. Aniso. Filter" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Nein!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Besseres Licht" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Partikel aktivieren" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3D-Wolken" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Undurchs. Wasser" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Verbundenes Glas" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Blöcke hervorheben" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Texturierung:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bilinearer Filter" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Neustart nach Ändern des Treibers erforderlich" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shader" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Tasten ändern" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Einzelspielerwelt zurücksetzen" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "GUI-Skalierfaktor" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Auf Menüelemente angewandter Skalierfaktor: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "Berührungsfreies Ziel" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "Berührungsempfindlichkeit (px)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Bumpmapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Tasten ändern" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Verbundenes Glas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Partikel aktivieren" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Schöne Blätter" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "GUI-Skalierfaktor" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Normalmaps generieren" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmap u. Aniso. Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Kein Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Keine Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Nein!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Blöcke hervorheben" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Undurchs. Blätter" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Undurchs. Wasser" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Wasserwellen" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Einzelspielerwelt zurücksetzen" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Wehende Blätter" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Auf Menüelemente angewandter Skalierfaktor: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Wogende Pflanzen" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Einstellungen" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Einzelspieler starten" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shader" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Einfache Blätter" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Besseres Licht" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Texturierung:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "Berührungsfreies Ziel" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "Berührungsempfindlichkeit (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Trilinearer Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Wehende Blätter" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Wogende Pflanzen" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Wasserwellen" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Mods konfigurieren" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Hauptmenü" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Einzelspieler starten" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Spielen" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Einzelspieler" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Texturpaket auswählen:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Keine Informationen vorhanden" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Texturpaket auswählen:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Texturpakete" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Texturen laden ..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Verbindungsfehler (Zeitüberschreitung?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Shader wiederherstellen ..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Blöcke initialisieren ..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Blöcke initialisieren" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Inventarbilder ..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Fertig!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Hauptmenü" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Blöcke initialisieren" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Spielername zu lang." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Blöcke initialisieren ..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Inventarbilder ..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Texturen laden ..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Shader wiederherstellen ..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Verbindungsfehler (Zeitüberschreitung?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "Angegebener Weltpfad existiert nicht: " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Kann Spiel nicht finden/laden \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Ungültige Spielspezif." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hauptmenü" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Spielername zu lang." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Angegebener Weltpfad existiert nicht: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Fortsetzen" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Siehe debug.txt für Details." -#: src/game.cpp:1072 -msgid "You died." -msgstr "Sie sind gestorben." +#: src/game.cpp +msgid "Change Keys" +msgstr "Tasten ändern" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Wiederbeleben" +#: src/game.cpp +msgid "Change Password" +msgstr "Passwort ändern" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Zum Server verbinden ..." + +#: src/game.cpp +msgid "Continue" +msgstr "Weiter" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Client erstellen ..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Server erstellen ..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Standard-Tastenbelegung:\n" +"- WASD: bewegen\n" +"- Leertaste: springen/klettern\n" +"- Umschalt: kriechen/herunterklettern\n" +"- Q: Item fallen lassen\n" +"- I: Inventar\n" +"- Maus: drehen/umschauen\n" +"- Maus links: graben/schlagen\n" +"- Maus rechts: platzieren/benutzen\n" +"- Mausrad: Gegenstand auswählen\n" +"- T: Chat\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -663,580 +734,573 @@ msgstr "" "- berühren u. ziehen, mit 2. Finger antippen\n" " --> 1 Gegenstand ins Feld platzieren\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Standard-Tastenbelegung:\n" -"- WASD: bewegen\n" -"- Leertaste: springen/klettern\n" -"- Umschalt: kriechen/herunterklettern\n" -"- Q: Item fallen lassen\n" -"- I: Inventar\n" -"- Maus: drehen/umschauen\n" -"- Maus links: graben/schlagen\n" -"- Maus rechts: platzieren/benutzen\n" -"- Mausrad: Gegenstand auswählen\n" -"- T: Chat\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Weiter" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Passwort ändern" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Tonlautstärke" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Tasten ändern" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Hauptmenü" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Programm beenden" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Herunterfahren ..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Server erstellen ..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Client erstellen ..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Adresse auflösen ..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Zum Server verbinden ..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Item-Definitionen ..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Node-Definitionen ..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Medien ..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Medien ..." + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Siehe debug.txt für Details." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Node-Definitionen ..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Fortsetzen" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Adresse auflösen ..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Wiederbeleben" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Herunterfahren ..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Tonlautstärke" + +#: src/game.cpp +msgid "You died." +msgstr "Sie sind gestorben." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Enter " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "OK" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "Benutzen = runterklettern" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Rückwärts" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Befehl" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsole" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "2×Sprungtaste zum Fliegen" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Wegwerfen" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Vorwärts" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventar" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Springen" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Taste bereits in Benutzung" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Steuerung (Falls dieses Menü versagt, entfernen Sie Sachen aus minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "Benutzen = runterklettern" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "2×Sprungtaste zum Fliegen" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Taste bereits in Benutzung" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "Taste drücken" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Vorwärts" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Rückwärts" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Links" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Rechts" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Benutzen" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Springen" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Schleichen" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Wegwerfen" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventar" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Befehl" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konsole" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Flugmodus" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Schnellmodus" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "Kinomodus" - -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "Geistmodus" - -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Weite Sicht" - -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "Stack ausgeben" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Altes Passwort" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Weite Sicht" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Neues Passwort" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Rechts" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Passwort bestätigen" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Schleichen" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Kinomodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Schnellmodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Flugmodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Geistmodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Benutzen" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Taste drücken" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Ändern" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Passwort bestätigen" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Neues Passwort" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Altes Passwort" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Passwörter stimmen nicht überein!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Tonlautstärke: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Zurück" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Linke Taste" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Tonlautstärke: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Mittlere Taste" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Rechte Taste" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X-Knopf 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Rücktaste" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Clear" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Eingabe" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X-Knopf 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Feststellen" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Strg" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menü" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Umsch." - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Ende" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Pos1" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Bild runter" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Bild hoch" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Leertaste" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Runter" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Ausführen" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Druck" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Hoch" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Hilfe" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Einfg" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Druck" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Win links" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Ziffernblock 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Ziffernblock 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Win rechts" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Schlaf" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Ziffernblock 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Ziffernblock 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Ziffernblock 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Ziffernblock 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Ziffernblock 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Ziffernblock 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Ziffernblock *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Ziffernblock +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Ziffernblock -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Ziffernblock /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Ziffernblock 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Ziffernblock 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Rollen" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Umsch. links" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Umsch. rechts" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Strg links" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Alt" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Strg rechts" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Alt Gr" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Komma" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punkt" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Rücktaste" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Feststellen" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Clear" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Strg" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Runter" + +#: src/keycode.cpp +msgid "End" +msgstr "Ende" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Ausführen" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Hilfe" + +#: src/keycode.cpp +msgid "Home" +msgstr "Pos1" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Einfg" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Linke Taste" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Strg links" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Alt" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Umsch. links" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Win links" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Mittlere Taste" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Bild runter" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Ziffernblock *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Ziffernblock +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Ziffernblock -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Ziffernblock /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Ziffernblock 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Ziffernblock 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Ziffernblock 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Ziffernblock 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Ziffernblock 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Ziffernblock 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Ziffernblock 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Ziffernblock 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Ziffernblock 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Ziffernblock 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punkt" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Druck" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Bild hoch" + +#: src/keycode.cpp +msgid "Return" +msgstr "Eingabe" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Rechte Taste" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Strg rechts" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Alt Gr" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Umsch. rechts" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Win rechts" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Rollen" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Umsch." + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Schlaf" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Druck" + +#: src/keycode.cpp +msgid "Space" +msgstr "Leertaste" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Hoch" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X-Knopf 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X-Knopf 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Downloading" -#~ msgstr "Lade herunter" +#~ msgid "Fly mode" +#~ msgstr "Flugmodus" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid " KB/s" +#~ msgstr " KB/s" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotroper Filter" +#~ msgid " MB/s" +#~ msgstr " MB/s" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen" +#~ msgid "Game Name" +#~ msgstr "Spielname" -#~ msgid "is required by:" -#~ msgstr "wird benötigt von:" +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren" -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguration gespeichert. " +#~ msgid "GAMES" +#~ msgstr "SPIELE" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Warnung: Konfiguration nicht konsistent. " +#~ msgid "Games" +#~ msgstr "Spiele" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen" +#~ msgid "Mods:" +#~ msgstr "Mods:" -#~ msgid "Multiplayer" -#~ msgstr "Mehrspieler" +#~ msgid "edit game" +#~ msgstr "Spiel ändern" -#~ msgid "Advanced" -#~ msgstr "Erweitert" +#~ msgid "new game" +#~ msgstr "neues Spiel" -#~ msgid "Show Public" -#~ msgstr "Zeige öffentliche" +#~ msgid "EDIT GAME" +#~ msgstr "SPIEL ÄNDERN" -#~ msgid "Show Favorites" -#~ msgstr "Zeige Favoriten" +#~ msgid "Remove selected mod" +#~ msgstr "Ausgewählte Mod löschen" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten." +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Mod hinzufügen" -#~ msgid "Create world" -#~ msgstr "Welt erstellen" +#~ msgid "CLIENT" +#~ msgstr "CLIENT" -#~ msgid "Address required." -#~ msgstr "Adresse benötigt." +#~ msgid "Favorites:" +#~ msgstr "Favoriten:" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt" +#~ msgid "START SERVER" +#~ msgstr "SERVER STARTEN" -#~ msgid "Files to be deleted" -#~ msgstr "Zu löschende Dateien" +#~ msgid "Name" +#~ msgstr "Name" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden" +#~ msgid "Password" +#~ msgstr "Passwort" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt" +#~ msgid "SETTINGS" +#~ msgstr "EINSTELLUNGEN" -#~ msgid "Failed to delete all world files" -#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden" +#~ msgid "Preload item visuals" +#~ msgstr "Lade Inventarbilder vor" + +#~ msgid "Finite Liquid" +#~ msgstr "Endliches Wasser" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "EINZELSPIELER" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTUREN PAKETE" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "Add mod:" +#~ msgstr "Modifikation hinzufügen:" + +#~ msgid "Local install" +#~ msgstr "Lokale Install." + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n" +#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Warnung: Einige konfigurierte Mods fehlen.\n" +#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert " +#~ "wird. " + +#~ msgid "KEYBINDINGS" +#~ msgstr "TASTEN EINST." + +#~ msgid "Delete map" +#~ msgstr "Karte löschen" #~ msgid "" #~ "Default Controls:\n" @@ -1262,101 +1326,71 @@ msgstr "Zoom" #~ "- I: Inventar\n" #~ "- T: Chat\n" -#~ msgid "Delete map" -#~ msgstr "Karte löschen" +#~ msgid "Failed to delete all world files" +#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden" -#~ msgid "KEYBINDINGS" -#~ msgstr "TASTEN EINST." +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Warnung: Einige konfigurierte Mods fehlen.\n" -#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert " -#~ "wird. " +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n" -#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. " +#~ msgid "Files to be deleted" +#~ msgstr "Zu löschende Dateien" -#~ msgid "Local install" -#~ msgstr "Lokale Install." +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt" -#~ msgid "Add mod:" -#~ msgstr "Modifikation hinzufügen:" +#~ msgid "Address required." +#~ msgstr "Adresse benötigt." -#~ msgid "MODS" -#~ msgstr "MODS" +#~ msgid "Create world" +#~ msgstr "Welt erstellen" -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTUREN PAKETE" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten." -#~ msgid "SINGLE PLAYER" -#~ msgstr "EINZELSPIELER" +#~ msgid "Show Favorites" +#~ msgstr "Zeige Favoriten" -#~ msgid "Finite Liquid" -#~ msgstr "Endliches Wasser" +#~ msgid "Show Public" +#~ msgstr "Zeige öffentliche" -#~ msgid "Preload item visuals" -#~ msgstr "Lade Inventarbilder vor" +#~ msgid "Advanced" +#~ msgstr "Erweitert" -#~ msgid "SETTINGS" -#~ msgstr "EINSTELLUNGEN" +#~ msgid "Multiplayer" +#~ msgstr "Mehrspieler" -#~ msgid "Password" -#~ msgstr "Passwort" +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen" -#~ msgid "Name" -#~ msgstr "Name" +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Warnung: Konfiguration nicht konsistent. " -#~ msgid "START SERVER" -#~ msgstr "SERVER STARTEN" +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguration gespeichert. " -#~ msgid "Favorites:" -#~ msgstr "Favoriten:" +#~ msgid "is required by:" +#~ msgstr "wird benötigt von:" -#~ msgid "CLIENT" -#~ msgstr "CLIENT" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Mod hinzufügen" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotroper Filter" -#~ msgid "Remove selected mod" -#~ msgstr "Ausgewählte Mod löschen" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" -#~ msgid "EDIT GAME" -#~ msgstr "SPIEL ÄNDERN" +#~ msgid "Downloading" +#~ msgstr "Lade herunter" -#~ msgid "new game" -#~ msgstr "neues Spiel" +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Neustart nach Ändern des Treibers erforderlich" -#~ msgid "edit game" -#~ msgstr "Spiel ändern" +#~ msgid "Rendering:" +#~ msgstr "Rendering:" -#~ msgid "Mods:" -#~ msgstr "Mods:" - -#~ msgid "Games" -#~ msgstr "Spiele" - -#~ msgid "GAMES" -#~ msgstr "SPIELE" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren" - -#~ msgid "Game Name" -#~ msgstr "Spielname" - -#~ msgid " MB/s" -#~ msgstr " MB/s" - -#~ msgid " KB/s" -#~ msgstr " KB/s" - -#~ msgid "Fly mode" -#~ msgstr "Flugmodus" +#~ msgid "Online mod repository" +#~ msgstr "Online-Mod-Archiv" diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 20455e84d..a85d06a23 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-10 17:14+0200\n" "Last-Translator: Tim \n" -"Language-Team: Esperanto " -"\n" +"Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,163 +19,179 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Eraro okazis en Lua skripto, kiel modifo:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Eraro okazis:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Ĉefmenuo" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Bone" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Konekti" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Ŝargas…" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "Provu reŝalti la publikan serviloliston kaj kontrolu vian retkonekton." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Mondo:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Kaŝu ludon" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Kaŝu modifarojn" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Modifo:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Dependas:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Konservi" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Nuligi" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Ŝaltu modifaron" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dependas:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Malŝaltu modifaron" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "ŝaltita" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Ŝaltu modifaron" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Ŝaltu ĉiujn" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Monda nomo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Fontnombro" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Kaŝu ludon" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Mondogenerilo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Kaŝu modifarojn" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Ludo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Modifo:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Krei" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Konservi" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Neniu instalantaj subludoj." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mondo:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Elŝutu ludon el minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ŝaltita" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Averto: La minimuma programista testo estas intencita por programistoj." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Elŝutu subludon, kiel minetest_game, el minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Mondo nomata \"$1\" jam ekzistas" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Krei" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Elŝutu subludon, kiel minetest_game, el minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Elŝutu ludon el minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Ludo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Mondogenerilo" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Neniu mondonomo donitas aŭ neniu ludon elektitas" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Fontnombro" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" +"Averto: La minimuma programista testo estas intencita por programistoj." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Monda nomo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Neniu instalantaj subludoj." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Ĉu vi certas forigi \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Jes" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Ne, memkompreneble!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: fiaskis forigi \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: malvalida modifo-dosierindiko \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Ne, memkompreneble!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Jes" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Ĉu forigi mondon \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ne" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Alinomi modifaron:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Akcepti" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Instali modifon: dosiero \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Alinomi modifaron:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -183,452 +199,510 @@ msgstr "" "\n" "Instali Modifon: malsubtenata dosiertipo \"$1\" aŭ rompiĝata arkivo" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Fiaskis instali $1 al $2" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Instali modifon: Ne povis trovi ĝustan dosierujan nomon por modifaro $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instali modifon: dosiero \"$1\"" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "Instali modifon: Ne povis trovi veran modifonomon por $1" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Neordigita" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" +"Instali modifon: Ne povis trovi ĝustan dosierujan nomon por modifaro $1" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Serĉi" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Elŝutas $1, bonvolu atendi…" - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Instalis sukcese:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Konciza nomo:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Takso" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Instali denove" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instali" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Fermi" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Elŝutas $1, bonvolu atendi…" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instali" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Paĝo $1 de $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Kontribuantaro" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Takso" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Kernprogramistoj" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Serĉi" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Konciza nomo:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Instalis sukcese:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Neordigita" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Instali denove" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktivaj kontribuistoj" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Eksaj kernprogramistoj" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Kernprogramistoj" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Kontribuantaro" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Eksaj kontribuistoj" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Eksaj kernprogramistoj" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Instalantaj modifoj:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Interreta modifo-deponejo" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Neniu modifa priskribo disponeblas" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Modifaj informoj:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Alinomi" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Malinstali selektan modifaron" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Malinstali selektan modifo" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selekti modifan dosieron:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Modifoj" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Neniu modifa priskribo disponeblas" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Alinomi" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selekti modifan dosieron:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Malinstali selektan modifo" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Malinstali selektan modifaron" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adreso / Pordo:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Nomo / Pasvorto:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Publika servilolisto" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Forigi" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Konekti" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Kreiva reĝimo" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Damaĝo ŝaltitas" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "Dueloj ŝaltitas" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Kliento" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nova" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Konekti" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Agordi" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Startigi ludon" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Elektu mondon:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Kreiva reĝimo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Ŝalti damaĝon" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Damaĝo ŝaltitas" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publika" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Forigi" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nomo/Pasvorto" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Nomo / Pasvorto:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Publika servilolisto" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Dueloj ŝaltitas" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Asocianta adreso" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Pordo" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Agordi" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Servila pordo" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreiva reĝimo" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Ŝalti damaĝon" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nomo/Pasvorto" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nova" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Neniu mondo kreintas aŭ selektantas!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Pordo" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publika" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Elektu mondon:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servilo" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Opakaj foliaĵoj" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Servila pordo" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Simplaj foliaĵoj" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Startigi ludon" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Ŝikaj foliaĵoj" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Neniu filtrilo" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Bilineara filtrilo" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Triineara filtrilo" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Neniu Mipmapo" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Mipmapo" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmapo + Malizotropa filtrilo" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Ĉu vi certas, ke vi volas nuligi vian solludantan mondon?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Ne!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Glatiga lumo" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Ŝalti partiklojn" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3D nuboj" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Opaka akvo" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Ligata glaco" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Marki nodaĵojn" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Teksturado:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Ĉu vi certas, ke vi volas nuligi vian solludantan mondon?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Bildigo:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bilineara filtrilo" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Restartigu Minetest-on por efikigi pelilan ŝanĝon" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Ombrigiloj" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Ŝanĝi klavojn" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Nuligi solludantan mondon" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "GUI skala faktoro" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Skala faktoro por menuoj " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "Sentuŝa celo" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "Tuŝa sojlo (px)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Protuberancmapado" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Ŝanĝi klavojn" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Ligata glaco" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Ŝalti partiklojn" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Ŝikaj foliaĵoj" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "GUI skala faktoro" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Generi Normalmapojn" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "Mipmapo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmapo + Malizotropa filtrilo" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Neniu filtrilo" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Neniu Mipmapo" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Ne!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Marki nodaĵojn" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Opakaj foliaĵoj" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Opaka akvo" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Paralaksa Okludo" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Ondanta akvo" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Nuligi solludantan mondon" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Ondantaj foliaĵoj" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Skala faktoro por menuoj " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Ondantaj plantoj" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Por uzi ombrigilojn, OpenGL-a pelilo estas necesa." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Agordoj" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Startigi solludanton" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Ombrigiloj" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Simplaj foliaĵoj" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Glatiga lumo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Teksturado:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Por uzi ombrigilojn, OpenGL-a pelilo estas necesa." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "Sentuŝa celo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "Tuŝa sojlo (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Triineara filtrilo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Ondantaj foliaĵoj" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Ondantaj plantoj" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Ondanta akvo" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Agordi modifojn" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Ĉefmenuo" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Startigi solludanton" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Ludi" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Solludanto" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selekti teksturaron:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Neniu informoj disponeblas" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selekti teksturaron:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Teksturaroj" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Ŝargi teksturojn…" +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Konekteraro (ĉu eltempiĝo?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Refaru ombrigilojn…" - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Pravalorizi nodaĵojn…" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Pravalorizi nodaĵojn" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Aĵaj teksturoj…" - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Finita!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Ĉefmenuo" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Pravalorizi nodaĵojn" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Ludanta nomo trolongas." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Pravalorizi nodaĵojn…" -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Aĵaj teksturoj…" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Ŝargi teksturojn…" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Refaru ombrigilojn…" + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Konekteraro (ĉu eltempiĝo?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Ne mondo selektas kaj ne adreso provizatas. Nenion fari." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "Donita monda dosierindiko ne ekzistas. " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Ne povas trovi aŭ ŝuti ludon \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Nevalida ludspecifo." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Ĉefmenuo" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Ne mondo selektas kaj ne adreso provizatas. Nenion fari." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Ludanta nomo trolongas." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Donita monda dosierindiko ne ekzistas. " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Reviziu debug.txt por detaloj." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Ŝanĝi klavojn" + +#: src/game.cpp +msgid "Change Password" +msgstr "Ŝanĝi pasvorton" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Konekti al servilo…" + +#: src/game.cpp +msgid "Continue" msgstr "Daŭrigi" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Vi mortis." +#: src/game.cpp +msgid "Creating client..." +msgstr "Krei klienton…" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Renaskiĝi" +#: src/game.cpp +msgid "Creating server..." +msgstr "Krei servilon…" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Defaŭltaj Klavoj:\n" +"- WASD: movi\n" +"- Spacetklavo: salti/klimi\n" +"- Majuskliga Klavo: lanti/malsupreniri\n" +"- Q: lasi aĵon\n" +"- I: inventaro\n" +"- Muso: turni/rigardi\n" +"- Muso maldekstra: fosi/bati\n" +"- Muso dekstra: lokigi/uzi\n" +"- Musrado: elekti aĵon\n" +"- T: babili\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -656,517 +730,480 @@ msgstr "" "- tuŝi kaj treni, tuŝeti duan fingron\n" " --> lokigi unun aĵon al inventara spaco\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Defaŭltaj Klavoj:\n" -"- WASD: movi\n" -"- Spacetklavo: salti/klimi\n" -"- Majuskliga Klavo: lanti/malsupreniri\n" -"- Q: lasi aĵon\n" -"- I: inventaro\n" -"- Muso: turni/rigardi\n" -"- Muso maldekstra: fosi/bati\n" -"- Muso dekstra: lokigi/uzi\n" -"- Musrado: elekti aĵon\n" -"- T: babili\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Daŭrigi" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Ŝanĝi pasvorton" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Sonintenso" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Ŝanĝi klavojn" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Foriri al menuo" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Foriri al operaciumo" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Malŝaltiĝi…" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Krei servilon…" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Krei klienton…" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Adrestrovili…" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Konekti al servilo…" - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Aĵaj difinoj…" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Nodaĵaj difinoj…" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Medioj…" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Medioj…" + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Reviziu debug.txt por detaloj." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Nodaĵaj difinoj…" -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Daŭrigi" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Adrestrovili…" + +#: src/game.cpp +msgid "Respawn" +msgstr "Renaskiĝi" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Malŝaltiĝi…" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Sonintenso" + +#: src/game.cpp +msgid "You died." +msgstr "Vi mortis." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Enen " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "bone" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Uzi\" = malsupreniri" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Malantaŭen" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Babili" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Komando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konzolo" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Dufoja tuŝeto \"salti\" por baskuli flugreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Lasi" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Antaŭen" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventaro" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Salti" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klavo jam uzatas" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Klavagordoj (Se tiu menuo misfunkcias, forigu agordojn el minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Uzi\" = malsupreniri" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Dufoja tuŝeto \"salti\" por baskuli flugreĝimon" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Klavo jam uzatas" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "premi klavon" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Antaŭen" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Malantaŭen" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Maldekstren" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Dekstren" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Uzi" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Salti" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Lanti" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Lasi" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventaro" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Babili" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Komando" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konzolo" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Baskuli flugreĝimon" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Baskuli rapidreĝimon" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "Baskuli filmreĝimon" - -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "Baskuli nekolizian reĝimon" - -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Ŝanĝi vidodistancon" - -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "Presi stakojn" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Malnova pasvorto" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Ŝanĝi vidodistancon" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nova pasvorto" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Dekstren" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Certigi pasvorton" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Lanti" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Baskuli filmreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Baskuli rapidreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Baskuli flugreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Baskuli nekolizian reĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Uzi" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "premi klavon" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Ŝanĝi" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Certigi pasvorton" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nova pasvorto" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Malnova pasvorto" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Pasvortoj ne kongruas!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Sonintenso: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Foriri" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Maldekstra butono" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Sonintenso: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Meza butono" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Dekstra butono" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X-Butono 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Retro" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Vakigo" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enen" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabo" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X-Butono 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Fiksiĝema klavo" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Stiro" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menuo" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Haltigo" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Majuskligo" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Konverto" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Eskapo" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Finalo" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nekonverto" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Fino" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Hejmen" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Reĝima ŝanĝo" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Sekvanto" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Antaŭe" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Spacetklavo" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Malsupren" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Ruli" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Presi" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Selekto" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Supren" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Helpo" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Enmeti" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Ekrankopio" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Maldekstra fenestro" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Aplikaĵoj" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Klavareto 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Klavareto 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Dekstra fenestro" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Dormo" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Klavareto 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Klavareto 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Klavareto 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Klavareto 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Klavareto 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Klavareto 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Klavareto *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Klavareto +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Klavareto -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Klavareto /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Klavareto 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Klavareto 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Nombra Baskulo" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Ruluma Baskulo" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Maldekstra Majuskligo" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Dekstra Majuskligo" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Maldekstra Stiro" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Maldekstra Menuo" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Dekstra Stiro" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Dekstra Menuo" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Komo" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Minuso" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punkto" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Pluso" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Retro" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Fiksiĝema klavo" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Vakigo" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komo" + +#: src/keycode.cpp +msgid "Control" +msgstr "Stiro" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konverto" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Malsupren" + +#: src/keycode.cpp +msgid "End" +msgstr "Fino" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Viŝi OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Eskapo" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Ruli" + +#: src/keycode.cpp +msgid "Final" +msgstr "Finalo" + +#: src/keycode.cpp +msgid "Help" +msgstr "Helpo" + +#: src/keycode.cpp +msgid "Home" +msgstr "Hejmen" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Enmeti" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Maldekstra butono" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Maldekstra Stiro" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Maldekstra Menuo" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Maldekstra Majuskligo" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Maldekstra fenestro" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menuo" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Meza butono" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minuso" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Reĝima ŝanĝo" + +#: src/keycode.cpp +msgid "Next" +msgstr "Sekvanto" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nekonverto" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Nombra Baskulo" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Klavareto *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Klavareto +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Klavareto -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Klavareto /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Klavareto 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Klavareto 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Klavareto 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Klavareto 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Klavareto 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Klavareto 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Klavareto 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Klavareto 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Klavareto 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Klavareto 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Vakigi" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Haltigo" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punkto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Pluso" + +#: src/keycode.cpp +msgid "Print" +msgstr "Presi" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Antaŭe" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enen" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Dekstra butono" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Dekstra Stiro" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Dekstra Menuo" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Dekstra Majuskligo" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Dekstra fenestro" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Ruluma Baskulo" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selekto" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Majuskligo" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Dormo" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Ekrankopio" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spacetklavo" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabo" + +#: src/keycode.cpp +msgid "Up" +msgstr "Supren" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X-Butono 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X-Butono 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zomo" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Restartigu Minetest-on por efikigi pelilan ŝanĝon" + +#~ msgid "Rendering:" +#~ msgstr "Bildigo:" + +#~ msgid "Online mod repository" +#~ msgstr "Interreta modifo-deponejo" diff --git a/po/es/minetest.po b/po/es/minetest.po index b3f563249..493a43cb0 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-08-26 01:29+0200\n" "Last-Translator: shadowninja \n" -"Language-Team: Spanish " -"\n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,165 +19,182 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Ha ocurrido un error en una script de Lua, como en un mod:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Ha ocurrido un error:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menú principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Aceptar" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Conectar" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Cargando..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." -msgstr "Intenta re-habilitar la lista de servidores públicos y verifica tu conexión a Internet." +msgstr "" +"Intenta re-habilitar la lista de servidores públicos y verifica tu conexión " +"a Internet." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Mundo:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Ocultar juego" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Ocultar contenido mp" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Dependencias:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Guardar" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Activar paquete" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dependencias:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Desactivar paquete" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "Activado" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Activar paquete" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Activar todos" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nombre del mundo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Semilla" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ocultar juego" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generador de mapas" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Ocultar contenido mp" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Juego" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Guardar" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Activado" + +#: 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 "Create" msgstr "Crear" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "No tienes sub-juegos instalados." +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:69 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "Descarga algunos desde minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Juego" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Generador de mapas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Semilla" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" "Advertencia: El juego \"Minimal development test\" está diseñado para " "desarrolladores." -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nombre del mundo" -#: builtin/mainmenu/dlg_create_world.lua:99 -msgid "A world named \"$1\" already exists" -msgstr "Ya existe un mundo llamado \"$1\"" +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "No tienes sub-juegos instalados." -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "¿Realmente desea borrar \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Sí" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "¡No, por su puesto que no!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Error al borrar \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Ruta del mod \"$1\" inválida" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "¡No, por su puesto que no!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Sí" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "¿Eliminar el mundo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "No" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renombrar paquete de mod:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Aceptar" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalar mod: Archivo: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renombrar paquete de mod:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -185,461 +202,517 @@ msgstr "" "\n" "Instalar mod: Formato de archivo \"$1\" no soportado o archivo corrupto" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Fallo al instalar $1 en $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalar mod: Archivo: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalar mod: Imposible encontrar un nombre de archivo adecuado para el " "paquete de mod $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Sin ordenar" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Buscar" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Descargando $1, por favor espere..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Instalado con éxito:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Nombre corto:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Clasificación" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Reinstalar" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalar" - # En el menú principal de mods pone repositorio no tienda. -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Cerrar repositorio" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Descargando $1, por favor espere..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Página $1 de $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Créditos" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Clasificación" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Desarrolladores principales" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Buscar" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Nombre corto:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Instalado con éxito:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Sin ordenar" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Reinstalar" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Colaboradores activos" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Antiguos desarrolladores" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Desarrolladores principales" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Créditos" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Antiguos colaboradores" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Antiguos desarrolladores" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Mods instalados:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repositorio de mods en línea" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "La descripción del mod no está disponible" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Información del mod:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Renombrar" - -# El nombre completo no cabe. -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Desinstalar el paquete selecc." - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Desinstalar el mod seleccionado" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selecciona el fichero del mod:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "La descripción del mod no está disponible" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Renombrar" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selecciona el fichero del mod:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Desinstalar el mod seleccionado" + +# El nombre completo no cabe. +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Desinstalar el paquete selecc." + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Dirección / puerto:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Nombre / contraseña:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Lista de servidores públicos" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Borrar" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Conectar" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Modo creativo" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Daño activado" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP activado" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nuevo" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Conectar" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Configurar" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Iniciar juego" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Selecciona un mundo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Modo creativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Permitir daños" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Daño activado" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Público" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Borrar" -# Los dos puntos son intencionados. -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" msgstr "Nombre / contraseña:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Lista de servidores públicos" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP activado" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Asociar dirección" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Puerto" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurar" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Puerto del servidor:" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modo creativo" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Permitir daños" + +# Los dos puntos son intencionados. +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nombre / contraseña:" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nuevo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Puerto" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Público" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selecciona un mundo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servidor" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Hojas opacas" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Puerto del servidor:" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Hojas simples" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Iniciar juego" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Hojas elegantes" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Sin filtro" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Filtro bi-lineal" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Filtro tri-lineal" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Sin Mipmap" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Mipmap" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap + Filtro aniso." - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "¡¡¡No!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Iluminación suave" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Habilitar partículas" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "Nubes 3D" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Agua opaca" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Vidrios conectados" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Resaltar nodos" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Texturizado:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Renderizado:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Filtro bi-lineal" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Reinicia minetest para que los cambios en el controlador tengan efecto" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Sombreadores" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Configurar teclas" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Reiniciar mundo de un jugador" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "Factor de escala (GUI)" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Factor de escala aplicado a los elementos del menú: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "Tocar para interactuar" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "Umbral táctil (px)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Mapeado de relieve" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Configurar teclas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Vidrios conectados" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Habilitar partículas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Hojas elegantes" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "Factor de escala (GUI)" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Generar mapas normales" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmap + Filtro aniso." + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Sin filtro" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Sin Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "¡¡¡No!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Resaltar nodos" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Hojas opacas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Agua opaca" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Oclusión de paralaje" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Oleaje en el agua" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Reiniciar mundo de un jugador" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Movimiento de hojas" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Factor de escala aplicado a los elementos del menú: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Movimiento de plantas" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Configuración" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Comenzar un jugador" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Sombreadores" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Hojas simples" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Iluminación suave" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Texturizado:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "Tocar para interactuar" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "Umbral táctil (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Filtro tri-lineal" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Movimiento de hojas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Movimiento de plantas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Oleaje en el agua" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Configurar mods" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Principal" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Comenzar un jugador" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jugar" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Un jugador" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Seleccione un paquete de texturas:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Sin información disponible" +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Seleccione un paquete de texturas:" + # No cabe "Paquetes de texturas". -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Texturas" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Cargando texturas..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Error de conexión (¿tiempo agotado?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Reconstruyendo sombreadores..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Inicializando nodos..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Inicializando nodos" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Texturas de objetos..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "¡Completado!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menú principal" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Inicializando nodos" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Nombre de jugador demasiado largo." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Inicializando nodos..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Texturas de objetos..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Cargando texturas..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Reconstruyendo sombreadores..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Error de conexión (¿tiempo agotado?)" -#: src/client/clientlauncher.cpp:425 +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "No se puede encontrar o cargar el juego \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Juego especificado no válido." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menú principal" + +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" "No se seleccionó el mundo y no se ha especificado una dirección. Nada que " "hacer." -#: src/client/clientlauncher.cpp:432 +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nombre de jugador demasiado largo." + +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "La ruta del mundo especificada no existe: " -#: src/client/clientlauncher.cpp:441 -msgid "Could not find or load game \"" -msgstr "No se puede encontrar o cargar el juego \"" - -#: src/client/clientlauncher.cpp:459 -msgid "Invalid gamespec." -msgstr "Juego especificado no válido." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Consulta debug.txt para obtener más detalles." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Configurar teclas" + +#: src/game.cpp +msgid "Change Password" +msgstr "Cambiar contraseña" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Conectando al servidor..." + +#: src/game.cpp +msgid "Continue" msgstr "Continuar" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Has muerto." +#: src/game.cpp +msgid "Creating client..." +msgstr "Creando cliente..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Revivir" +#: src/game.cpp +msgid "Creating server..." +msgstr "Creando servidor..." -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controles predeterminados:\n" +"- WASD: moverse\n" +"- Espacio: saltar/subir\n" +"- Mayús.: puntillas/bajar\n" +"- Q: soltar objeto\n" +"- I: inventario\n" +"- Ratón: girar/mirar\n" +"- Ratón izq.: cavar/golpear\n" +"- Ratón der.: colocar/usar\n" +"- Ratón rueda: elegir objeto\n" +"- T: chat\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -667,528 +740,492 @@ msgstr "" "- toque y arrastrar, toque con 2 dedos:\n" " -->colocar solamente un objeto\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Controles predeterminados:\n" -"- WASD: moverse\n" -"- Espacio: saltar/subir\n" -"- Mayús.: puntillas/bajar\n" -"- Q: soltar objeto\n" -"- I: inventario\n" -"- Ratón: girar/mirar\n" -"- Ratón izq.: cavar/golpear\n" -"- Ratón der.: colocar/usar\n" -"- Ratón rueda: elegir objeto\n" -"- T: chat\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Continuar" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Cambiar contraseña" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volumen del sonido" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Configurar teclas" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Salir al menú" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Salir al S.O." -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Cerrando..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Creando servidor..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Creando cliente..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Resolviendo dirección..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Conectando al servidor..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Definiciones de objetos..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definiciones de nodos..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Consulta debug.txt para obtener más detalles." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definiciones de nodos..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Continuar" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Resolviendo dirección..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Revivir" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Cerrando..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volumen del sonido" + +#: src/game.cpp +msgid "You died." +msgstr "Has muerto." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Ingresar " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "aceptar" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Usar\" = Descender" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Atrás" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Consola" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Pulsar dos veces \"saltar\" para volar" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Tirar" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Adelante" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventario" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Saltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "La tecla ya se está utilizando" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Combinaciones de teclas. (Si este menú da error, elimina líneas en minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Usar\" = Descender" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Pulsar dos veces \"saltar\" para volar" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "La tecla ya se está utilizando" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "pulsa una tecla" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Adelante" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Atrás" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Izquierda" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Derecha" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Usar" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Saltar" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Caminar" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Tirar" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventario" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Comando" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Consola" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Activar volar" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Activar rápido" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "Activar cinemático" - -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "Activar noclip" - -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Seleccionar distancia" - -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "Imprimir pilas" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Contraseña anterior" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Seleccionar distancia" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Contraseña nueva" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Derecha" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confirmar contraseña" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Caminar" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Activar cinemático" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Activar rápido" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Activar volar" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Activar noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usar" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "pulsa una tecla" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Cambiar" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar contraseña" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Contraseña nueva" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Contraseña anterior" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "¡Las contraseñas no coinciden!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volúmen del sonido: " - # Es en el menú de sonido. Salir suena muy fuerte. -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Cerrar" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Botón izquierdo" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volúmen del sonido: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Botón central" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Botón derecho" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X Botón 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Atrás" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Limpiar" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Retorno" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabulador" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Botón 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Bloq Mayús" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menú" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pausa" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convertir" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "No convertir" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Fin" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Inicio" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Cambio de modo" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Siguiente" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Anterior" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Espacio" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Abajo" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Ejecutar" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Captura" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Seleccionar" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Arriba" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Ayuda" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Introducir" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Captura de pantalla" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Win izq." - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Aplicaciones" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Win der." - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Suspender" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Bloq Núm" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Bloq Despl" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Shift izq." - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Shift der." - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Control izq." - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Menú izq." - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Control der." - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Menú der." - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Coma" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Menos" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punto" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Más" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Atrás" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Bloq Mayús" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Limpiar" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Coma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convertir" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Abajo" + +#: src/keycode.cpp +msgid "End" +msgstr "Fin" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Borrar OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Ejecutar" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ayuda" + +#: src/keycode.cpp +msgid "Home" +msgstr "Inicio" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Introducir" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Botón izquierdo" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Control izq." + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menú izq." + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift izq." + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Win izq." + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menú" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Botón central" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Menos" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Cambio de modo" + +#: src/keycode.cpp +msgid "Next" +msgstr "Siguiente" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "No convertir" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Bloq Núm" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Limpiar OEM" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pausa" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Más" + +#: src/keycode.cpp +msgid "Print" +msgstr "Captura" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Anterior" + +#: src/keycode.cpp +msgid "Return" +msgstr "Retorno" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Botón derecho" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Control der." + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menú der." + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift der." + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Win der." + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Bloq Despl" + +#: src/keycode.cpp +msgid "Select" +msgstr "Seleccionar" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Suspender" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Captura de pantalla" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espacio" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulador" + +#: src/keycode.cpp +msgid "Up" +msgstr "Arriba" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Botón 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Botón 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid " MB/s" -#~ msgstr " MB/s" +#~ msgid "Fly mode" +#~ msgstr "Modo vuelo" #~ msgid " KB/s" #~ msgstr " KB/s" -#~ msgid "Fly mode" -#~ msgstr "Modo vuelo" +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "" +#~ "Reinicia minetest para que los cambios en el controlador tengan efecto" + +#~ msgid "Rendering:" +#~ msgstr "Renderizado:" + +#~ msgid "Online mod repository" +#~ msgstr "Repositorio de mods en línea" diff --git a/po/et/minetest.po b/po/et/minetest.po index 561b69a43..f8f4d5c04 100644 --- a/po/et/minetest.po +++ b/po/et/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-12-18 21:28+0200\n" "Last-Translator: Jabo Babo \n" "Language-Team: LANGUAGE \n" @@ -18,647 +18,708 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menüü" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "kinnitama" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Liitu" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -#, fuzzy -msgid "World:" -msgstr "Vali maailm:" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Tühista" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -#, fuzzy -msgid "Hide Game" -msgstr "Mäng" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "Vajab:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvesta" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Tühista" - -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Lülita kõik sisse" - -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Lülita kõik välja" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "Sisse lülitatud" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Lülita kõik sisse" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Lülita kõik sisse" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Maailma nimi" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy -msgid "Mapgen" -msgstr "Põlvkonna kaardid" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +msgid "Hide Game" msgstr "Mäng" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Loo" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvesta" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Vali maailm:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Sisse lülitatud" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Maailma loomine ebaõnnestus: Samanimeline maailm on juba olemas" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Loo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Mäng" + +#: builtin/mainmenu/dlg_create_world.lua +#, fuzzy +msgid "Mapgen" +msgstr "Põlvkonna kaardid" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "No nimi või no mäng valitud" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Maailma nimi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Jah" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Jah" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Kustuta maailm: \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ei" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Nõustu" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Maailma initsialiseerimine ebaõnnestus" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Maailma nimi" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Tänuavaldused" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Põhiline arendaja" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Co-arendaja" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Põhiline arendaja" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Tänuavaldused" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Early arendajad" + +#: builtin/mainmenu/tab_credits.lua #, fuzzy msgid "Previous Core Developers" msgstr "Põhiline arendaja" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "Early arendajad" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Vali maailm:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "IP/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Nimi/Parool" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, fuzzy -msgid "Public Serverlist" -msgstr "Avatud serverite nimekiri:" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Kustuta" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Liitu" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Kujunduslik mängumood" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "Sisse lülitatud" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Kustuta" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nimi/Parool" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Public Serverlist" +msgstr "Avatud serverite nimekiri:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "Sisse lülitatud" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Uus" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Konfigureeri" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Alusta mängu" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Vali maailm:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Kujunduslik mängumood" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Lülita valu sisse" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Avalik" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nimi/Parool" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Konfigureeri" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kujunduslik mängumood" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Lülita valu sisse" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nimi/Parool" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Uus" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "No nimi või no mäng valitud" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Avalik" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Vali maailm:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Läbipaistmatu vesi" - -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Uhked puud" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Alusta mängu" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "3D pilved" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 #, fuzzy msgid "Bilinear Filter" msgstr "Bi-lineaarsed Filtreerimine" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Tri-Linear Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Ilus valgustus" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Lülita osakesed sisse" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "3D pilved" - -#: builtin/mainmenu/tab_settings.lua:208 -#, fuzzy -msgid "Opaque Water" -msgstr "Läbipaistmatu vesi" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Liitu" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Varjutajad" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Vaheta nuppe" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Üksikmäng" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Väga hea kvaliteet" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Vaheta nuppe" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Liitu" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Lülita osakesed sisse" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Uhked puud" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Läbipaistmatu vesi" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Water" +msgstr "Läbipaistmatu vesi" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Üksikmäng" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Sätted" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Üksikmäng" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Varjutajad" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Ilus valgustus" + +#: 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 "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +msgstr "Tri-Linear Filtreerimine" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Konfigureeri" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menüü" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Üksikmäng" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Mängi" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Üksikmäng" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Vali graafika:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Informatsioon ei ole kättesaadav" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Vali graafika:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Vali graafika:" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "" +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Ühenduse viga (Aeg otsas?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "" - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "" - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menüü" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." +#: src/client.cpp +msgid "Initializing nodes" msgstr "" -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Ühenduse viga (Aeg otsas?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Ei leia ega suuda jätkata mängu \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Vale mängu ID." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menüü" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Vaata debug.txt info jaoks." + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Vaheta nuppe" + +#: src/game.cpp +msgid "Change Password" +msgstr "Vaheta parooli" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" msgstr "Jätka" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Sa surid." +#: src/game.cpp +msgid "Creating client..." +msgstr "" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Ärka ellu" +#: src/game.cpp +msgid "Creating server..." +msgstr "" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -674,573 +735,539 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Jätka" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Vaheta parooli" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Hääle volüüm" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Vaheta nuppe" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Välju menüüsse" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Välju mängust" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "" - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -"\n" -"Vaata debug.txt info jaoks." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Jätka" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "Ärka ellu" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Hääle volüüm" + +#: src/game.cpp +msgid "You died." +msgstr "Sa surid." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Tegevus\" = Roni alla" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Tagasi" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Jututuba" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Käsklus" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsool" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Viska maha" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Edasi" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Seljakott" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Hüppamine" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Nupp juba kasutuses" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Nupusätted. (Kui see menüü sassi läheb, siis kustuta asju failist minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Tegevus\" = Roni alla" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Nupp juba kasutuses" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "Vajuta nuppu" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Edasi" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Tagasi" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Vasakule" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Prindi kogused" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Kauguse valik" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Paremale" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Tegevus" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Hüppamine" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Hiilimine" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Viska maha" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Seljakott" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Jututuba" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Käsklus" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konsool" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Lülita lendamine sisse" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Lülita kiirus sisse" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Lülita kiirus sisse" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Lülita kiirus sisse" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Lülita lendamine sisse" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Lülita läbi seinte minek sisse" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Kauguse valik" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Tegevus" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Prindi kogused" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Vajuta nuppu" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Vana parool" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Uus parool" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Kinnita parooli" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Muuda" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Kinnita parooli" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Uus parool" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vana parool" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Paroolid ei ole samad!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Hääle Volüüm: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Välju" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Vasak nupp" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Hääle Volüüm: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Keskmine nupp" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Parem nupp" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X Nuppp 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Tagasi" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Tühjenda" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Reavahetus" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Nupp 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "CTRL" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menüü" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Paus" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift," - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Konverteeri" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Põgene" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Viimane" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Konverteerimatta" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Lõpeta" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Kodu" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Moodi vahetamine" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Järgmine" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Eelnev" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Tühik" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Alla" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Soorita" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Prindi" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Vali" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Üles" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Abi" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Sisesta" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Mängupilt" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Vasak Windowsi nupp" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Aplikatsioonid" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numbrilaual 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numbrilaual 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Parem Windowsi nupp" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Maga" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numbrilaual 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numbrilaual 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numbrilaual 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numbrilaual 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numbrilaual 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numbrilaual 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numbrilaual *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numbrilaual +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numbrilaual -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numbrilaual /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numbrilaual 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numbrilaual 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Numbrilaual Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll lukk" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Vasak Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Parem Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Vasak CTRL" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Vasak Menüü" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Parem CTRL" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Parem Menüü" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Koma" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Miinus" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punkt" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Pluss" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Tagasi" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Tühjenda" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Koma" + +#: src/keycode.cpp +msgid "Control" +msgstr "CTRL" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konverteeri" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Alla" + +#: src/keycode.cpp +msgid "End" +msgstr "Lõpeta" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Kustuta OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Põgene" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Soorita" + +#: src/keycode.cpp +msgid "Final" +msgstr "Viimane" + +#: src/keycode.cpp +msgid "Help" +msgstr "Abi" + +#: src/keycode.cpp +msgid "Home" +msgstr "Kodu" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Sisesta" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Vasak nupp" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Vasak CTRL" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Vasak Menüü" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Vasak Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Vasak Windowsi nupp" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menüü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Keskmine nupp" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Miinus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Moodi vahetamine" + +#: src/keycode.cpp +msgid "Next" +msgstr "Järgmine" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Konverteerimatta" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Numbrilaual Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numbrilaual *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numbrilaual +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numbrilaual -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numbrilaual /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numbrilaual 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numbrilaual 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numbrilaual 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numbrilaual 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numbrilaual 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numbrilaual 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numbrilaual 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numbrilaual 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numbrilaual 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numbrilaual 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Tühi" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Paus" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punkt" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Pluss" + +#: src/keycode.cpp +msgid "Print" +msgstr "Prindi" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Eelnev" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Parem nupp" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Parem CTRL" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Parem Menüü" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Parem Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Parem Windowsi nupp" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll lukk" + +#: src/keycode.cpp +msgid "Select" +msgstr "Vali" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift," + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Maga" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Mängupilt" + +#: src/keycode.cpp +msgid "Space" +msgstr "Tühik" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Reavahetus" + +#: src/keycode.cpp +msgid "Up" +msgstr "Üles" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Nuppp 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Nupp 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Suumi" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Mäng" +#~ msgid "Downloading" +#~ msgstr "Alla" -#~ msgid "GAMES" -#~ msgstr "MÄNGUD" +#~ msgid "Mip-Mapping" +#~ msgstr "Väga hea kvaliteet" -#~ msgid "Games" -#~ msgstr "Mängud" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotroopne Filtreerimine" -#, fuzzy -#~ msgid "edit game" -#~ msgstr "Muuda mängu" - -#~ msgid "new game" -#~ msgstr "uus mängu" - -#~ msgid "EDIT GAME" -#~ msgstr "MUUDA MÄNGU" - -#, fuzzy -#~ msgid "Remove selected mod" -#~ msgstr "Eemalda valitud muutus" - -#, fuzzy -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Lisama muutus" - -#~ msgid "Favorites:" -#~ msgstr "Lemmikud:" - -#~ msgid "Name" -#~ msgstr "Nimi" - -#~ msgid "Password" -#~ msgstr "Parool" - -#~ msgid "SETTINGS" -#~ msgstr "Seaded" - -#~ msgid "Preload item visuals" -#~ msgstr "Lae asjade visuaale" - -#, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Löppev vedelik" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n" -#~ "Need lülitatakse sisse kohe pärast sätete salvestamist." +#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut " +#~ "asja" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n" -#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon." +#~ msgid "is required by:" +#~ msgstr "Seda vajavad:" + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguratsioon salvestatud. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Hoiatus: Konfiguratsioon pole kindel." + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti" + +#~ msgid "Multiplayer" +#~ msgstr "Mitmikmäng" + +#~ msgid "Advanced" +#~ msgstr "Arenenud sätted" + +#~ msgid "Show Public" +#~ msgstr "Näita avalikke" + +#~ msgid "Show Favorites" +#~ msgstr "Näita lemmikuid" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit." + +#~ msgid "Create world" +#~ msgstr "Loo maailm" + +#~ msgid "Address required." +#~ msgstr "IP on vajalkik." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud" + +#~ msgid "Files to be deleted" +#~ msgstr "Failid mida kustutada" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus" #~ msgid "" #~ "Default Controls:\n" @@ -1267,65 +1294,63 @@ msgstr "Suumi" #~ "- ESC: Menüü\n" #~ "- T: Jututupa\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud" - -#~ msgid "Files to be deleted" -#~ msgstr "Failid mida kustutada" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud" - -#~ msgid "Address required." -#~ msgstr "IP on vajalkik." - -#~ msgid "Create world" -#~ msgstr "Loo maailm" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit." - -#~ msgid "Show Favorites" -#~ msgstr "Näita lemmikuid" - -#~ msgid "Show Public" -#~ msgstr "Näita avalikke" - -#~ msgid "Advanced" -#~ msgstr "Arenenud sätted" - -#~ msgid "Multiplayer" -#~ msgstr "Mitmikmäng" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Hoiatus: Konfiguratsioon pole kindel." - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguratsioon salvestatud. " - -#~ msgid "is required by:" -#~ msgstr "Seda vajavad:" - -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " #~ msgstr "" -#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut " -#~ "asja" +#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n" +#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon." -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotroopne Filtreerimine" - -#~ msgid "Mip-Mapping" -#~ msgstr "Väga hea kvaliteet" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n" +#~ "Need lülitatakse sisse kohe pärast sätete salvestamist." #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Alla" +#~ msgid "Finite Liquid" +#~ msgstr "Löppev vedelik" + +#~ msgid "Preload item visuals" +#~ msgstr "Lae asjade visuaale" + +#~ msgid "SETTINGS" +#~ msgstr "Seaded" + +#~ msgid "Password" +#~ msgstr "Parool" + +#~ msgid "Name" +#~ msgstr "Nimi" + +#~ msgid "Favorites:" +#~ msgstr "Lemmikud:" + +#, fuzzy +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Lisama muutus" + +#, fuzzy +#~ msgid "Remove selected mod" +#~ msgstr "Eemalda valitud muutus" + +#~ msgid "EDIT GAME" +#~ msgstr "MUUDA MÄNGU" + +#~ msgid "new game" +#~ msgstr "uus mängu" + +#, fuzzy +#~ msgid "edit game" +#~ msgstr "Muuda mängu" + +#~ msgid "Games" +#~ msgstr "Mängud" + +#~ msgid "GAMES" +#~ msgstr "MÄNGUD" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Mäng" diff --git a/po/fr/minetest.po b/po/fr/minetest.po index b9666ccdf..3e4ef4d9a 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-07-17 22:49+0200\n" "Last-Translator: Jean-Patrick G. \n" -"Language-Team: French " -"\n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,164 +19,179 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Une erreur est survenue avec un script Lua, comme un mod :" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Une erreur est survenue :" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Rejoindre" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Chargement..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Rechargez la liste des serveurs publics et vérifiez votre connexion Internet." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Sélectionner un monde :" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Cacher le jeu" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Cacher le pack de mods" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod :" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Dépend de :" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Enregistrer" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Annuler" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Activer le pack de mods" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dépend de :" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Désactiver le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "activé" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Activer le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Tout activer" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nom du monde" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Graine" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Cacher le jeu" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Générateur de carte" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Cacher le pack de mods" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Jeu" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod :" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Créer" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Enregistrer" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Vous n'avez pas de sous-jeux installés." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Sélectionner un monde :" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Téléchargez-en un depuis minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "activé" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Avertissement : le jeu minimal est fait pour les développeurs." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Téléchargez un sous-jeu, comme minetest_game, depuis minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: 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:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Créer" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Téléchargez un sous-jeu, comme minetest_game, depuis minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Téléchargez-en un depuis minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Jeu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Générateur de carte" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Nom du monde manquant ou aucun jeu sélectionné" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Graine" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Avertissement : le jeu minimal est fait pour les développeurs." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nom du monde" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Vous n'avez pas de sous-jeux installés." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Êtes-vous sûr de vouloir supprimer \"$1\" ?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Oui" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Non, bien sûr que non !" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr : n'a pas pu supprimer \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr : chemin de mod invalide \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Non, bien sûr que non !" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Oui" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Supprimer le monde \"$1\" ?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Non" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renommer le pack de mods :" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accepter" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Installer un mod : fichier : \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renommer le pack de mods :" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -184,475 +199,486 @@ msgstr "" "\n" "Installer un mod : type de fichier non supporté \"$1\" ou archive cassée" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "N'a pas pu installer $1 à $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Installer un mod : fichier : \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Installer un mod : impossible de trouver un nom de dossier valide pour le " "pack de mods $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Non trié" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Rechercher" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Téléchargement de $1, veuillez patienter..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Installé avec succès :" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Nom :" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Note" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Réinstaller" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Installer" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Fermer le store" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Téléchargement de $1, veuillez patienter..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installer" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Page $1 sur $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Crédits" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Note" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Développeurs principaux" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Rechercher" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Nom :" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Installé avec succès :" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Non trié" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Réinstaller" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contributeurs actifs" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Anciens développeurs" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Développeurs principaux" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Crédits" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Anciens contributeurs" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Anciens développeurs" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Mods installés :" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Dépôt de mods en ligne" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Pas de description disponible" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Information du mod :" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Renommer" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Désinstaller le pack de mods" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Désinstaller le mod" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Sélectionner un fichier de mod :" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Pas de description disponible" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Renommer" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Sélectionner un fichier de mod :" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Désinstaller le mod" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Désinstaller le pack de mods" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adresse / Port :" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Nom / Mot de passe :" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Liste de serveurs publics" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Supprimer" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Rejoindre" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Mode créatif" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Dégâts activés" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "Combat activé" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nouveau" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Rejoindre" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Configurer" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Démarrer" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Sélectionner un monde :" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Mode créatif" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Activer les dégâts" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Dégâts activés" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Public" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Supprimer" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nom / Mot de passe" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Nom / Mot de passe :" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Liste de serveurs publics" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Combat activé" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Adresse à assigner" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurer" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port du serveur" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Mode créatif" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Activer les dégâts" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nom / Mot de passe" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nouveau" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Aucun monde créé ou sélectionné !" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Port" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Public" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Sélectionner un monde :" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Serveur" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Arbres minimaux" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port du serveur" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Arbres simples" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Démarrer" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Arbres détaillés" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Aucun filtrage" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Filtrage bilinéaire" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Filtrage trilinéaire" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Sans MIP map" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "MIP mapping" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "MIP map + anisotropie" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Non !" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Lumière douce" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Particules" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "Nuages 3D" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Eau opaque" - -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Verre connecté" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Eclairage des nodes" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Textures :" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Affichage :" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shaders" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Changer les touches" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Réinitialiser le monde" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "Taille des menus" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Taille appliquée aux menus : " - -#: builtin/mainmenu/tab_settings.lua:250 -#, fuzzy -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:256 -#, fuzzy -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Filtrage bilinéaire" + +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Bump mapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Changer les touches" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Verre connecté" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Particules" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Arbres détaillés" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "Taille des menus" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Normal mapping" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "MIP mapping" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "MIP map + anisotropie" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Aucun filtrage" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Sans MIP map" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Non !" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Eclairage des nodes" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Arbres minimaux" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Eau opaque" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Occlusion parallaxe" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Liquides mouvants" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Réinitialiser le monde" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Feuilles mouvantes" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Taille appliquée aux menus : " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Plantes mouvantes" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Réglages" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Démarrer la partie solo" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shaders" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Arbres simples" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Lumière douce" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Textures :" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Filtrage trilinéaire" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Feuilles mouvantes" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Plantes mouvantes" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Liquides mouvants" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Configurer les mods" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Menu principal" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Démarrer la partie solo" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jouer" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Solo" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Sélectionner un pack de textures :" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Pas d'information disponible" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Sélectionner un pack de textures :" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Packs de textures" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Chargement des textures..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Erreur de connexion (perte de connexion ?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Construction des shaders..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Initialisation des nodes..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Initialisation des nodes" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Textures d'objets..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Terminé !" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menu principal" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Initialisation des nodes" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Nom du joueur trop long." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Initialisation des nodes..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Textures d'objets..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Chargement des textures..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Construction des shaders..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Erreur de connexion (perte de connexion ?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "Le chemin du monde spécifié n'existe pas : " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Le jeu \" n'a pas pu être trouvé" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "gamespec invalide." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu principal" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nom du joueur trop long." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Le chemin du monde spécifié n'existe pas : " + +#: src/fontengine.cpp #, fuzzy msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Procéder" - -#: src/game.cpp:1072 -msgid "You died." -msgstr "Vous êtes mort." - -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Ressusciter" - -#: src/game.cpp:1092 -#, fuzzy +#: src/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" +"\n" +"Check debug.txt for details." msgstr "" +"\n" +"Voir debug.txt pour plus d'information." -#: src/game.cpp:1106 +#: src/game.cpp +msgid "Change Keys" +msgstr "Changer les touches" + +#: src/game.cpp +msgid "Change Password" +msgstr "Changer mot de passe" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Connexion au serveur..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuer" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Création du client..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Création du serveur..." + +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -678,585 +704,566 @@ msgstr "" "- Molette souris : sélectionner objet\n" "- T : discuter\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Continuer" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Changer mot de passe" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volume du son" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Changer les touches" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Quitter vers le menu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Quitter le jeu" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Fermeture du jeu..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Création du serveur..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Création du client..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Résolution de l'adresse..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Connexion au serveur..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Définitions d'objets..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Définitions des blocs..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Média..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "Ko/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/game.cpp msgid "MiB/s" msgstr "Mo/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Voir debug.txt pour plus d'information." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Définitions des blocs..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Procéder" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Résolution de l'adresse..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Ressusciter" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Fermeture du jeu..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume du son" + +#: src/game.cpp +msgid "You died." +msgstr "Vous êtes mort." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Entrer " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "ok" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Raccourcis" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Use\" = descendre (escalade)" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Double-appui sur \"saut\" pour voler" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Touche déjà utilisée" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "appuyez sur une touche" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Avancer" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Reculer" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Gauche" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Droite" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Utiliser" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Sauter" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Marcher" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Jeter" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventaire" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Chatter" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Commande" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Console" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Voler" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Double-appui sur \"saut\" pour voler" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Mode rapide" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Jeter" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "Mode cinématique" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avancer" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "Mode sans collision" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventaire" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Distance d'affichage" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Sauter" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Touche déjà utilisée" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "Raccourcis" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Gauche" + +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "Imprimer stacks" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Ancien mot de passe" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Distance d'affichage" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nouveau mot de passe" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Droite" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confirmer mot de passe" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Marcher" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Mode cinématique" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Mode rapide" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Voler" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Mode sans collision" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Utiliser" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "appuyez sur une touche" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Changer" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmer mot de passe" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nouveau mot de passe" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Ancien mot de passe" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Les mots de passe ne correspondent pas !" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volume du son : " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Quitter" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Bouton gauche" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume du son : " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Bouton du milieu" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Bouton droit" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Bouton X 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Retour en arrière" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Vider" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Retour" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabulation" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Bouton X 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Verr Maj" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Contrôle" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convertir" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Échap" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Fin" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Origine" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Changer de mode" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Suivant" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Précédent" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Espace" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Bas" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Exécuter" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Imprimer" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Sélectionner" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Haut" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Aide" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insérer" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Capture d'écran" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Windows gauche" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Applications" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Pavé num. 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Pavé num. 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Windows droite" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Mise en veille" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Pavé num. 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Pavé num. 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Pavé num. 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Pavé num. 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Pavé num. 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Pavé num. 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Pavé num. *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Pavé num. +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Pavé num. -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Pavé num. /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Pavé num. 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Pavé num. 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Verr Num" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Verr. défilement" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Shift gauche" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Shift droite" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Contrôle gauche" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Menu gauche" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Contrôle droite" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Menu droite" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Virgule" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Moins" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Point" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attente" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Retour en arrière" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Verr Maj" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Vider" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgule" + +#: src/keycode.cpp +msgid "Control" +msgstr "Contrôle" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convertir" + +#: src/keycode.cpp msgid "CrSel" msgstr "Vider sélection" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Bas" + +#: src/keycode.cpp +msgid "End" +msgstr "Fin" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Écraser l'OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Échap" + +#: src/keycode.cpp #, fuzzy msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Exécuter" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Aide" + +#: src/keycode.cpp +msgid "Home" +msgstr "Origine" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insérer" + +#: src/keycode.cpp +#, fuzzy +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +#, fuzzy +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +#, fuzzy +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Bouton gauche" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Contrôle gauche" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menu gauche" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift gauche" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Windows gauche" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Bouton du milieu" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Moins" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Changer de mode" + +#: src/keycode.cpp +msgid "Next" +msgstr "Suivant" + +#: src/keycode.cpp +#, fuzzy +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Verr Num" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Pavé num. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Pavé num. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Pavé num. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Pavé num. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Pavé num. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Pavé num. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Pavé num. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Pavé num. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Pavé num. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Pavé num. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Pavé num. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Pavé num. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Pavé num. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Pavé num. 9" + +#: src/keycode.cpp #, fuzzy msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Point" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Imprimer" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Précédent" + +#: src/keycode.cpp +msgid "Return" +msgstr "Retour" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Bouton droit" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Contrôle droite" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menu droite" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift droite" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Windows droite" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Verr. défilement" + +#: src/keycode.cpp +msgid "Select" +msgstr "Sélectionner" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Mise en veille" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Capture d'écran" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espace" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulation" + +#: src/keycode.cpp +msgid "Up" +msgstr "Haut" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Bouton X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Bouton X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoomer" -#~ msgid "Game Name" -#~ msgstr "Nom du jeu" +#~ msgid "Downloading" +#~ msgstr "Téléchargement" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\"" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-mapping" -#~ msgid "GAMES" -#~ msgstr "JEUX" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtrage anisotrope" -#~ msgid "Games" -#~ msgstr "Jeux" +#~ msgid "Fly mode" +#~ msgstr "Voler" -#~ msgid "Mods:" -#~ msgstr "Mods :" +#~ msgid " KB/s" +#~ msgstr " Ko/s" -#~ msgid "edit game" -#~ msgstr "éditer le jeu" +#~ msgid " MB/s" +#~ msgstr " Mo/s" -#~ msgid "new game" -#~ msgstr "nouveau jeu" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFIER LE JEU" - -#~ msgid "Remove selected mod" -#~ msgstr "Supprimer le mod sélectionné" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Ajouter un mod" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "Favorites:" -#~ msgstr "Favoris :" - -#~ msgid "START SERVER" -#~ msgstr "DÉMARRER LE SERVEUR" - -#~ msgid "Name" -#~ msgstr "Nom" - -#~ msgid "Password" -#~ msgstr "Mot de passe" - -#~ msgid "SETTINGS" -#~ msgstr "PARAMÈTRES" - -#~ msgid "Preload item visuals" -#~ msgstr "Précharger les objets" - -#~ msgid "Finite Liquid" -#~ msgstr "Liquides limités" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "PARTIE SOLO" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACKS DE TEXTURES" - -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "Add mod:" -#~ msgstr "Ajouter un mod :" - -#~ msgid "Local install" -#~ msgstr "Installation locale" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Attention : certains mods ne sont pas encore configurés.\n" -#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. " +#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "is required by:" +#~ msgstr "est requis par :" + +#~ msgid "Configuration saved. " +#~ msgstr "Configuration enregistrée. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Attention : configuration incorrecte. " + +#~ msgid "Cannot create world: Name contains invalid characters" #~ msgstr "" -#~ "Attention : certains mods configurés sont introuvables.\n" -#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. " +#~ "Impossible de créer le monde : le nom contient des caractères invalides" -#~ msgid "Delete map" -#~ msgstr "Supprimer la carte" +#~ msgid "Multiplayer" +#~ msgstr "Multijoueur" + +#~ msgid "Advanced" +#~ msgstr "Avancé" + +#~ msgid "Show Public" +#~ msgstr "Voir les serveurs publics" + +#~ msgid "Show Favorites" +#~ msgstr "Voir les serveurs favoris" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Laisser l'adresse vide pour lancer un serveur local." + +#~ msgid "Create world" +#~ msgstr "Créer un monde" + +#~ msgid "Address required." +#~ msgstr "Adresse requise." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné" + +#~ msgid "Files to be deleted" +#~ msgstr "Fichiers à supprimer" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Impossible de configurer ce monde : aucune sélection active" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés" #~ msgid "" #~ "Default Controls:\n" @@ -1283,73 +1290,97 @@ msgstr "Zoomer" #~ "- Échap : ce menu\n" #~ "- T : discuter\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés" +#~ msgid "Delete map" +#~ msgstr "Supprimer la carte" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Impossible de configurer ce monde : aucune sélection active" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent" - -#~ msgid "Files to be deleted" -#~ msgstr "Fichiers à supprimer" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné" - -#~ msgid "Address required." -#~ msgstr "Adresse requise." - -#~ msgid "Create world" -#~ msgstr "Créer un monde" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Laisser l'adresse vide pour lancer un serveur local." - -#~ msgid "Show Favorites" -#~ msgstr "Voir les serveurs favoris" - -#~ msgid "Show Public" -#~ msgstr "Voir les serveurs publics" - -#~ msgid "Advanced" -#~ msgstr "Avancé" - -#~ msgid "Multiplayer" -#~ msgstr "Multijoueur" - -#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " #~ msgstr "" -#~ "Impossible de créer le monde : le nom contient des caractères invalides" +#~ "Attention : certains mods configurés sont introuvables.\n" +#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. " -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Attention : configuration incorrecte. " - -#~ msgid "Configuration saved. " -#~ msgstr "Configuration enregistrée. " - -#~ msgid "is required by:" -#~ msgstr "est requis par :" - -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet" +#~ "Attention : certains mods ne sont pas encore configurés.\n" +#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. " -#~ msgid " MB/s" -#~ msgstr " Mo/s" +#~ msgid "Local install" +#~ msgstr "Installation locale" -#~ msgid " KB/s" -#~ msgstr " Ko/s" +#~ msgid "Add mod:" +#~ msgstr "Ajouter un mod :" -#~ msgid "Fly mode" -#~ msgstr "Voler" +#~ msgid "MODS" +#~ msgstr "MODS" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Filtrage anisotrope" +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACKS DE TEXTURES" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-mapping" +#~ msgid "SINGLE PLAYER" +#~ msgstr "PARTIE SOLO" -#~ msgid "Downloading" -#~ msgstr "Téléchargement" +#~ msgid "Finite Liquid" +#~ msgstr "Liquides limités" + +#~ msgid "Preload item visuals" +#~ msgstr "Précharger les objets" + +#~ msgid "SETTINGS" +#~ msgstr "PARAMÈTRES" + +#~ msgid "Password" +#~ msgstr "Mot de passe" + +#~ msgid "Name" +#~ msgstr "Nom" + +#~ msgid "START SERVER" +#~ msgstr "DÉMARRER LE SERVEUR" + +#~ msgid "Favorites:" +#~ msgstr "Favoris :" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Ajouter un mod" + +#~ msgid "Remove selected mod" +#~ msgstr "Supprimer le mod sélectionné" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFIER LE JEU" + +#~ msgid "new game" +#~ msgstr "nouveau jeu" + +#~ msgid "edit game" +#~ msgstr "éditer le jeu" + +#~ msgid "Mods:" +#~ msgstr "Mods :" + +#~ msgid "Games" +#~ msgstr "Jeux" + +#~ msgid "GAMES" +#~ msgstr "JEUX" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Nom du jeu" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet" + +#~ msgid "Rendering:" +#~ msgstr "Affichage :" + +#~ msgid "Online mod repository" +#~ msgstr "Dépôt de mods en ligne" diff --git a/po/hu/minetest.po b/po/hu/minetest.po index 79c68478e..bc19aa78f 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-09 16:11+0200\n" "Last-Translator: Kisbenedek Márton \n" -"Language-Team: Hungarian " -"\n" +"Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,168 +19,183 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Hiba történt:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Főmenü" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Csatlakozás" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Betöltés..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Próbáld újra engedélyezni a nyilvános szerverlistát és ellenőrizd az " "internetkapcsolatot." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Világ:" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Mégse" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Függőségek:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "Csomag letiltás" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Csomag engedélyez" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Összes engedélyezése" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" msgstr "Játék elrejtése" -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" msgstr "Modpakk tartalom elrejtése" -#: builtin/mainmenu/dlg_config_world.lua:49 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Függőségek:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp msgid "Save" msgstr "Mentés" -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Mégse" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Világ:" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Csomag engedélyez" - -#: builtin/mainmenu/dlg_config_world.lua:73 -msgid "Disable MP" -msgstr "Csomag letiltás" - -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 +#: builtin/mainmenu/dlg_config_world.lua msgid "enabled" msgstr "Engedélyez" -#: builtin/mainmenu/dlg_config_world.lua:85 -msgid "Enable all" -msgstr "Összes engedélyezése" +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "\"$1\" nevű világ már létezik" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Világ neve" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Létrehozás" -#: builtin/mainmenu/dlg_create_world.lua:53 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Tölts le egy al-játékot (pl. minetest_game) a minetest.net-ről" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Letöltés a minetest.net-ről" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Játék" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Térkép generátor" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Seed" msgstr "Seed" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Térkép generátor" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Játék" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Létrehozás" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Nincsenek aljátékok telepítve." - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Letöltés a minetest.net-ről" - -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" "Figyelmeztetés: A \"minimal development test\" csak fejlesztőknek ajánlott." -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Tölts le egy al-játékot (pl. minetest_game) a minetest.net-ről" +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Világ neve" -#: builtin/mainmenu/dlg_create_world.lua:99 -msgid "A world named \"$1\" already exists" -msgstr "\"$1\" nevű világ már létezik" +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Nincsenek aljátékok telepítve." -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Biztosan törölni akarod: \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Igen" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Persze, hogy nem!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: \"$1\" törlése meghiúsult" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: érvénytelen mod útvonal: \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Persze, hogy nem!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Igen" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "\"$1\" világ törlése?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nem" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Modpakk átnevezése:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Elfogad" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Mod telepítés: fájl: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Modpakk átnevezése:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -188,464 +203,520 @@ msgstr "" "\n" "Mod telepítés: \"$1\" nem támogatott fájltípus, vagy hibás archívum" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "$1 telepítése meghiúsult" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Mod telepítés: fájl: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Mod telepítése: nem található megfelelő mod név ehhez: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Mod telepítése: nem található megfelelő mappanév ehhez a modpakk-hoz: $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Mod telepítése: nem található megfelelő mod név ehhez: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Rendezetlen" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Keresés" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "$1 letöltése, kérlek várj..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Sikeresen telepítve:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Rövid név:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Értékelés" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Újratelepítés" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Telepítés" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Áruház bezárása" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1 letöltése, kérlek várj..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Telepítés" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Oldal $1 ennyiből: $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Készítők" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Értékelés" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Belső fejlesztők" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Keresés" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Rövid név:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Sikeresen telepítve:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Rendezetlen" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Újratelepítés" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Tevékeny hozzájárulók" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Korábbi belső fejlesztők" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Belső fejlesztők" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Készítők" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Korábbi hozzájárulók" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Korábbi belső fejlesztők" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Telepített modok:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online mod tároló" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nincs elérhető mod leírás" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Mod ismertető:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Átnevez" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Kiválasztott modpakk törlése" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Kiválasztott mod törlése" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Mod fájl kiválasztása:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Modok" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nincs elérhető mod leírás" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Átnevez" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Mod fájl kiválasztása:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Kiválasztott mod törlése" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Kiválasztott modpakk törlése" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Cím / Port:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Név / jelszó:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Nyilvános szerverlista" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Törlés" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Csatlakozás" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Kreatív mód" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Sérülés engedélyezve" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP engedélyezve" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Kliens" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Új" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Csatlakozás" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Beállítás" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Játék indítása" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Világ kiválasztása:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Kreatív mód" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Sérülés engedélyezése" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Sérülés engedélyezve" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Nyilvános" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Törlés" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Név/jelszó" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Név / jelszó:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Nyilvános szerverlista" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP engedélyezve" + +#: builtin/mainmenu/tab_server.lua #, fuzzy msgid "Bind Address" msgstr "Bind Address" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Beállítás" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Szerver port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreatív mód" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Sérülés engedélyezése" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Név/jelszó" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Új" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Nincs létrehozva, vagy kiválasztva világ!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Port" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Nyilvános" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Világ kiválasztása:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Szerver" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Áttetsző levelek" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Szerver port" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Egyszerű levelek" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Játék indítása" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Szép levelek" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Nincs szűrés" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Bi-lineáris szűrés" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Tri-lineáris szűrés" - -#: builtin/mainmenu/tab_settings.lua:43 -#, fuzzy -msgid "No Mipmap" -msgstr "No Mipmap" - -#: builtin/mainmenu/tab_settings.lua:44 -#, fuzzy -msgid "Mipmap" -msgstr "Mipmap" - -#: builtin/mainmenu/tab_settings.lua:45 -#, fuzzy -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap + Aniso. Filter" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Biztosan visszaállítod az egyjátékos világod?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Nem!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Simított megvilágítás" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Részecskék engedélyezése" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3D felhők" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Áttetsző víz" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Tiszta (csatlakozó) üveg" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Node kiemelés" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Textúrázás:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Biztosan visszaállítod az egyjátékos világod?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Renderelés:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bi-lineáris szűrés" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "A driver változások életbe lépéséhez indítsd újra a Minetestet" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shaderek" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Gombok változtatása" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Egyjátékos világ visszaállítása" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "Felhasználói felület méretaránya" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "A méretarány alkalmazva a menü elemekre: " - -#: builtin/mainmenu/tab_settings.lua:250 -#, fuzzy -msgid "Touch free target" -msgstr "Touch free target" - -#: builtin/mainmenu/tab_settings.lua:256 -#, fuzzy -msgid "Touchthreshold (px)" -msgstr "Touchthreshold (px)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Bumpmapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Gombok változtatása" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Tiszta (csatlakozó) üveg" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Részecskék engedélyezése" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Szép levelek" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "Felhasználói felület méretaránya" + +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Generate Normalmaps" msgstr "Generate Normalmaps" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Mipmap" +msgstr "Mipmap" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmap + Aniso. Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Nincs szűrés" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "No Mipmap" +msgstr "No Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Nem!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Node kiemelés" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Áttetsző levelek" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Áttetsző víz" + +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Hullámzó víz" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Egyjátékos világ visszaállítása" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Hullámzó levelek" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "A méretarány alkalmazva a menü elemekre: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Hullámzó növények" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "A shaderek engedélyezéséhez OpenGL driver használata szükséges." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Beállítások" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Egyjátékos mód indítása" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shaderek" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Egyszerű levelek" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Simított megvilágítás" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Textúrázás:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "A shaderek engedélyezéséhez OpenGL driver használata szükséges." + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Touch free target" +msgstr "Touch free target" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Touchthreshold (px)" +msgstr "Touchthreshold (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Tri-lineáris szűrés" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Hullámzó levelek" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Hullámzó növények" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Hullámzó víz" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Modok beállítása" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Főmenü" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Egyjátékos mód indítása" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Játék" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Egyjátékos mód" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Textúracsomag kiválasztása:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nincs elérhető információ" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Textúracsomag kiválasztása:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Textúra pakkok" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Textúrák betöltése..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Csatlakozási hiba (idő lejárt?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Shaderek újraépítése..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Csomópontok inicializálása..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Csomópontok inicializálása" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Elem textúrák..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Kész!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Főmenü" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Csomópontok inicializálása" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Túl hosszú játékosnév." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Csomópontok inicializálása..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Elem textúrák..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Textúrák betöltése..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Shaderek újraépítése..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Csatlakozási hiba (idő lejárt?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nincs világ kiválasztva és nincs cím megadva. Nincs mit tenni." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "A megadott világ útvonala nem létezik: " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Nem lehet betölteni, vagy nem található játék \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Nem valós játék spec." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Főmenü" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nincs világ kiválasztva és nincs cím megadva. Nincs mit tenni." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Túl hosszú játékosnév." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "A megadott világ útvonala nem létezik: " + +#: src/fontengine.cpp #, fuzzy msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Folytatás" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Részletekért tekintsd meg a debug.txt fájlt." -#: src/game.cpp:1072 -msgid "You died." -msgstr "Meghaltál." +#: src/game.cpp +msgid "Change Keys" +msgstr "Gombok változtatása" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Újraéledés" +#: src/game.cpp +msgid "Change Password" +msgstr "Jelszó változtatás" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Csatlakozás a szerverhez..." + +#: src/game.cpp +msgid "Continue" +msgstr "Tovább" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Kliens létrehozása..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Szerver létrehozása..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Alapértelmezett irányítás:\n" +"- WASD: Mozgás\n" +"- Space: Ugrás/Mászás\n" +"- Shift: Lopakodás/Lefele menés\n" +"- Q: Tárgyak eldobása\n" +"- I: Invertory\n" +"- Egér: Forgás/Nézelődés\n" +"- Egér Bal-gomb: Ásás/Ütés\n" +"- Egér jobb-gomb: Helyezés/Használat\n" +"- Egér görgő: Tárgyak kiválasztása\n" +"- T: Beszélgetés\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -673,612 +744,575 @@ msgstr "" "- érint&megfogás, érintés 2. ujjal\n" " --> egy elem slotba helyezése\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Alapértelmezett irányítás:\n" -"- WASD: Mozgás\n" -"- Space: Ugrás/Mászás\n" -"- Shift: Lopakodás/Lefele menés\n" -"- Q: Tárgyak eldobása\n" -"- I: Invertory\n" -"- Egér: Forgás/Nézelődés\n" -"- Egér Bal-gomb: Ásás/Ütés\n" -"- Egér jobb-gomb: Helyezés/Használat\n" -"- Egér görgő: Tárgyak kiválasztása\n" -"- T: Beszélgetés\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Tovább" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Jelszó változtatás" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Hangerő" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Gombok változtatása" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Kilépés a menübe" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Kilépés az OP-rendszerbe" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Leállítás..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Szerver létrehozása..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Kliens létrehozása..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Cím feloldása..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Csatlakozás a szerverhez..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Elem definíciók..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Csomópont definíciók..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Média..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/mp" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/mp" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Részletekért tekintsd meg a debug.txt fájlt." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Csomópont definíciók..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Folytatás" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Cím feloldása..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Újraéledés" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Leállítás..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Hangerő" + +#: src/game.cpp +msgid "You died." +msgstr "Meghaltál." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Belépés " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "Ok" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Használat\" = Lemászás" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Vissza" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Beszélgetés" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Parancs" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konzol" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Az \"ugrás\" gomb duplán a repüléshez" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Eldobás" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Előre" + +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Inventory" +msgstr "Inventory" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Ugrás" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "A gomb már használatban van" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Gombkiosztás. (Ha elfuserálod ezt a menüt, távolíts el néhány cuccot a " "minetest.conf-ból)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Használat\" = Lemászás" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Az \"ugrás\" gomb duplán a repüléshez" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "A gomb már használatban van" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "Nyomj meg egy gombot" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Előre" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Vissza" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Bal" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Stacks nyomtatása" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Látótávolság választása" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Jobb" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Használat" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Ugrás" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Lopakodás" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Eldobás" - -#: src/guiKeyChangeMenu.cpp:407 -#, fuzzy -msgid "Inventory" -msgstr "Inventory" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Beszélgetés" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Parancs" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konzol" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Repülés bekapcsolása" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Gyorsaság bekapcsolása" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Toggle Cinematic" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Gyorsaság bekapcsolása" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Repülés bekapcsolása" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Váltás noclip-re" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Látótávolság választása" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Használat" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Stacks nyomtatása" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Nyomj meg egy gombot" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Régi jelszó" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Új jelszó" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Jelszó megerősítés" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Változtat" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Jelszó megerősítés" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Új jelszó" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Régi jelszó" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Nem egyeznek a jelszavak!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Hangerő: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Kilépés" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Bal gomb" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Hangerő: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Középső gomb" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Jobb gomb" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X gomb 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Vissza" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Törlés" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabulátor" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Gomb 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Nagybetű" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menü" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Szünet" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Konvertálás" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Kilépés" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Befejezés" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junjaa" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanjii" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nem konvertált" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Vége" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Otthon" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mód váltás" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Következő" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Elsődleges" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Szóköz" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Le" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Végrehajt" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Nyomtat" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Kiválaszt" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Fel" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Segítség" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Beilleszt" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Pillanatkép" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Bal Windows" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Alkalmazások" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numerikus billentyű 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numerikus billentyű 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Jobb Windows" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Alvás" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numerikus billentyű 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numerikus billentyű 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numerikus billentyű 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numerikus billentyű 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numerikus billentyű 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numerikus billentyű 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numerikus billentyű *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numerikus billentyű +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numerikus billentyű -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numerikus billentyű /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numerikus billentyű 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numerikus billentyű 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Numlock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "ScrollLock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Bal Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Jobb Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Bal Controll" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Bal menü" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Jobb Control" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Jobb menü" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Vessző" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Mínusz" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Pont" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plusz" - -#: src/keycode.cpp:247 +#: src/keycode.cpp #, fuzzy msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Vissza" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Nagybetű" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Törlés" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Vessző" + +#: src/keycode.cpp +#, fuzzy +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konvertálás" + +#: src/keycode.cpp #, fuzzy msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Le" + +#: src/keycode.cpp +msgid "End" +msgstr "Vége" + +#: src/keycode.cpp #, fuzzy msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Kilépés" + +#: src/keycode.cpp #, fuzzy msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Végrehajt" + +#: src/keycode.cpp +msgid "Final" +msgstr "Befejezés" + +#: src/keycode.cpp +msgid "Help" +msgstr "Segítség" + +#: src/keycode.cpp +msgid "Home" +msgstr "Otthon" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Beilleszt" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junjaa" + +#: src/keycode.cpp +#, fuzzy +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanjii" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Bal gomb" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Bal Controll" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Bal menü" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Bal Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Bal Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Középső gomb" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Mínusz" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mód váltás" + +#: src/keycode.cpp +msgid "Next" +msgstr "Következő" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nem konvertált" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Numlock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numerikus billentyű *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numerikus billentyű +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numerikus billentyű -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numerikus billentyű /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numerikus billentyű 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numerikus billentyű 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numerikus billentyű 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numerikus billentyű 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numerikus billentyű 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numerikus billentyű 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numerikus billentyű 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numerikus billentyű 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numerikus billentyű 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numerikus billentyű 9" + +#: src/keycode.cpp #, fuzzy msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp #, fuzzy msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Szünet" + +#: src/keycode.cpp +msgid "Period" +msgstr "Pont" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plusz" + +#: src/keycode.cpp +msgid "Print" +msgstr "Nyomtat" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Elsődleges" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Jobb gomb" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Jobb Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Jobb menü" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Jobb Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Jobb Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "ScrollLock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Kiválaszt" + +#: src/keycode.cpp +#, fuzzy +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Alvás" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Pillanatkép" + +#: src/keycode.cpp +msgid "Space" +msgstr "Szóköz" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulátor" + +#: src/keycode.cpp +msgid "Up" +msgstr "Fel" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X gomb 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Gomb 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Nagyítás" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Játék" +#~ msgid "Downloading" +#~ msgstr "Le" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Játék" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-mapping" -#~ msgid "Favorites:" -#~ msgstr "Kedvencek:" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anzisztrópikus szűrés" -#, fuzzy -#~ msgid "Password" -#~ msgstr "Régi jelszó" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat" -#~ msgid "Preload item visuals" -#~ msgstr "Előretöltött tárgy láthatóság" +#~ msgid "is required by:" +#~ msgstr "kell neki:" + +#~ msgid "Configuration saved. " +#~ msgstr "Beállítások mentve. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Figyelem: A beállítások nem egyformák. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak" + +#~ msgid "Multiplayer" +#~ msgstr "Többjátékos mód" + +#~ msgid "Advanced" +#~ msgstr "Haladó" + +#~ msgid "Show Public" +#~ msgstr "Publikus mutatása" + +#~ msgid "Show Favorites" +#~ msgstr "Kedvencek mutatása" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts." + +#~ msgid "Create world" +#~ msgstr "Világ létrehozása" + +#~ msgid "Address required." +#~ msgstr "Cím szükséges." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Nem törölhető a világ: Nincs kiválasztva" + +#~ msgid "Files to be deleted" +#~ msgstr "A fájl törölve lett" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Hiba az összes világ törlése közben" #, fuzzy #~ msgid "Finite Liquid" #~ msgstr "Végtelen folyadék" -#~ msgid "Failed to delete all world files" -#~ msgstr "Hiba az összes világ törlése közben" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék" - -#~ msgid "Files to be deleted" -#~ msgstr "A fájl törölve lett" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Nem törölhető a világ: Nincs kiválasztva" - -#~ msgid "Address required." -#~ msgstr "Cím szükséges." - -#~ msgid "Create world" -#~ msgstr "Világ létrehozása" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts." - -#~ msgid "Show Favorites" -#~ msgstr "Kedvencek mutatása" - -#~ msgid "Show Public" -#~ msgstr "Publikus mutatása" - -#~ msgid "Advanced" -#~ msgstr "Haladó" - -#~ msgid "Multiplayer" -#~ msgstr "Többjátékos mód" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Figyelem: A beállítások nem egyformák. " - -#~ msgid "Configuration saved. " -#~ msgstr "Beállítások mentve. " - -#~ msgid "is required by:" -#~ msgstr "kell neki:" - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat" - -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anzisztrópikus szűrés" - -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-mapping" +#~ msgid "Preload item visuals" +#~ msgstr "Előretöltött tárgy láthatóság" #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Le" +#~ msgid "Password" +#~ msgstr "Régi jelszó" + +#~ msgid "Favorites:" +#~ msgstr "Kedvencek:" + +#, fuzzy +#~ msgid "Games" +#~ msgstr "Játék" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Játék" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "A driver változások életbe lépéséhez indítsd újra a Minetestet" + +#~ msgid "Rendering:" +#~ msgstr "Renderelés:" + +#~ msgid "Online mod repository" +#~ msgstr "Online mod tároló" diff --git a/po/id/minetest.po b/po/id/minetest.po index a14eaa3d7..9313b6aa9 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-06 08:59+0200\n" "Last-Translator: Muhammad Rifqi Priyo Susanto " "\n" -"Language-Team: Indonesian " -"\n" +"Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,169 +20,184 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Kesalahan muncul:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu Utama" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Oke" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Sambung" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Memuat..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Cobalah mengaktifkan ulang daftar server publik dan cek koneksi internet " "Anda." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Dunia:" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Batal" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Bergantung pada:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "Nonaktifkan PM" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Aktifkan PM" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Aktifkan semua" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" msgstr "" "Sembunyikan\n" "permainan" -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" msgstr "" "Sembunyikan\n" "konten pm" -#: builtin/mainmenu/dlg_config_world.lua:49 +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Bergantung pada:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp msgid "Save" msgstr "Simpan" -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Batal" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Dunia:" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Aktifkan PM" - -#: builtin/mainmenu/dlg_config_world.lua:73 -msgid "Disable MP" -msgstr "Nonaktifkan PM" - -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 +#: builtin/mainmenu/dlg_config_world.lua msgid "enabled" msgstr "diaktifkan" -#: builtin/mainmenu/dlg_config_world.lua:85 -msgid "Enable all" -msgstr "Aktifkan semua" - -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nama dunia" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generator peta" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Permainan" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Buat" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Kamu tidak punya sub-permainan terpasang." - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Unduh satu dari minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Peringatan: minimal development test ditujukan untuk pengembang." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Unduh sebuah sub-permainan, seperti minetest_game, dari minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Dunia bernama \"$1\" telah ada" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Buat" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Unduh sebuah sub-permainan, seperti 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 "Game" +msgstr "Permainan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Generator peta" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Tidak ada nama atau permainan yang dipilih" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +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." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nama dunia" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Kamu tidak punya sub-permainan terpasang." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Kamu yakin ingin menghapus \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ya" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Tentu tidak!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Pengelola mod: gagal untuk menghapus \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Pengelola mod: jalur mod tidak sah" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Tentu tidak!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ya" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Hapus Dunia \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Tidak" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Ganti Nama Paket Mod:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Setuju" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Pemasangan Mod: berkas: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Ganti Nama Paket Mod:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -190,455 +205,511 @@ msgstr "" "\n" "Pemasangan Mod: tipe berkas tidak didukung \"$1\" atau kerusakan arsip" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Gagal untuk memasang $1 ke $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Pemasangan Mod: berkas: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Pemasangan Mod: tidak dapat mencari nama folder yang sesuai untuk paket mod " "$1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Tidak diurutkan" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Cari" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Mengunduh $1, mohon tunggu..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Berhasil dipasang:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Nama pendek:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Peringkat" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Pasang ulang" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Tutup toko" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Mengunduh $1, mohon tunggu..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Pasang" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Halaman $1 dari $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Penghargaan" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Peringkat" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Pengembang Inti" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Cari" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Nama pendek:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Berhasil dipasang:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Tidak diurutkan" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Pasang ulang" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Kontributor Aktif" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Pengembang Inti Sebelumnya" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Pengembang Inti" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Penghargaan" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Kontributor Sebelumnya" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Pengembang Inti Sebelumnya" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Mod Terpasang:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Gudang mod daring" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Tidak ada deskripsi mod tersedia" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informasi mod:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Ganti Nama" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Copot pemasangan paket mod terpilih" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Copot pemasangan mod terpilih" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Pilih Berkas Mod:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mod" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Tidak ada deskripsi mod tersedia" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Ganti Nama" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Pilih Berkas Mod:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Copot pemasangan mod terpilih" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Copot pemasangan paket mod terpilih" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Alamat / Port:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Nama / Kata sandi:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Daftar Server Publik" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Hapus" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Sambung" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Mode kreatif" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Kerusakan diaktifkan" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP diaktifkan" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Klien" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Baru" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Sambung" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Konfigurasi" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Mode kreatif" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Mulai Permainan" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Kerusakan diaktifkan" -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Pilih Dunia:" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Hapus" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Mode Kreatif" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Nama / Kata sandi:" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Aktifkan Kerusakan" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Daftar Server Publik" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publik" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP diaktifkan" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nama/Kata sandi" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Alamat Sambungan" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Konfigurasi" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port Server" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Mode Kreatif" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Aktifkan Kerusakan" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nama/Kata sandi" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Baru" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Tidak ada dunia atau permainan yang dipilih!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Port" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publik" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Pilih Dunia:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Daun Opak" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port Server" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Daun Sederhana" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Mulai Permainan" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Daun Megah" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Tanpa Filter" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Bilinear Filter" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Trilinear Filter" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Tanpa Mipmap" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Mipmap" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap + Aniso. Filter" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Yakin ingin mengaturulang dunia anda?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Tidak!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Pencahayaan Halus" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Aktifkan Partikel" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "Awan 3D" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Air Buram" - -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Kaca Tersambung" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Penteksturan:" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Yakin ingin mengaturulang dunia anda?" -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shaders" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bilinear Filter" -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Ubah tombol" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Atur ulang dunia pemain tunggal" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "Skala antarmuka" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Faktor skala yang diatur untuk elemen menu: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "Bebas sentuhan" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "Batas sentuhan (px)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Bumpmapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Ubah tombol" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Kaca Tersambung" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Aktifkan Partikel" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Daun Megah" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "Skala antarmuka" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Gunakan Normalmaps" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmap + Aniso. Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Tanpa Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Tanpa Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Tidak!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Daun Opak" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Air Buram" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Air Berombak" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Atur ulang dunia pemain tunggal" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Daun Melambai" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Faktor skala yang diatur untuk elemen menu: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Tanaman Berayun" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Pengaturan" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Mulai Pemain Tunggal" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shaders" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Daun Sederhana" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Pencahayaan Halus" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Penteksturan:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "Bebas sentuhan" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "Batas sentuhan (px)" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Trilinear Filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Daun Melambai" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Tanaman Berayun" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Air Berombak" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Konfigurasi mod" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Beranda" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Mulai Pemain Tunggal" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Mainkan" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Pemain Tunggal" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Pilih paket tekstur:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Tidak ada informasi tersedia" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Pilih paket tekstur:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Paket Tekstur" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Memuat tekstur..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Koneksi rusak (terlalu lama?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Membangun ulang shaders..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Tekstur barang..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Selesai!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menu Utama" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Nama pemain terlalu panjang." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Tekstur barang..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Memuat tekstur..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Membangun ulang shaders..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Koneksi rusak (terlalu lama?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "Jalur dunia yang diberikan tidak ada: " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Tidak dapat mencari atau memuat permainan \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Spesifikasi permainan tidak sah." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu Utama" + +#: 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." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nama pemain terlalu panjang." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Jalur dunia yang diberikan tidak ada: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Lanjut" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Cek debug.txt untuk detail." -#: src/game.cpp:1072 -msgid "You died." -msgstr "Anda mati." +#: src/game.cpp +msgid "Change Keys" +msgstr "Ubah Tombol" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Bangkit" +#: src/game.cpp +msgid "Change Password" +msgstr "Ganti Kata Sandi" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Menghubungkan ke server..." + +#: src/game.cpp +msgid "Continue" +msgstr "Lanjutkan" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Membuat klien..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Membuat server..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Kontrol Bawaan:\n" +"- WASD: bergerak\n" +"- Space: lompat/panjat\n" +"- Shift: merayap/turun\n" +"- Q: jatuhkan barang\n" +"- I: inventaris\n" +"- Mouse: belok/melihat\n" +"- Mouse kiri: gali/pukul\n" +"- Mouse kanan: taruh/pakai\n" +"- Roda mouse: pilih barang\n" +"- T: obrolan\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -666,539 +737,502 @@ msgstr "" "- tekan&geser, ketuk jari kedua\n" " --> taruh barang tunggal ke wadah\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Kontrol Bawaan:\n" -"- WASD: bergerak\n" -"- Space: lompat/panjat\n" -"- Shift: merayap/turun\n" -"- Q: jatuhkan barang\n" -"- I: inventaris\n" -"- Mouse: belok/melihat\n" -"- Mouse kiri: gali/pukul\n" -"- Mouse kanan: taruh/pakai\n" -"- Roda mouse: pilih barang\n" -"- T: obrolan\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Lanjutkan" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Ganti Kata Sandi" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volume Suara" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Ubah Tombol" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Kembali ke Menu Utama" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Tutup Aplikasi" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Mematikan..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Membuat server..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Membuat klien..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Mencari alamat..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Menghubungkan ke server..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Definisi barang..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definisi node..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Cek debug.txt untuk detail." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definisi node..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Lanjut" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Mencari alamat..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Bangkit" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Mematikan..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume Suara" + +#: src/game.cpp +msgid "You died." +msgstr "Anda mati." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Masuk " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "oke" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" -"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari " -"minetest.conf)" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Pakai\" = turun" -#: src/guiKeyChangeMenu.cpp:180 +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Mundur" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Obrolan" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Perintah" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsol" + +#: src/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" msgstr "" "Tekan ganda \"lompat\" untuk\n" "beralih terbang" -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Tombol telah terpakai" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "tekan tombol" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Maju" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Mundur" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Kiri" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Kanan" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Pakai" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Lompat" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Menyelinap" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Drop" msgstr "Jatuhkan" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Maju" + +#: src/guiKeyChangeMenu.cpp msgid "Inventory" msgstr "Inventaris" -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Obrolan" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Lompat" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Perintah" +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tombol telah terpakai" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konsol" +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari " +"minetest.conf)" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Terbang" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Kiri" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Gerak cepat" +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Cetak tumpukan" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Jarak pandang" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Kanan" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Menyelinap" + +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Gerak cepat" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Gerak cepat" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Terbang" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Tembus blok" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Jarak pandang" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Pakai" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Cetak tumpukan" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "tekan tombol" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Kata Sandi Lama" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Kata Sandi Baru" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Konfirmasi Kata Sandi" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Ubah" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Konfirmasi Kata Sandi" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Kata Sandi Baru" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Kata Sandi Lama" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kata sandi tidak cocok!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volume Suara: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Keluar" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Klik Kiri" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume Suara: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Klik Tengah" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Klik Kanan" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Tombol X 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Bersihkan" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Tombol X 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Alt" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Page Up" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Page Down" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Spasi" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Turun" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Execute" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Atas" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Help" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Start Kiri" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Tombol Menu" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Start Kanan" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Shift Kiri" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Shift Kanan" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Ctrl Kiri" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Left Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Ctrl Kanan" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Right Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Koma" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Kurang" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Titik" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Tambah" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Bersihkan" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Koma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Turun" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Execute" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Help" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Klik Kiri" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl Kiri" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Left Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift Kiri" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Start Kiri" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Alt" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Klik Tengah" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Kurang" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Up" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Titik" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Tambah" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Down" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Klik Kanan" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl Kanan" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Right Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift Kanan" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Start Kanan" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spasi" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Atas" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Tombol X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Tombol X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid " MB/s" -#~ msgstr " MB/detik" - -#~ msgid " KB/s" -#~ msgstr " KB/detik" - -#~ msgid "Fly mode" -#~ msgstr "Mode terbang" - -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotropic Filtering" +#~ msgid "Downloading" +#~ msgstr "Mengunduh" #~ msgid "Mip-Mapping" #~ msgstr "Mip-Mapping" -#~ msgid "Downloading" -#~ msgstr "Mengunduh" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotropic Filtering" + +#~ msgid "Fly mode" +#~ msgstr "Mode terbang" + +#~ msgid " KB/s" +#~ msgstr " KB/detik" + +#~ msgid " MB/s" +#~ msgstr " MB/detik" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih" + +#~ msgid "Rendering:" +#~ msgstr "Rendering:" + +#~ msgid "Online mod repository" +#~ msgstr "Gudang mod daring" diff --git a/po/it/minetest.po b/po/it/minetest.po index 478cb261d..209634002 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: Minetest 0.4.9\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-08-24 20:44+0200\n" "Last-Translator: betacentury \n" -"Language-Team: Italian " -"\n" +"Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,165 +19,181 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "Si è verificato un errore in uno script Lua, come ad esempio un modulo:" +msgstr "" +"Si è verificato un errore in uno script Lua, come ad esempio un modulo:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Si è verificato un errore:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menù principale" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Connettere" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Caricamento..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Mondo:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Nasc. gioco" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Nasc. cont. pacchetti" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod.:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Dipendenze:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvare" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Annullare" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Att. pacch." +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dipendenze:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Disatt. pacch." -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "attivata" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Att. pacch." -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Attivarli tutti" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nome del mondo" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seme casuale" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generat. mappe" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Gioco" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Creare" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Non hai installato nessun sottogioco." - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Scaricane uno da minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Scarica un sottogioco, come minetest_game, da minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Nasc. gioco" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Nasc. cont. pacchetti" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod.:" + +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvare" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mondo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "attivata" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Esiste già un mondo chiamato \"$1\"" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Creare" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Scarica un sottogioco, 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 "Game" +msgstr "Gioco" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Generat. mappe" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" "Non è stato fornito nessun nome del mondo oppure non è stato selezionato " "nessun gioco" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seme casuale" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nome del mondo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Non hai installato nessun sottogioco." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Siete certi di volere cancellare \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Sì" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "No, certo che no!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Gestore dei moduli: la cancellazione di \"$1\" è fallita" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Gestore dei moduli: percorso del modulo \"$1\" non valido" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "No, certo che no!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Sì" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Cancellare il mondo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "No" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Rinominare il pacchetto moduli:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accettare" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Installazione modulo: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Rinominare il pacchetto moduli:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -185,496 +201,511 @@ msgstr "" "\n" "Installazione modulo: tipo di file non supportato \"$1\"" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "L'installazione di $1 in $2 è fallita" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Installazione modulo: file: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" +"Installare un modulo: impossibile trovare il vero nome del modulo per: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Installare un modulo: impossibile trovare un nome di cartella appropriato " "per il pacchetto moduli $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -"Installare un modulo: impossibile trovare il vero nome del modulo per: $1" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Non categorizzato" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Cerca" - -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Installato con successo:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installare" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Pagina $1 di $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Valutazione" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Cerca" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nome del mondo" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Valutazione" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Installato con successo:" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Non categorizzato" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Reinstallare" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Installare" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "Pagina $1 di $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Riconoscimenti" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Sviluppatori principali" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contributori attivi" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Sviluppatori principali" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Riconoscimenti" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Contributori precedenti" + +#: builtin/mainmenu/tab_credits.lua #, fuzzy msgid "Previous Core Developers" msgstr "Sviluppatori principali" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "Contributori precedenti" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Moduli installati:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Archivio in linea" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nessuna descrizione disponibile per il modulo" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informazioni sul modulo:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Rinominare" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Disinstallare il pacchetto moduli selezionato" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Disinstallare il modulo selezionato" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selezionare il file modulo:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Moduli" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nessuna descrizione disponibile per il modulo" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Rinominare" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selezionare il file modulo:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Disinstallare il modulo selezionato" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Disinstallare il pacchetto moduli selezionato" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Indirizzo/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Nome/Password" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "Client" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Elenco dei server pubblici" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Cancellare" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Connettere" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Modalità creativa" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" msgstr "Danni abilitati" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Cancellare" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nome/Password" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Elenco dei server pubblici" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "attivata" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "Client" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nuovo" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Configurare" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Avviare il gioco" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Selezionare il mondo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Modalità creativa" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Abilitare il danno" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Pubblico" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nome/Password" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Porta" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurare" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Porta del server" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modalità creativa" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Abilitare il danno" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nome/Password" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nuovo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "" "Non è stato fornito nessun nome del mondo oppure non è stato selezionato " "nessun gioco" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Porta" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Pubblico" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selezionare il mondo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Foglie opache" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Porta del server" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Foglie semplici" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Avviare il gioco" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Alberi migliori" - -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Nessun Filtro" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Filtro Bi-Lineare" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Filtro Tri-Lineare" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "No!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Illuminazione armoniosa" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Abilitare le particelle" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "Nuvole 3D" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Acqua opaca" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Connettere" - -#: builtin/mainmenu/tab_settings.lua:212 -#, fuzzy -msgid "Node Highlighting" -msgstr "Evidenziamento Nodi" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:226 -#, fuzzy -msgid "Restart minetest for driver change to take effect" -msgstr "Riavviare minetest per rendere effettive le modifiche" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shader" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Cambiare i tasti" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Giocatore singolo" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Filtro Bi-Lineare" -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Cambiare i tasti" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Connettere" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Abilitare le particelle" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Alberi migliori" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "Nessun Filtro" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "No!!!" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Node Highlighting" +msgstr "Evidenziamento Nodi" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Foglie opache" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Acqua opaca" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Giocatore singolo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "E' necessario usare i driver OpenGL per abilitare gli shader." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Impostazioni" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Giocatore singolo" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shader" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Foglie semplici" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Illuminazione armoniosa" + +#: 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 "E' necessario usare i driver OpenGL per abilitare gli shader." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Filtro Tri-Lineare" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Config. moduli" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menù principale" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Giocatore singolo" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Giocare" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Giocatore singolo" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selezionare un pacchetto di immagini:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nessuna informazione disponibile" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selezionare un pacchetto di immagini:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pacch. immagini" -#: src/client.cpp:1721 +#: src/client.cpp #, fuzzy -msgid "Loading textures..." -msgstr "Caricamento..." +msgid "Connection timed out." +msgstr "Errore di connessione (scaduta?)" -#: src/client.cpp:1736 -#, fuzzy -msgid "Rebuilding shaders..." -msgstr "Risoluzione dell'indirizzo..." +#: src/client.cpp +msgid "Done!" +msgstr "Fatto!" -#: src/client.cpp:1743 -#, fuzzy -msgid "Initializing nodes..." -msgstr "Inizializzazione nodi..." - -#: src/client.cpp:1760 +#: src/client.cpp #, fuzzy msgid "Initializing nodes" msgstr "Inizializzazione nodi" -#: src/client.cpp:1768 +#: src/client.cpp +#, fuzzy +msgid "Initializing nodes..." +msgstr "Inizializzazione nodi..." + +#: src/client.cpp msgid "Item textures..." msgstr "Immagini degli oggetti..." -#: src/client.cpp:1793 -msgid "Done!" -msgstr "Fatto!" +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Caricamento..." -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menù principale" +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Risoluzione dell'indirizzo..." -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Nome del giocatore troppo lungo." - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Errore di connessione (scaduta?)" -#: src/client/clientlauncher.cpp:425 +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Impossibile trovare o caricare il gioco \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Specifica del gioco non valida." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menù principale" + +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" "Non è stato selezionato nessun mondo e non è stato fornito nessun indirizzo. " "Niente da fare." -#: src/client/clientlauncher.cpp:432 +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nome del giocatore troppo lungo." + +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "Il percorso del mondo fornito non esiste: " -#: src/client/clientlauncher.cpp:441 -msgid "Could not find or load game \"" -msgstr "Impossibile trovare o caricare il gioco \"" - -#: src/client/clientlauncher.cpp:459 -msgid "Invalid gamespec." -msgstr "Specifica del gioco non valida." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Procedere" - -#: src/game.cpp:1072 -msgid "You died." -msgstr "Siete morti." - -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Riapparire" - -#: src/game.cpp:1092 +#: src/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" +"\n" +"Check debug.txt for details." msgstr "" +"\n" +"Controllare debug.txt per i dettagli." -#: src/game.cpp:1106 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Cambiare i tasti" + +#: src/game.cpp +msgid "Change Password" +msgstr "Cambiare la password" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Connessione al server..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuare" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Creazione del client..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Creazione del server..." + +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -700,572 +731,573 @@ msgstr "" "- Rotella del mouse: scegliere l'oggetto\n" "- T: chat\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Continuare" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Cambiare la password" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volume del suono" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Cambiare i tasti" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Tornare al menù" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Tornare al S.O." -#: src/game.cpp:1841 +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definizioni degli oggetti..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definizioni dei cubi..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Procedere" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Risoluzione dell'indirizzo..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Riapparire" + +#: src/game.cpp #, fuzzy msgid "Shutting down..." msgstr "Spegnimento della roba..." -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Creazione del server..." +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume del suono" -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Creazione del client..." +#: src/game.cpp +msgid "You died." +msgstr "Siete morti." -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Risoluzione dell'indirizzo..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Connessione al server..." - -#: src/game.cpp:2317 -msgid "Item definitions..." -msgstr "Definizioni degli oggetti..." - -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definizioni dei cubi..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 -msgid "KiB/s" -msgstr "KiB/s" - -#: src/game.cpp:2338 -msgid "MiB/s" -msgstr "MiB/s" - -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Controllare debug.txt per i dettagli." - -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp #, fuzzy msgid "Enter " msgstr "Invio " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "ok" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Usare\" = scendere" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Indietro" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Console" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Volare On/Off = due volte \"saltare\"" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Scartare" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avanti" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventario" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Saltare" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tasto già in uso" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Collegamenti dei tasti. (Se questo menù si incasina, rimuovete la roba da " "minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Usare\" = scendere" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Volare On/Off = due volte \"saltare\"" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Tasto già in uso" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "premere il tasto" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Avanti" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Indietro" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Sinistra" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Stampa stack" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Selez. ad area" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Destra" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Usare" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Saltare" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Strisciare" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Scartare" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventario" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Comando" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Console" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Volare On/Off" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Correre On/Off" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Correre On/Off" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Correre On/Off" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Volare On/Off" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Fantasma On/Off" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Selez. ad area" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usare" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Stampa stack" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "premere il tasto" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Vecchia password" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nuova password" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confermare la password" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Cambiare" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confermare la password" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nuova password" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vecchia password" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Le password non coincidono!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volume suono: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Uscire" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Tasto sinistro" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume suono: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Tasto centrale" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Tasto destro" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Pulsante X 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Canc" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Invio" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Pulsante X 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Bloc Maiusc" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menù" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pausa" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Maiusc" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Fine" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Fine" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Inizio" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Cambio di modalità" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Successivo" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Precedente" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Spazio" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Pag. giù" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Eseguire" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Stamp" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Selezionare" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Pag. su" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Aiuto" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Ins" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Istantanea" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Finestre a sinistra" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Applicazioni" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Tast. num. 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Tast. num. 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Finestre a destra" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sospensione" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Tast. num. 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Tast. num. 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Tast. num. 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Tast. num. 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Tast. num. 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Tast. num. 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Tast. num. *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Tast. num. +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Tast. num. -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Tast. num. /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Tast. num. 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Tast. num. 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Bloc Num" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Bloc Scorr" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Maiusc sx" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Maiusc dx" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Ctrl sx" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Menù a sinistra" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Ctrl dx" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Menù a destra" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Virgola" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Meno" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punto" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Più" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Bloc Maiusc" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Canc" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgola" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Pag. giù" + +#: src/keycode.cpp +msgid "End" +msgstr "Fine" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Eseguire" + +#: src/keycode.cpp +msgid "Final" +msgstr "Fine" + +#: src/keycode.cpp +msgid "Help" +msgstr "Aiuto" + +#: src/keycode.cpp +msgid "Home" +msgstr "Inizio" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Ins" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Tasto sinistro" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl sx" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menù a sinistra" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Maiusc sx" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Finestre a sinistra" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menù" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Tasto centrale" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Meno" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Cambio di modalità" + +#: src/keycode.cpp +msgid "Next" +msgstr "Successivo" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Bloc Num" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Tast. num. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Tast. num. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Tast. num. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Tast. num. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Tast. num. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Tast. num. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Tast. num. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Tast. num. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Tast. num. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Tast. num. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Tast. num. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Tast. num. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Tast. num. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Tast. num. 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pausa" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Più" + +#: src/keycode.cpp +msgid "Print" +msgstr "Stamp" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Precedente" + +#: src/keycode.cpp +msgid "Return" +msgstr "Invio" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Tasto destro" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl dx" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menù a destra" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Maiusc dx" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Finestre a destra" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Bloc Scorr" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selezionare" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Maiusc" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sospensione" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Istantanea" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spazio" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Pag. su" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Pulsante X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Pulsante X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Nome del gioco" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gestore del gioco: impossibile il modulo \"$1\" nel gioco \"$2\"" - -#~ msgid "GAMES" -#~ msgstr "GIOCHI" - -#~ msgid "Games" -#~ msgstr "Giochi" - -#~ msgid "Mods:" -#~ msgstr "Moduli:" - -#~ msgid "edit game" -#~ msgstr "modificare il gioco" - -#~ msgid "new game" -#~ msgstr "nuovo gioco" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFICARE IL GIOCO" - -#~ msgid "Remove selected mod" -#~ msgstr "Rimuovere il modulo selezionato" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Aggiungere il modulo" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "Favorites:" -#~ msgstr "Preferiti:" - -#~ msgid "START SERVER" -#~ msgstr "AVVIO SERVER" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "Password" -#~ msgstr "Password" - -#~ msgid "SETTINGS" -#~ msgstr "IMPOSTAZIONI" - -#~ msgid "Preload item visuals" -#~ msgstr "Precaricare le immagini" - -#~ msgid "Finite Liquid" -#~ msgstr "Liquido limitato" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "GIOC. SING." - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACCH. DI IMM." - -#~ msgid "MODS" -#~ msgstr "MODULI" - -#~ msgid "Add mod:" -#~ msgstr "Aggiungere un modulo:" - -#~ msgid "Local install" -#~ msgstr "Installazione locale" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" #~ msgid "Anisotropic Filtering" #~ msgstr "Filtro anisotropico" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid "Local install" +#~ msgstr "Installazione locale" + +#~ msgid "Add mod:" +#~ msgstr "Aggiungere un modulo:" + +#~ msgid "MODS" +#~ msgstr "MODULI" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACCH. DI IMM." + +#~ msgid "SINGLE PLAYER" +#~ msgstr "GIOC. SING." + +#~ msgid "Finite Liquid" +#~ msgstr "Liquido limitato" + +#~ msgid "Preload item visuals" +#~ msgstr "Precaricare le immagini" + +#~ msgid "SETTINGS" +#~ msgstr "IMPOSTAZIONI" + +#~ msgid "Password" +#~ msgstr "Password" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "START SERVER" +#~ msgstr "AVVIO SERVER" + +#~ msgid "Favorites:" +#~ msgstr "Preferiti:" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Aggiungere il modulo" + +#~ msgid "Remove selected mod" +#~ msgstr "Rimuovere il modulo selezionato" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFICARE IL GIOCO" + +#~ msgid "new game" +#~ msgstr "nuovo gioco" + +#~ msgid "edit game" +#~ msgstr "modificare il gioco" + +#~ msgid "Mods:" +#~ msgstr "Moduli:" + +#~ msgid "Games" +#~ msgstr "Giochi" + +#~ msgid "GAMES" +#~ msgstr "GIOCHI" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gestore del gioco: impossibile il modulo \"$1\" nel gioco \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Nome del gioco" + +#, fuzzy +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Riavviare minetest per rendere effettive le modifiche" + +#~ msgid "Online mod repository" +#~ msgstr "Archivio in linea" diff --git a/po/ja/minetest.po b/po/ja/minetest.po index 969bcddcd..711a30324 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -2,11 +2,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-08-15 03:28+0200\n" "Last-Translator: Rui \n" -"Language-Team: Japanese " -"\n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,163 +14,178 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "以下のModのLuaスクリプト内でエラーが発生しました:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "エラーが発生しました:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "メインメニュー" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "決定" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "接続" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "読み込み中..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "インターネット接続を確認し、公開サーバーリストを再有効化してください。" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "ワールド:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "ゲームを非表示" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Modパックを非表示" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod名:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "依存Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "保存" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "キャンセル" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "有効化" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "依存Mod:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "無効化" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" msgstr "有効化" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "すべて有効化" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "ワールド名" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed値" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "ゲームを非表示" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "ワールドタイプ" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Modパックを非表示" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "ゲーム" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod名:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "作成" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "保存" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "ゲームがインストールされていません。" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "ワールド:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "minetest.netから再ダウンロードしてください" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "有効化" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "警告: Minimal development testは開発者のためのゲームです。" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "ワールド名\"$1\"はすでに使用されています" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "作成" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "minetest.netから再ダウンロードしてください" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "ゲーム" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "ワールドタイプ" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "ワールド名が入力されていないか、ゲームが選択されていません" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.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は開発者のためのゲームです。" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "ワールド名" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "ゲームがインストールされていません。" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "本当に\"$1\"を削除してよろしいですか?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "はい" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "いいえ!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modマネージャ: \"$1\"の削除に失敗しました" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modマネージャ: Mod\"$1\"の場所が不明です" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "いいえ!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "はい" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "ワールド\"$1\"を削除しますか?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "いいえ" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "名前を変更:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "決定" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Modインストール: ファイル: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "名前を変更:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -178,453 +193,511 @@ msgstr "" "\n" "Modインストール: ファイル\"$1\"は非対応の形式か、壊れています" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "$2へ$1をインストールできませんでした" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Modインストール: Modパック$1に適したフォルダ名を見つけることができませんでした" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Modインストール: ファイル: \"$1\"" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "Modインストール: $1の本来のMod名が不明です" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "未分類" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" +"Modインストール: Modパック$1に適したフォルダ名を見つけることができませんでし" +"た" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "検索" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "$1をダウンロードしています。しばらくお待ちください..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "インストールが完了しました:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "省略名:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "評価" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "再インストール" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "インストール" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "閉じる" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1をダウンロードしています。しばらくお待ちください..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "インストール" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "ページ $1 / $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "クレジット" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "評価" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "開発者" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "検索" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "省略名:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "インストールが完了しました:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "未分類" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "再インストール" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "開発協力者" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "以前の開発者" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "開発者" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "クレジット" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "以前の開発協力者" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "以前の開発者" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "インストール済みのMod:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "オンラインでModを検索" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Modの説明がありません" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Modの情報:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "名前を変更" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "選択したModパックを削除" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "選択したModを削除" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Modファイルを選択:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mod" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Modの説明がありません" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "名前を変更" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Modファイルを選択:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "選択したModを削除" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "選択したModパックを削除" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "アドレスとポート:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "名前とパスワード:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "公開サーバーリスト" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "削除" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "接続" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "クリエイティブモード" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "ダメージ有効" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP有効" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "クライアント" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "作成" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "接続" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "設定" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "ゲームスタート" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "ワールドを選択:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "クリエイティブモード" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" msgstr "ダメージ有効" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "公開サーバー" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "削除" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "名前とパスワード" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "名前とパスワード:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "公開サーバーリスト" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP有効" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "バインドアドレス" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "ポート" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "設定" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "サーバーのポート" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "クリエイティブモード" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "ダメージ有効" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "名前とパスワード" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "作成" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "ワールドが作成または選択されていません!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "ポート" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "公開サーバー" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "ワールドを選択:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "サーバー" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "不透明な葉" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "サーバーのポート" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "シンプルな葉" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "ゲームスタート" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "綺麗な葉" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "フィルタ無し" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "バイリニアフィルタ" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "トリリニアフィルタ" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "ミップマップ無し" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "ミップマップ" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "異方性フィルタ" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "シングルプレイヤーのワールドをリセットしてよろしいですか?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "いいえ!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "滑らかな光" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "パーティクル有効化" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3Dの雲" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "不透明な水" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "ガラスを繋げる" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "ノードをハイライト" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "テクスチャリング:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "シングルプレイヤーのワールドをリセットしてよろしいですか?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "レンダリング:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "バイリニアフィルタ" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "ドライバーを変更するためMinetestを再起動します" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "シェーダー" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "操作変更" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "シングルプレイヤーのワールドをリセット" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "メニューの大きさ" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "メニューの大きさとして設定されている数値: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "タッチ位置を自由にする" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "タッチのしきい値(ピクセル)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "バンプマッピング" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "操作変更" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "ガラスを繋げる" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "パーティクル有効化" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "綺麗な葉" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "メニューの大きさ" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "ノーマルマップの生成" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "フィルタ無し" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "ミップマップ無し" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "いいえ!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "ノードをハイライト" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.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 msgid "Parallax Occlusion" msgstr "視差遮蔽マッピング" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "揺れる水" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "シングルプレイヤーのワールドをリセット" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "揺れる葉" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "メニューの大きさとして設定されている数値: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "揺れる草花" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "シェーダーを有効にするにはOpenGLを使用する必要があります。" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "設定" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "シングルプレイ開始" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "シェーダー" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: 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 +msgid "Touch free target" +msgstr "タッチ位置を自由にする" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "タッチのしきい値(ピクセル)" + +#: 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 Plants" +msgstr "揺れる草花" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "揺れる水" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Mod設定" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "メイン" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "シングルプレイ開始" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "プレイ" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "シングルプレイヤー" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "テクスチャパックを選択:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "情報がありません" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "テクスチャパックを選択:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "テクスチャ" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "テクスチャ読み込み中..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "接続失敗(またはタイムアウト)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "シェーダー構築中..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "ノードの設定中..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "ノードを設定中" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "テクスチャを設定中..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "完了!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "メインメニュー" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "ノードを設定中" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "名前が長過ぎます。" +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "ノードの設定中..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "テクスチャを設定中..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "テクスチャ読み込み中..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "シェーダー構築中..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "接続失敗(またはタイムアウト)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "ワールドが選択されていないアドレスです。続行できません。" - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "ワールドが存在しません: " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "ゲーム\"の読み込みができません" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "無効なgamespecです。" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "ワールドが存在しません: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "決定" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"詳細はdebug.txtをご覧ください。" -#: src/game.cpp:1072 -msgid "You died." -msgstr "死にました。" +#: src/game.cpp +msgid "Change Keys" +msgstr "操作変更" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "リスポーン" +#: src/game.cpp +msgid "Change Password" +msgstr "パスワード変更" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "サーバー接続中..." + +#: src/game.cpp +msgid "Continue" +msgstr "再開" + +#: src/game.cpp +msgid "Creating client..." +msgstr "クライアント起動中..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "サーバー起動中..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"基本操作:\n" +"- WASD: 移動\n" +"- スペース: ジャンプ、登る\n" +"- Shift: スニーク、降りる\n" +"- Q: アイテムを落とす\n" +"- I: インベントリ\n" +"- マウス: 見回す\n" +"- 左クリック: 破壊、パンチ\n" +"- 右クリック: 設置、使用\n" +"- ホイール: アイテム選択\n" +"- T: チャット画面\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -652,525 +725,490 @@ msgstr "" "- タッチしてドラッグ、二本指タップ:\n" " --> アイテムを一つスロットに置く\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"基本操作:\n" -"- WASD: 移動\n" -"- スペース: ジャンプ、登る\n" -"- Shift: スニーク、降りる\n" -"- Q: アイテムを落とす\n" -"- I: インベントリ\n" -"- マウス: 見回す\n" -"- 左クリック: 破壊、パンチ\n" -"- 右クリック: 設置、使用\n" -"- ホイール: アイテム選択\n" -"- T: チャット画面\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "再開" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "パスワード変更" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "音量" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "操作変更" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "タイトル" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "終了" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "終了中..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "サーバー起動中..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "クライアント起動中..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "アドレス解決中..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "サーバー接続中..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "アイテム定義中..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "ノード定義中..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "通信中..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KB/秒" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "通信中..." + +#: src/game.cpp msgid "MiB/s" msgstr "MB/秒" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"詳細はdebug.txtをご覧ください。" +#: src/game.cpp +msgid "Node definitions..." +msgstr "ノード定義中..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "決定" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "アドレス解決中..." + +#: src/game.cpp +msgid "Respawn" +msgstr "リスポーン" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "終了中..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "音量" + +#: src/game.cpp +msgid "You died." +msgstr "死にました。" + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "エンター " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "決定" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "操作設定です。(変更に失敗した場合、minetest.confから該当する設定を削除してください)" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "「使用」キーで降りる" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "「ジャンプ」キー二回押しで飛行モード" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "キーが重複しています" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "キー入力待ち" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "前進" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "後退" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "左" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "右" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "使用" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "ジャンプ" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "スニーク" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "落とす" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "インベントリ" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "チャット" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "コマンド" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "コンソール" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "飛行モード" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "「ジャンプ」キー二回押しで飛行モード" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "高速移動モード" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "落とす" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "映画風カメラ" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "前進" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "すり抜けモード" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "インベントリ" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "視野範囲変更" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "ジャンプ" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "キーが重複しています" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"操作設定です。(変更に失敗した場合、minetest.confから該当する設定を削除してく" +"ださい)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "左" + +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "スタックの表示" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "古いパスワード" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "視野範囲変更" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "新しいパスワード" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "右" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "パスワードの確認" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "スニーク" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "映画風カメラ" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "高速移動モード" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "飛行モード" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "すり抜けモード" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "使用" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "キー入力待ち" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "変更" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "パスワードの確認" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "新しいパスワード" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "古いパスワード" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "パスワードが一致しません!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "音量: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "閉じる" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "左ボタン" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "音量: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "中ボタン" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "右ボタン" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Xボタン1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "戻るキー" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "消す" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "エンター" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "タブ" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Xボタン2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "コントロール" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "かな" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "メニュー" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "ポーズ" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "変換" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Finalキー" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junjaキー" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "半角/全角" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "無変換" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "終了" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "モード変更" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Page Down" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Page Up" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "スペース" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "下" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "実行キー" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "印刷キー" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "選択キー" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "上" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "ヘルプ" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "左Windows" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "アプリ" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "テンキー 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "テンキー 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "右Windows" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "スリープ" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "テンキー 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "テンキー 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "テンキー 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "テンキー 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "テンキー 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "テンキー 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "テンキー *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "テンキー +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "テンキー -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "テンキー /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "テンキー 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "テンキー 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "左Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "右Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "左Ctrl" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "左メニュー" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "右Ctrl" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "右メニュー" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "読点" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "-" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "." - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "プラス" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr ":" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "戻るキー" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "消す" + +#: src/keycode.cpp +msgid "Comma" +msgstr "読点" + +#: src/keycode.cpp +msgid "Control" +msgstr "コントロール" + +#: src/keycode.cpp +msgid "Convert" +msgstr "変換" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "下" + +#: src/keycode.cpp +msgid "End" +msgstr "終了" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "実行キー" + +#: src/keycode.cpp +msgid "Final" +msgstr "Finalキー" + +#: src/keycode.cpp +msgid "Help" +msgstr "ヘルプ" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junjaキー" + +#: src/keycode.cpp +msgid "Kana" +msgstr "かな" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "半角/全角" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "左ボタン" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "左Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "左メニュー" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "左Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "左Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "メニュー" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "中ボタン" + +#: src/keycode.cpp +msgid "Minus" +msgstr "-" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "モード変更" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Down" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "無変換" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "テンキー *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "テンキー +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "テンキー -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "テンキー /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "テンキー 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "テンキー 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "テンキー 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "テンキー 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "テンキー 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "テンキー 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "テンキー 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "テンキー 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "テンキー 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "テンキー 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEMクリア" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "ポーズ" + +#: src/keycode.cpp +msgid "Period" +msgstr "." + +#: src/keycode.cpp +msgid "Plus" +msgstr "プラス" + +#: src/keycode.cpp +msgid "Print" +msgstr "印刷キー" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Up" + +#: src/keycode.cpp +msgid "Return" +msgstr "エンター" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "右ボタン" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "右Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "右メニュー" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "右Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "右Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "選択キー" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "スリープ" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "スペース" + +#: src/keycode.cpp +msgid "Tab" +msgstr "タブ" + +#: src/keycode.cpp +msgid "Up" +msgstr "上" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Xボタン1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Xボタン2" + +#: src/keycode.cpp msgid "Zoom" msgstr "ズーム" -#~ msgid " MB/s" -#~ msgstr " MB/秒" +#~ msgid "Fly mode" +#~ msgstr "飛行モード" #~ msgid " KB/s" #~ msgstr " KB/秒" -#~ msgid "Fly mode" -#~ msgstr "飛行モード" +#~ msgid " MB/s" +#~ msgstr " MB/秒" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "ドライバーを変更するためMinetestを再起動します" + +#~ msgid "Rendering:" +#~ msgstr "レンダリング:" + +#~ msgid "Online mod repository" +#~ msgstr "オンラインでModを検索" diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po index cb8acab72..ee55e7995 100644 --- a/po/jbo/minetest.po +++ b/po/jbo/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-08-15 16:30+0200\n" "Last-Translator: Wuzzy \n" -"Language-Team: Lojban " -"\n" +"Language-Team: Lojban \n" "Language: jbo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,617 +19,675 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "lo ralju" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "je'e" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "samjongau" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr ".i ca'o samymo'i" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "fitytoltu'i" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "nitcu" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "rejgau" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "fitytoltu'i" - -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "selpli" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "munje cmene" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "le munje ke cunso namcu" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "zbasu" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr ".i .e'unai la'o gy.Minimal Development Test.gy. cu tutci le finti" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "rejgau" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "selpli" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr ".i lo munje me'e la'o gy.$1.gy. cu zasti" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "zbasu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "le munje ke cunso namcu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr ".i .e'unai la'o gy.Minimal Development Test.gy. cu tutci le finti" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "munje cmene" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr ".i xu do je'u djica lo nu vimcu la'o gy.$1.gy." -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "go'i" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "nasai go'i" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "nasai go'i" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "go'i" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr ".i xu do djica lo nu vimcu lo munje be me'e zoi gy.$1.gy." -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "na go'i" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "fitytu'i" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "kalsa" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "sisku" +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "$1 moi le'i papri poi ke'a $1 mei" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "sisku" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "tordu cmene" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "kalsa" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "$1 moi le'i papri poi ke'a $1 mei" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "lo finti liste" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "lo finti liste" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "lo samjudri jo'u judrnporte" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "lo cmene .e lo lerpoijaspu" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "vimcu" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "samjongau" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "le nu finti kelci" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "lo samtciselse'u" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "cnino" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "samjongau" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "le nu finti kelci" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "vimcu" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "lo cmene .e lo lerpoijaspu" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "cfari fa lo nu kelci" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "le nu finti kelci" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:100 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "lo cmene .e lo lerpoijaspu" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "cnino" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr ".i lo no munje cu puzi zbasu gi'a cuxna" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "lo judrnporte" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "gubni" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "Select World:" msgstr "cuxna lo munje" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "le nu finti kelci" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "gubni" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "lo cmene .e lo lerpoijaspu" - -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "lo judrnporte" - -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "lo samtcise'u judrnporte" - -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 -msgid "No world created or selected!" -msgstr ".i lo no munje cu puzi zbasu gi'a cuxna" - -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "lo samtcise'u" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "lo tolkli pezli" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "lo samtcise'u judrnporte" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "lo sampu pezli" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "cfari fa lo nu kelci" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "lo melbi pezli" - -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "lo puvyrelyli'iju'e" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "lo puvycibli'iju'e" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "lo puvrmipmepi" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr ".i xu do je'u djica lo nu kraga'igau le do za'e pavykelci munje" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "nasai go'i" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "lo xutla se gusni" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "lo kantu" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "le bliku dilnu" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "lo tolkli djacu" - -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "lo jorne blaci" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr ".i xu do je'u djica lo nu kraga'igau le do za'e pavykelci munje" -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "lo ti'orkemsamtci" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "lo puvyrelyli'iju'e" -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "kraga'igau le za'e pavykelci munje" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "lo jorne blaci" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "lo kantu" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "lo melbi pezli" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "lo puvrmipmepi" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "nasai go'i" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "lo tolkli pezli" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "lo tolkli djacu" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "kraga'igau le za'e pavykelci munje" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "lo ti'orkemsamtci" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "lo sampu pezli" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "lo xutla se gusni" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "lo puvycibli'iju'e" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "lo ralju" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "pa kelci" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr ".i ca'o samymo'i le tengu datnyvei" - -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." +#: src/client.cpp +msgid "Connection timed out." msgstr "" -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr ".i ca'o samymo'i le dacti ke tengu datnyvei" - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" +#: src/client.cpp +msgid "Initializing nodes" +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." + +#: src/client.cpp +msgid "Item textures..." +msgstr ".i ca'o samymo'i le dacti ke tengu datnyvei" + +#: src/client.cpp +msgid "Loading textures..." +msgstr ".i ca'o samymo'i le tengu datnyvei" + +#: src/client.cpp +msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." msgstr "" -#: src/game.cpp:1072 -msgid "You died." -msgstr ".i do pu morsi" +#: src/game.cpp +msgid "Change Keys" +msgstr "" -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "gasnu lo nu mi tolcanci" +#: src/game.cpp +msgid "Change Password" +msgstr "gafygau lo lerpoijaspu" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Connecting to server..." +msgstr ".i ca'o troci lo za'i samjo'e lo samse'u" + +#: src/game.cpp +msgid "Continue" +msgstr "ranji" + +#: src/game.cpp +msgid "Creating client..." +msgstr ".i lo samtciselse'u cu se zbasu" + +#: src/game.cpp +msgid "Creating server..." +msgstr ".i lo samtcise'u cu se zbasu" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -645,506 +703,473 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "ranji" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "gafygau lo lerpoijaspu" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "tolcfagau" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr ".i lo samtcise'u cu se zbasu" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr ".i lo samtciselse'u cu se zbasu" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr ".i ca'o troci lo nu facki lo samjudri" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr ".i ca'o troci lo za'i samjo'e lo samse'u" - -#: src/game.cpp:2317 +#: src/game.cpp #, fuzzy msgid "Item definitions..." msgstr ".i ca'o samymo'i tu'a le dacti" -#: src/game.cpp:2322 +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp #, fuzzy msgid "Node definitions..." msgstr ".i ca'o samymo'i tu'a lo me la'o gy.node.gy." -#: src/game.cpp:2329 -msgid "Media..." +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" msgstr "" -#: src/game.cpp:2334 -msgid "KiB/s" +#: src/game.cpp +msgid "Resolving address..." +msgstr ".i ca'o troci lo nu facki lo samjudri" + +#: src/game.cpp +msgid "Respawn" +msgstr "gasnu lo nu mi tolcanci" + +#: src/game.cpp +msgid "Shutting down..." msgstr "" -#: src/game.cpp:2338 -msgid "MiB/s" +#: src/game.cpp +msgid "Sound Volume" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" +#: src/game.cpp +msgid "You died." +msgstr ".i do pu morsi" -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp #, fuzzy msgid "ok" msgstr "je'e" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "ko da'ergau le batke" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "za'i ca'u muvdu" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "za'i ti'a muvdu" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "za'i zu'e muvdu" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "za'i ri'u muvdu" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "mu'e pilno" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "mu'e plipe" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "za'i masno cadzu" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "mu'e falcru" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "lo dacti uidje" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "samta'a" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "minde" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "mu'e co'a jonai mo'u vofli" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "mu'e co'a jonai mo'u sutra" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "mu'e falcru" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "za'i ca'u muvdu" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "lo dacti uidje" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "mu'e plipe" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "mu'e cuxna fi le'i se kuspe" +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "za'i zu'e muvdu" + +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "lo slabu lerpoijaspu" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "mu'e cuxna fi le'i se kuspe" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "lo cnino lerpoijaspu" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "za'i ri'u muvdu" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "le rapli lerpoijaspu" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "za'i masno cadzu" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "mu'e co'a jonai mo'u sutra" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "mu'e co'a jonai mo'u vofli" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "mu'e pilno" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "ko da'ergau le batke" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "gafygau" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "le rapli lerpoijaspu" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "lo cnino lerpoijaspu" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "lo slabu lerpoijaspu" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr ".i lo lerpoijaspu na mintu" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "lo ni sance " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "lo zulselpevysmacu" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "lo ni sance " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "lo mijyselpevysmacu" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "lo prityselpevysmacu" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "la'o gy.X Button 1.gy." - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "la'o gy.X Button 2.gy." - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "la'o gy.Mode Change.gy." - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "slaka bu" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "vu'u bu" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "denpa bu" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "su'i bu" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "la'o gy.Attn.gy." -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "slaka bu" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "la'o gy.CrSel.gy." -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "la'o gy.Erase OEF.gy." -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "la'o gy.ExSel.gy." -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "lo zulselpevysmacu" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "lo mijyselpevysmacu" + +#: src/keycode.cpp +msgid "Minus" +msgstr "vu'u bu" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "la'o gy.Mode Change.gy." + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "la'o gy.OEM Clear.gy." -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "la'o gy.PA1.gy." -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "denpa bu" + +#: src/keycode.cpp +msgid "Plus" +msgstr "su'i bu" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "lo prityselpevysmacu" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "la'o gy.X Button 1.gy." + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "la'o gy.X Button 2.gy." + +#: src/keycode.cpp msgid "Zoom" msgstr "" diff --git a/po/ko/minetest.po b/po/ko/minetest.po index 9cb920bd0..afebeaa98 100644 --- a/po/ko/minetest.po +++ b/po/ko/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-07-08 23:30+0200\n" "Last-Translator: Tae Lim Kook \n" "Language-Team: Korean place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "" - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "" + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" msgstr "" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" msgstr "" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:223 -msgid "Left Button" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "" diff --git a/po/ky/minetest.po b/po/ky/minetest.po index 7eb4ec2c3..da39e408a 100644 --- a/po/ky/minetest.po +++ b/po/ky/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-06-01 18:09+0200\n" "Last-Translator: Chynggyz Jumaliev \n" "Language-Team: LANGUAGE \n" @@ -18,661 +18,692 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Башкы меню" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Туташуу" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Жүктөлүүдө..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -#, fuzzy -msgid "World:" -msgstr "Дүйнөнү тандаңыз:" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Жокко чыгаруу" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -#, fuzzy -msgid "Hide Game" -msgstr "Оюн" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "көз карандылыктары:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Сактоо" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Жокко чыгаруу" - -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Баарын күйгүзүү" - -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Баарын өчүрүү" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "күйгүзүлгөн" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Баарын күйгүзүү" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Баарын күйгүзүү" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Дүйнө аты" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Оюн" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Жаратуу" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Сактоо" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Дүйнөнү тандаңыз:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "күйгүзүлгөн" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Жаратуу" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Оюн" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Дүйнө аты" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ооба" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ооба" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Дүйнөнү өчүрүү" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Жок" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Кабыл алуу" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Дүйнөнү инициалдаштыруу катасы" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Дүйнө аты" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Алкыштар" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Алкыштар" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Дүйнөнү тандаңыз:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Дареги/порту" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Аты/сырсөзү" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, fuzzy -msgid "Public Serverlist" -msgstr "Жалпылык серверлердин тизмеси:" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Өчүрүү" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Туташуу" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Жаратуу режими" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "күйгүзүлгөн" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Өчүрүү" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Аты/сырсөзү" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Public Serverlist" +msgstr "Жалпылык серверлердин тизмеси:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "күйгүзүлгөн" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Жаңы" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Ырастоо" -#: builtin/mainmenu/tab_server.lua:29 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Жаратуу режими" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Убалды күйгүзүү" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Аты/сырсөзү" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Жаңы" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Жалпылык" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Дүйнөнү тандаңыз:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua #, fuzzy msgid "Start Game" msgstr "Оюнду баштоо/туташуу" -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Дүйнөнү тандаңыз:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Жаратуу режими" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Убалды күйгүзүү" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Жалпылык" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Аты/сырсөзү" - -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "3D-булуттар" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 -msgid "No world created or selected!" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_server.lua:191 -msgid "Server" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Күңүрт суу" - -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Кооз бактар" - -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bilinear Filter" msgstr "Экисызык чыпкалоосу" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Үчсызык чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Тегиз жарык" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Бөлүкчөлөрдү күйгүзүү" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "3D-булуттар" - -#: builtin/mainmenu/tab_settings.lua:208 -#, fuzzy -msgid "Opaque Water" -msgstr "Күңүрт суу" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Туташуу" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Көлөкөлөгүчтөр" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Баскычтарды өзгөртүү" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Бир кишилик" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mip-текстуралоо" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Баскычтарды өзгөртүү" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Туташуу" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Бөлүкчөлөрдү күйгүзүү" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Кооз бактар" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Күңүрт суу" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Water" +msgstr "Күңүрт суу" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Бир кишилик" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Ырастоолор" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Бир кишилик" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Көлөкөлөгүчтөр" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +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 "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Ырастоо" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Башкы меню" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Бир кишилик" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Ойноо" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Бир кишилик" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Буюм текстуралары..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "Жүктөлүүдө..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "Дареги чечилүүдө..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Буюм текстуралары..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Башкы меню" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Толугураак маалымат үчүн, debug.txt'ти текшериңиз." + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Баскычтарды өзгөртүү" + +#: src/game.cpp +msgid "Change Password" +msgstr "Сырсөздү өзгөртүү" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Серверге туташтырылууда..." + +#: src/game.cpp +msgid "Continue" msgstr "Улантуу" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Сиз өлдүңүз." +#: src/game.cpp +msgid "Creating client..." +msgstr "Клиент жаратылууда..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Кайтадан жаралуу" +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Сервер жаратылууда...." -#: src/game.cpp:1092 -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/game.cpp:1106 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -698,517 +729,550 @@ msgstr "" "- Чычкан дөңгөлөгү: буюмду тандоо\n" "- T: маек\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Улантуу" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Сырсөздү өзгөртүү" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Үн көлөмү" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Баскычтарды өзгөртүү" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Менюга чыгуу" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Оюндан чыгуу" -#: src/game.cpp:1841 -#, fuzzy -msgid "Shutting down..." -msgstr "Оюн өчүрүлүүдө..." - -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Сервер жаратылууда...." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Клиент жаратылууда..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Дареги чечилүүдө..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Серверге туташтырылууда..." - -#: src/game.cpp:2317 +#: src/game.cpp #, fuzzy msgid "Item definitions..." msgstr "Буюм текстуралары..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -"\n" -"Толугураак маалымат үчүн, debug.txt'ти текшериңиз." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Улантуу" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Дареги чечилүүдө..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Кайтадан жаралуу" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "Оюн өчүрүлүүдө..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Үн көлөмү" + +#: src/game.cpp +msgid "You died." +msgstr "Сиз өлдүңүз." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "баскычты басыңыз" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Алга" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Артка" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Солго" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Оңго" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Колдонуу" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Секирүү" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Уурданып басуу" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Ыргытуу" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Мүлк-шайман" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Маек" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Команда" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Консоль" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Учууга которуу" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Тез басууга которуу" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Ыргытуу" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Алга" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Мүлк-шайман" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Секирүү" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Солго" + +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Оңго" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Уурданып басуу" + +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Тез басууга которуу" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Тез басууга которуу" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Учууга которуу" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Колдонуу" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "баскычты басыңыз" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Эски сырсөз" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Жаңы сырсөз" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Сырсөздү аныктоо" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Өзгөртүү" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Сырсөздү аныктоо" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Жаңы сырсөз" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Эски сырсөз" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Сырсөздөр дал келген жок!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Үн көлөмү: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Чыгуу" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Сол баскыч" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Үн көлөмү: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Ортоңку баскыч" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Оң баскыч" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Артка" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Тазалоо" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Кана" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Меню" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Пауза" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Кандзи" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Режимди өзгөртүү" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Кийинки" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Боштук" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Ылдый" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Аткаруу" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Басма" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Тандоо" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Өйдө" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Жардам" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Тез сүрөт" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Сол Windows" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Тиркемелер" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Кош. клав. 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Кош. клав. 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Оң Windows" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Уйку" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Кош. клав. 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Кош. клав. 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Кош. клав. 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Кош. клав. 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Кош. клав. 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Кош. клав. 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Кош. клав. *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Кош. клав. +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Кош. клав. -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Кош. клав. /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Кош. клав. 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Кош. клав. 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Сол Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Оң Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Сол Ctrl" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Сол меню" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Оң Ctrl" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Оң меню" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Үтүр" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Кемитүү белгиси" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Айланма сан" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Кошуу белгиси" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Артка" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Тазалоо" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Үтүр" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Ылдый" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Аткаруу" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "Жардам" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Кана" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Кандзи" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Сол баскыч" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Сол Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Сол меню" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Сол Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Сол Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Меню" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Ортоңку баскыч" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Кемитүү белгиси" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Режимди өзгөртүү" + +#: src/keycode.cpp +msgid "Next" +msgstr "Кийинки" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Кош. клав. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Кош. клав. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Кош. клав. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Кош. клав. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Кош. клав. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Кош. клав. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Кош. клав. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Кош. клав. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Кош. клав. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Кош. клав. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Кош. клав. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Кош. клав. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Кош. клав. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Кош. клав. 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Пауза" + +#: src/keycode.cpp +msgid "Period" +msgstr "Айланма сан" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Кошуу белгиси" + +#: src/keycode.cpp +msgid "Print" +msgstr "Басма" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Оң баскыч" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Оң Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Оң меню" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Оң Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Оң Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Тандоо" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Уйку" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Тез сүрөт" + +#: src/keycode.cpp +msgid "Space" +msgstr "Боштук" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Өйдө" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "Масштаб" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Оюн" +#~ msgid "Downloading" +#~ msgstr "Ылдый" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Оюн" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-текстуралоо" -#~ msgid "Favorites:" -#~ msgstr "Тандалмалар:" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Анизатропия чыпкалоосу" -#, fuzzy -#~ msgid "Password" -#~ msgstr "Эски сырсөз" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу" -#, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Чектүү суюктук" +#~ msgid "is required by:" +#~ msgstr "талап кылынганы:" + +#~ msgid "Configuration saved. " +#~ msgstr "Конфигурация сакталды. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Эскертүү: Туура эмес конфигурация. " + +#~ msgid "Multiplayer" +#~ msgstr "Көп кишилик" + +#~ msgid "Advanced" +#~ msgstr "Кошумча" + +#~ msgid "Show Public" +#~ msgstr "Жалпылыкты көрсөтүү" + +#~ msgid "Show Favorites" +#~ msgstr "Тандалмаларды көрсөтүү" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз." + +#~ msgid "Create world" +#~ msgstr "Дүйнөнү жаратуу" + +#~ msgid "Address required." +#~ msgstr "Дареги талап кылынат." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок" + +#~ msgid "Files to be deleted" +#~ msgstr "Өчүрүлө турган файлдар" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок" #~ msgid "" #~ "Default Controls:\n" @@ -1235,60 +1299,21 @@ msgstr "Масштаб" #~ "- ESC: бул меню\n" #~ "- T: маек\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок" - -#~ msgid "Files to be deleted" -#~ msgstr "Өчүрүлө турган файлдар" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок" - -#~ msgid "Address required." -#~ msgstr "Дареги талап кылынат." - -#~ msgid "Create world" -#~ msgstr "Дүйнөнү жаратуу" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз." - -#~ msgid "Show Favorites" -#~ msgstr "Тандалмаларды көрсөтүү" - -#~ msgid "Show Public" -#~ msgstr "Жалпылыкты көрсөтүү" - -#~ msgid "Advanced" -#~ msgstr "Кошумча" - -#~ msgid "Multiplayer" -#~ msgstr "Көп кишилик" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Эскертүү: Туура эмес конфигурация. " - -#~ msgid "Configuration saved. " -#~ msgstr "Конфигурация сакталды. " - -#~ msgid "is required by:" -#~ msgstr "талап кылынганы:" - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу" - -#~ msgid "Anisotropic Filtering" -#~ msgstr "Анизатропия чыпкалоосу" - -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-текстуралоо" +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Чектүү суюктук" #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Ылдый" +#~ msgid "Password" +#~ msgstr "Эски сырсөз" + +#~ msgid "Favorites:" +#~ msgstr "Тандалмалар:" + +#, fuzzy +#~ msgid "Games" +#~ msgstr "Оюн" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Оюн" diff --git a/po/lt/minetest.po b/po/lt/minetest.po index bd68c5840..6e813342b 100644 --- a/po/lt/minetest.po +++ b/po/lt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-12-11 19:23+0200\n" "Last-Translator: Jonas Kriaučiūnas \n" "Language-Team: LANGUAGE \n" @@ -19,636 +19,695 @@ msgstr "" "%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Pagrindinis meniu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Gerai" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Jungtis" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Įkeliama..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Pasaulis:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Slėpti vidinius" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Slėpti papild. pakų turinį" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Papildinys:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Priklauso:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Įrašyti" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Atsisakyti" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Įjungti papildinį" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Priklauso:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Išjungti papildinį" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "įjungtas" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Įjungti papildinį" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Įjungti visus" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Pasaulio pavadinimas" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Slėpti vidinius" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Slėpti papild. pakų turinį" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Papildinys:" + +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Įrašyti" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Pasaulis:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Pasaulis, pavadintas „$1“ jau yra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Sukurti" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Žaidimas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Seed" msgstr "Sėkla" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Žaidimas" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Sukurti" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Pasaulio pavadinimas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:99 -msgid "A world named \"$1\" already exists" -msgstr "Pasaulis, pavadintas „$1“ jau yra" - -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Taip" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Taip" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Ištrinti pasaulį „$1“?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ne" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Pervadinti papildinių paką:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp #, fuzzy msgid "Accept" msgstr "Priimti" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Pervadinti papildinių paką:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Nepavyko įdiegti $1 į $2" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Įdiegti" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Pasaulio pavadinimas" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Įdiegti iš naujo" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Įdiegti" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Padėkos" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Pagrindiniai kūrėjai" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktyvūs pagalbininkai" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Pagrindiniai kūrėjai" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Padėkos" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua #, fuzzy msgid "Previous Core Developers" msgstr "Pagrindiniai kūrėjai" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Įdiegti papildiniai:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Papildiniai internete" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Papildinio aprašymas nepateiktas" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Papildinio informacija:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Pervadinti" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Pašalinti pasirinktą papildinį" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Pašalinti pasirinktą papildinį" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Pasirinkite papildinio failą:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Papildiniai" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Papildinio aprašymas nepateiktas" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Pervadinti" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Pasirinkite papildinio failą:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Pašalinti pasirinktą papildinį" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Pašalinti pasirinktą papildinį" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Adresas/Prievadas" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Vardas/slaptažodis" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "Žaisti tinkle(klientas)" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Viešų serverių sąrašas" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Ištrinti" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Jungtis" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Kūrybinė veiksena" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "įjungtas" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Ištrinti" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Vardas/slaptažodis" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Viešų serverių sąrašas" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "įjungtas" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "Žaisti tinkle(klientas)" +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Naujas" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Konfigūruoti" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Pradėti žaidimą" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Pasirinkite pasaulį:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "Creative Mode" msgstr "Kūrybinė veiksena" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Leisti sužeidimus" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Viešas" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua msgid "Name/Password" msgstr "Vardas/slaptažodis" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Naujas" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Serverio prievadas" - -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Viešas" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Pasirinkite pasaulį:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Serveris" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Nepermatomas vanduo" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Serverio prievadas" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Pradėti žaidimą" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -#, fuzzy -msgid "Smooth Lighting" -msgstr "Apšvietimo efektai" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "Trimačiai debesys" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Nepermatomas vanduo" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bumpmapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Nustatyti klavišus" + +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Connected Glass" msgstr "Jungtis" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normalmaps" +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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Shaders" -msgstr "Šešėliai" +msgid "Opaque Leaves" +msgstr "Nepermatomas vanduo" -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Nustatyti klavišus" +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Nepermatomas vanduo" -#: builtin/mainmenu/tab_settings.lua:236 +#: builtin/mainmenu/tab_settings.lua +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Reset singleplayer world" msgstr "Žaisti vienam" -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 +#: builtin/mainmenu/tab_settings.lua msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 -msgid "Bumpmapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 -msgid "Generate Normalmaps" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 -msgid "Parallax Occlusion" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Nustatymai" -#: builtin/mainmenu/tab_simple_main.lua:82 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Start Singleplayer" -msgstr "Žaisti vienam" +msgid "Shaders" +msgstr "Šešėliai" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Smooth Lighting" +msgstr "Apšvietimo efektai" + +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: 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 Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Konfigūruoti" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Pagrindinis meniu" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Žaisti vienam" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Žaisti" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Žaisti vienam" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "" + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "Įkeliama..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "Ieškoma adreso..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "" - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Pagrindinis meniu" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Pagrindinis meniu" + +#: 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 "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/game.cpp #, fuzzy -msgid "Proceed" +msgid "Change Keys" +msgstr "Nustatyti klavišus" + +#: src/game.cpp +msgid "Change Password" +msgstr "Keisti slaptažodį" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Jungiamasi prie serverio..." + +#: src/game.cpp +msgid "Continue" msgstr "Tęsti" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Jūs numirėte." +#: src/game.cpp +#, fuzzy +msgid "Creating client..." +msgstr "Kuriamas klientas..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Prisikelti" +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Kuriamas serveris...." -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -664,562 +723,530 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Tęsti" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Keisti slaptažodį" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Nustatyti klavišus" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Grįžti į meniu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Išeiti iš žaidimo" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Kuriamas serveris...." - -#: src/game.cpp:1984 -#, fuzzy -msgid "Creating client..." -msgstr "Kuriamas klientas..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Ieškoma adreso..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Jungiamasi prie serverio..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +#, fuzzy +msgid "Proceed" +msgstr "Tęsti" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Ieškoma adreso..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Prisikelti" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "Jūs numirėte." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Klavišas jau naudojamas" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "paspauskite klavišą" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Pirmyn" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Atgal" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Kairėn" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Dešinėn" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Naudoti" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Pašokti" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Mesti" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventorius" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Susirašinėti" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Komanda" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Mesti" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Pirmyn" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventorius" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Pašokti" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klavišas jau naudojamas" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Kairėn" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Senas slaptažodis" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Naujas slaptažodis" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Dešinėn" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Patvirtinti slaptažodį" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Naudoti" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "paspauskite klavišą" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Pakeisti" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Patvirtinti slaptažodį" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Naujas slaptažodis" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Senas slaptažodis" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Slaptažodžiai nesutampa!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Išeiti" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Kairysis mygtukas" - -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Vidurinis mygtukas" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Dešinysis mygtukas" - -#: src/keycode.cpp:223 -msgid "X Button 1" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:224 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Meniu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift (Lyg2)" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Tarpas" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Žemyn" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Vykdyti" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Aukštyn" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Pagalba" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Įterpti" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Kairysis Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Dešinysis Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Kairysis Control" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Dešinysis Control" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Kablelis" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plius" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Kablelis" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Žemyn" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Vykdyti" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "Pagalba" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Įterpti" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Kairysis mygtukas" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Kairysis Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Kairysis Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Meniu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Vidurinis mygtukas" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plius" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Dešinysis mygtukas" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Dešinysis Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Dešinysis Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift (Lyg2)" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "Tarpas" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "Aukštyn" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp #, fuzzy msgid "Zoom" msgstr "Pritraukti" -#~ msgid "Game Name" -#~ msgstr "Žaidimo pavadinimas" +#~ msgid "Add mod:" +#~ msgstr "Pridėti papildinį:" -#~ msgid "GAMES" -#~ msgstr "ŽAIDIMAI" +#~ msgid "MODS" +#~ msgstr "PAPILDINIAI" -#~ msgid "Games" -#~ msgstr "Žaidimai" +#~ msgid "SINGLE PLAYER" +#~ msgstr "VIENAS ŽAIDĖJAS" -#~ msgid "Mods:" -#~ msgstr "Papildiniai:" +#~ msgid "SETTINGS" +#~ msgstr "NUSTATYMAI" -#~ msgid "edit game" -#~ msgstr "keisti žaidimą" +#~ msgid "Password" +#~ msgstr "Slaptažodis" -#~ msgid "new game" -#~ msgstr "naujas žaidimas" +#~ msgid "Name" +#~ msgstr "Vardas" + +#~ msgid "START SERVER" +#~ msgstr "PALEISTI SERVERĮ" + +#~ msgid "Favorites:" +#~ msgstr "Mėgiami:" + +#~ msgid "CLIENT" +#~ msgstr "ŽAISTI TINKLE" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Pridėti papildinį" + +#~ msgid "Remove selected mod" +#~ msgstr "Pašalinti pasirinktą papildinį" #, fuzzy #~ msgid "EDIT GAME" #~ msgstr "KEISTI ŽAIDIMĄ" -#~ msgid "Remove selected mod" -#~ msgstr "Pašalinti pasirinktą papildinį" +#~ msgid "new game" +#~ msgstr "naujas žaidimas" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Pridėti papildinį" +#~ msgid "edit game" +#~ msgstr "keisti žaidimą" -#~ msgid "CLIENT" -#~ msgstr "ŽAISTI TINKLE" +#~ msgid "Mods:" +#~ msgstr "Papildiniai:" -#~ msgid "Favorites:" -#~ msgstr "Mėgiami:" +#~ msgid "Games" +#~ msgstr "Žaidimai" -#~ msgid "START SERVER" -#~ msgstr "PALEISTI SERVERĮ" +#~ msgid "GAMES" +#~ msgstr "ŽAIDIMAI" -#~ msgid "Name" -#~ msgstr "Vardas" +#~ msgid "Game Name" +#~ msgstr "Žaidimo pavadinimas" -#~ msgid "Password" -#~ msgstr "Slaptažodis" - -#~ msgid "SETTINGS" -#~ msgstr "NUSTATYMAI" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "VIENAS ŽAIDĖJAS" - -#~ msgid "MODS" -#~ msgstr "PAPILDINIAI" - -#~ msgid "Add mod:" -#~ msgstr "Pridėti papildinį:" +#~ msgid "Online mod repository" +#~ msgstr "Papildiniai internete" diff --git a/po/minetest.pot b/po/minetest.pot index 2fd0ba1be..03302e224 100644 --- a/po/minetest.pot +++ b/po/minetest.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,615 +17,637 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:49 +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp msgid "Save" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:71 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 +#: builtin/mainmenu/dlg_config_world.lua msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:50 +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "World name" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 +#: builtin/mainmenu/dlg_create_world.lua msgid "Seed" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 +#: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:59 +#: builtin/mainmenu/dlg_create_world.lua msgid "Game" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:68 +#: builtin/mainmenu/dlg_create_world.lua msgid "You have no subgames installed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:73 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua msgid "Yes" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:28 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "No of course not!" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 +#: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:344 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 +#: builtin/mainmenu/store.lua msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 +#: builtin/mainmenu/store.lua msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua msgid "Shortname:" msgstr "" -#: builtin/mainmenu/store.lua:472 +#: builtin/mainmenu/store.lua msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 +#: builtin/mainmenu/store.lua msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "" -#: builtin/mainmenu/tab_credits.lua:22 +#: builtin/mainmenu/tab_credits.lua msgid "Credits" msgstr "" -#: builtin/mainmenu/tab_credits.lua:31 +#: builtin/mainmenu/tab_credits.lua msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 +#: builtin/mainmenu/tab_mods.lua msgid "No mod description available" msgstr "" -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 +#: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected modpack" msgstr "" -#: builtin/mainmenu/tab_mods.lua:106 +#: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua msgid "Select Mod File:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Name / Password :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Public Serverlist" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Delete" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative mode" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "New" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 +#: builtin/mainmenu/tab_server.lua msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Select World:" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "" -#: builtin/mainmenu/tab_server.lua:35 +#: builtin/mainmenu/tab_server.lua msgid "Public" msgstr "" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua msgid "Name/Password" msgstr "" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 +#: builtin/mainmenu/tab_server.lua msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 +#: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:22 +#: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 +#: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 +#: builtin/mainmenu/tab_settings.lua msgid "No Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:34 +#: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:43 +#: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" msgstr "" -#: builtin/mainmenu/tab_settings.lua:44 +#: builtin/mainmenu/tab_settings.lua msgid "Mipmap" msgstr "" -#: builtin/mainmenu/tab_settings.lua:45 +#: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:98 +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +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:102 +#: builtin/mainmenu/tab_settings.lua msgid "No!!!" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 +#: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 +#: builtin/mainmenu/tab_settings.lua msgid "Enable Particles" msgstr "" -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 +#: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 +#: builtin/mainmenu/tab_settings.lua msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 +#: builtin/mainmenu/tab_settings.lua msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_settings.lua:233 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:236 +#: builtin/mainmenu/tab_settings.lua msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:240 +#: builtin/mainmenu/tab_settings.lua msgid "GUI scale factor" msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 +#: builtin/mainmenu/tab_settings.lua msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 +#: builtin/mainmenu/tab_settings.lua msgid "Touch free target" msgstr "" -#: builtin/mainmenu/tab_settings.lua:256 +#: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold (px)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 +#: builtin/mainmenu/tab_settings.lua msgid "Waving Water" msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 +#: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" msgstr "" -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 +#: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua:308 +#: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:82 +#: builtin/mainmenu/tab_simple_main.lua msgid "Start Singleplayer" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 +#: builtin/mainmenu/tab_texturepacks.lua msgid "Select texture pack:" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp msgid "Loading textures..." msgstr "" -#: src/client.cpp:1736 +#: src/client.cpp msgid "Rebuilding shaders..." msgstr "" -#: src/client.cpp:1743 +#: src/client.cpp msgid "Initializing nodes..." msgstr "" -#: src/client.cpp:1760 +#: src/client.cpp msgid "Initializing nodes" msgstr "" -#: src/client.cpp:1768 +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:185 +#: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" -#: src/client/clientlauncher.cpp:223 +#: src/client/clientlauncher.cpp msgid "Player name too long." msgstr "" -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:425 +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" -#: src/client/clientlauncher.cpp:432 +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "" -#: src/game.cpp:1072 +#: src/game.cpp msgid "You died." msgstr "" -#: src/game.cpp:1073 +#: src/game.cpp msgid "Respawn" msgstr "" -#: src/game.cpp:1092 +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -641,7 +663,7 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -656,488 +678,488 @@ msgid "" "- T: chat\n" msgstr "" -#: src/game.cpp:1125 +#: src/game.cpp msgid "Continue" msgstr "" -#: src/game.cpp:1129 +#: src/game.cpp msgid "Change Password" msgstr "" -#: src/game.cpp:1134 +#: src/game.cpp msgid "Sound Volume" msgstr "" -#: src/game.cpp:1136 +#: src/game.cpp msgid "Change Keys" msgstr "" -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "" -#: src/game.cpp:1841 +#: src/game.cpp msgid "Shutting down..." msgstr "" -#: src/game.cpp:1948 +#: src/game.cpp msgid "Creating server..." msgstr "" -#: src/game.cpp:1984 +#: src/game.cpp msgid "Creating client..." msgstr "" -#: src/game.cpp:2159 +#: src/game.cpp msgid "Resolving address..." msgstr "" -#: src/game.cpp:2261 +#: src/game.cpp msgid "Connecting to server..." msgstr "" -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 +#: src/game.cpp msgid "Node definitions..." msgstr "" -#: src/game.cpp:2329 +#: src/game.cpp msgid "Media..." msgstr "" -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 +#: src/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:295 +#: src/guiKeyChangeMenu.cpp msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:373 +#: src/guiKeyChangeMenu.cpp msgid "press key" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 +#: src/guiKeyChangeMenu.cpp msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp msgid "Use" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp msgid "Toggle Cinematic" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 +#: src/guiPasswordChange.cpp msgid "Old Password" msgstr "" -#: src/guiPasswordChange.cpp:124 +#: src/guiPasswordChange.cpp msgid "New Password" msgstr "" -#: src/guiPasswordChange.cpp:139 +#: src/guiPasswordChange.cpp msgid "Confirm Password" msgstr "" -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:105 +#: src/guiVolumeChange.cpp msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:223 +#: src/keycode.cpp msgid "Left Button" msgstr "" -#: src/keycode.cpp:223 +#: src/keycode.cpp msgid "Middle Button" msgstr "" -#: src/keycode.cpp:223 +#: src/keycode.cpp msgid "Right Button" msgstr "" -#: src/keycode.cpp:223 +#: src/keycode.cpp msgid "X Button 1" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Back" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Clear" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Return" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Tab" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "X Button 2" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Capital" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Control" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Kana" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Menu" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Pause" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Shift" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Convert" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Escape" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Final" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Junja" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Kanji" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "End" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Home" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Mode Change" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Next" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Prior" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Space" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Down" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Execute" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Print" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Select" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Up" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Help" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Insert" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Snapshot" msgstr "" -#: src/keycode.cpp:232 +#: src/keycode.cpp msgid "Left Windows" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Right Windows" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Sleep" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad *" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad +" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad -" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad /" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:239 +#: src/keycode.cpp msgid "Num Lock" msgstr "" -#: src/keycode.cpp:239 +#: src/keycode.cpp msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp msgid "Left Shift" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp msgid "Right Shift" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp msgid "Left Control" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp msgid "Left Menu" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp msgid "Right Control" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp msgid "Right Menu" msgstr "" -#: src/keycode.cpp:243 +#: src/keycode.cpp msgid "Comma" msgstr "" -#: src/keycode.cpp:243 +#: src/keycode.cpp msgid "Minus" msgstr "" -#: src/keycode.cpp:243 +#: src/keycode.cpp msgid "Period" msgstr "" -#: src/keycode.cpp:243 +#: src/keycode.cpp msgid "Plus" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Zoom" msgstr "" diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 7dc7361c4..167e23a32 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-06-21 15:48+0200\n" "Last-Translator: sfan5 \n" "Language-Team: LANGUAGE \n" @@ -18,625 +18,680 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "" -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -#, fuzzy -msgid "World:" -msgstr "Navnet på verdenen" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Avbryt" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -#, fuzzy -msgid "Hide Game" -msgstr "Spill" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "Avhenger av:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Lagre" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Avbryt" - -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Aktiver Alle" - -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Deaktiver Alle" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "aktivert" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Aktiver Alle" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Aktiver Alle" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Navnet på verdenen" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Spill" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Opprett" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Lagre" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Navnet på verdenen" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "aktivert" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Opprett" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Spill" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Navnet på verdenen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nei" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Navnet på verdenen" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Opprett" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "aktivert" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "aktivert" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" msgstr "" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.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 msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: 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 Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 -msgid "Loading textures..." +#: src/client.cpp +msgid "Connection timed out." msgstr "" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "" - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "" - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" +#: src/client.cpp +msgid "Initializing nodes" msgstr "" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." +#: src/client.cpp +msgid "Initializing nodes..." msgstr "" -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." msgstr "" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Du døde." - -#: src/game.cpp:1073 -msgid "Respawn" +#: src/game.cpp +msgid "Change Keys" msgstr "" -#: src/game.cpp:1092 +#: src/game.cpp +msgid "Change Password" +msgstr "" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -652,521 +707,479 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "" - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "" - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "" - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "" - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "Du døde." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" msgstr "" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" msgstr "" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:223 -msgid "Left Button" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "" -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Spill" +#~ msgid "is required by:" +#~ msgstr "trengs av:" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Spill" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n" -#~ "De vil bli aktivert som standard når du lagrer konfigurasjonen." +#~ msgid "Configuration saved. " +#~ msgstr "Konfigurasjon lagret. " #~ msgid "" #~ "Warning: Some configured mods are missing.\n" @@ -1175,8 +1188,17 @@ msgstr "" #~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n" #~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen." -#~ msgid "Configuration saved. " -#~ msgstr "Konfigurasjon lagret. " +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n" +#~ "De vil bli aktivert som standard når du lagrer konfigurasjonen." -#~ msgid "is required by:" -#~ msgstr "trengs av:" +#, fuzzy +#~ msgid "Games" +#~ msgstr "Spill" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Spill" diff --git a/po/nl/minetest.po b/po/nl/minetest.po index 7de0b148a..6378ba9f1 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-06 07:40+0200\n" "Last-Translator: E. Kastelijn \n" -"Language-Team: Dutch " -"\n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,165 +19,181 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Er is een fout opgetreden in een Lua script, zoals een mod:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Er is een fout opgetreden:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hoofdmenu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Verbinden" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Bezig met laden..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Probeer de publieke serverlijst opnieuw in te schakelen en controleer de " "internet verbinding." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Wereld:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Geen std" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Verberg mp mods" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Afhankelijkheden:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Bewaar" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Annuleer" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "MP inschakelen" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Afhankelijkheden:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "MP uitschakelen" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "ingeschakeld" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "MP inschakelen" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Alles aan" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Naam wereld" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "kiemgetal" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Geen std" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Kaartgenerator" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Verberg mp mods" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Spel" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Maak aan" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Bewaar" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Je heb geen sub-spellen geïnstalleerd." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Wereld:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Download er een van minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ingeschakeld" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Waarschuwing: De minimale ontwikkel test is bedoeld voor ontwikkelaars." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Download een sub-game, zoals minetest_game, van minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Wereld \"$1\" bestaat al" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Maak aan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Download een sub-game, zoals minetest_game, van minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Download er een van minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Spel" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Kaartgenerator" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "kiemgetal" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" +"Waarschuwing: De minimale ontwikkel test is bedoeld voor ontwikkelaars." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Naam wereld" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Je heb geen sub-spellen geïnstalleerd." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Weet je zeker dat je \"$1\" wilt verwijderen?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Natuurlijk niet!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: kan \"$1\" niet verwijderen" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: onjuist pad \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Natuurlijk niet!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Verwijder wereld \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nee" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Modverzameling hernoemen:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accepteren" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Mod installeren: bestand: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Modverzameling hernoemen:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -185,471 +201,485 @@ msgstr "" "\n" "Mod installeren: niet ondersteund bestandstype \"$1\" of defect archief" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Installeren van $1 in $2 is mislukt" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Mod installeren: kan geen geschikte map vinden voor modverzameling $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Mod installeren: bestand: \"$1\"" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "Mod installeren: kan geen echte modnaam vinden voor: $1" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Ongesorteerd" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "Mod installeren: kan geen geschikte map vinden voor modverzameling $1" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Zoeken" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "$1 aan het downloaden, even wachten..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Succesvol geïnstalleerd:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Korte naam:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Rang" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "opnieuw installeren" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Installeren" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Winkel sluiten" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1 aan het downloaden, even wachten..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installeren" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Pagina $1 van $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Credits" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Rang" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Hoofdontwikkelaars" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Zoeken" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Korte naam:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Succesvol geïnstalleerd:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Ongesorteerd" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "opnieuw installeren" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Actieve bijdragers" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Eerdere hoofdontwikkelaars" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Hoofdontwikkelaars" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Credits" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Vroegere bijdragers" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Eerdere hoofdontwikkelaars" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Geïnstalleerde Mods:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online mod opslagplaats" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Geen mod beschrijving aanwezig" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Mod beschrijving:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Hernoemen" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Geselecteerde modpack deinstalleren" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Geselecteerde mod deinstalleren" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selecteer Modbestand:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Geen mod beschrijving aanwezig" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Hernoemen" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selecteer Modbestand:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Geselecteerde mod deinstalleren" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Geselecteerde modpack deinstalleren" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "IP-Adres / Poort :" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Naam / Wachtwoord :" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Publieke Serverlijst" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Verwijderen" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Verbinden" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Creatieve Modus" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Schade ingeschakeld" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP ingeschakeld" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nieuw" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Verbinden" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Instellingen" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Start Server" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Selecteer Wereld:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Creatieve Modus" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Schade inschakelen" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Schade ingeschakeld" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publiek" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Verwijderen" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Naam/Wachtwoord" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Naam / Wachtwoord :" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Publieke Serverlijst" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP ingeschakeld" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Adres" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Poort" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Instellingen" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Serverpoort" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Creatieve Modus" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Schade inschakelen" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Naam/Wachtwoord" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nieuw" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Poort" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publiek" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selecteer Wereld:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Ondoorzichtige bladeren" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Serverpoort" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Eenvoudige bladeren" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Start Server" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Mooie bladeren" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Geen filter" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Bi-Lineaire Filtering" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Tri-Lineare Filtering" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Geen Mipmap" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Mipmap" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap + Anisotropisch filteren" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Weet je zeker dat je je wereld wilt resetten?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Nee!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Mooie verlichting" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Deeltjes aanzetten" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3D wolken" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Ondoorzichtig water" - -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Verbonden glas" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Node markering" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Textuur:" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Rendering:" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Herstart minetest om de driver te activeren" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shaders" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Toetsen" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Reset Singleplayer wereld" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "GUI schaal-factor" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Schaal-factor toegepast op menu elementen: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Weet je zeker dat je je wereld wilt resetten?" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Bi-Lineaire Filtering" + +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Bumpmapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Toetsen" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Verbonden glas" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Deeltjes aanzetten" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Mooie bladeren" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "GUI schaal-factor" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "Mipmap + Anisotropisch filteren" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "Geen filter" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Geen Mipmap" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Nee!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Node markering" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "Ondoorzichtige bladeren" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Ondoorzichtig water" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "Parallax occlusie" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Golvend water" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Reset Singleplayer wereld" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Bewegende bladeren" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Schaal-factor toegepast op menu elementen: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Bewegende planten" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Instellingen" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shaders" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "Eenvoudige bladeren" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Mooie verlichting" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "Textuur:" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "Tri-Lineare Filtering" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "Bewegende bladeren" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "Bewegende planten" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Golvend water" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Mods configureren" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Hoofdmenu" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Start Singleplayer" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Speel" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Singleplayer" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selecteer textuurverzameling:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Geen informatie aanwezig" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selecteer textuurverzameling:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Texturen" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Bezig met laden van texturen..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Fout bij verbinden (time out?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Herbouwen van shaders..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Nodes initialiseren..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Nodes initialiseren" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Voorwerp texturen..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Klaar!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Hoofdmenu" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Nodes initialiseren" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Spelernaam te lang." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Nodes initialiseren..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Voorwerp texturen..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Bezig met laden van texturen..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Herbouwen van shaders..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Fout bij verbinden (time out?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Geen wereld en adres geselecteerd. Niks te doen." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "Het gespecificeerde wereld-pad bestaat niet: " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Kan niet de game laden of vinden \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Onjuiste gamespec." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hoofdmenu" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Geen wereld en adres geselecteerd. Niks te doen." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Spelernaam te lang." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Het gespecificeerde wereld-pad bestaat niet: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Doorgaan" - -#: src/game.cpp:1072 -msgid "You died." -msgstr "Je bent gestorven." - -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Herspawnen" - -#: src/game.cpp:1092 +#: src/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" +"\n" +"Check debug.txt for details." msgstr "" +"\n" +"Lees debug.txt voor details." -#: src/game.cpp:1106 +#: src/game.cpp +msgid "Change Keys" +msgstr "Toetsen aanpassen" + +#: src/game.cpp +msgid "Change Password" +msgstr "Verander wachtwoord" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Verbinding met de server wordt gemaakt..." + +#: src/game.cpp +msgid "Continue" +msgstr "Verder spelen" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Bezig client te maken..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Aanmaken van server..." + +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -675,580 +705,554 @@ msgstr "" "- Muiswiel: selecteer\n" "- T: chat\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Verder spelen" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Verander wachtwoord" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volume" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Toetsen aanpassen" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Terug naar menu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Afsluiten" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Uitschakelen..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Aanmaken van server..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Bezig client te maken..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "IP-adres opzoeken..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Verbinding met de server wordt gemaakt..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Voorwerpdefinities..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Node definities..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "KiB/s" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp msgid "MiB/s" msgstr "MiB/s" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Lees debug.txt voor details." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Node definities..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Doorgaan" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "IP-adres opzoeken..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Herspawnen" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Uitschakelen..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume" + +#: src/game.cpp +msgid "You died." +msgstr "Je bent gestorven." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "ok" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Gebruiken\" = Omlaag" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Achteruit" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chatten" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Opdracht" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Console" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "2x \"springen\" om te vliegen" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Weggooien" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Vooruit" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Rugzak" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Springen" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Toets is al in gebruik" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Sneltoetsen. (Als dit menu stuk gaat, verwijder dan instellingen uit " "minetest.conf)." -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Gebruiken\" = Omlaag" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "2x \"springen\" om te vliegen" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Toets is al in gebruik" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "druk op" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Vooruit" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Achteruit" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Links" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Print stacks" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Range instellen" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Rechts" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Gebruiken" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Springen" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Kruipen" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Weggooien" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Rugzak" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Chatten" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Opdracht" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Console" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Vliegen aan/uit" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Snel bewegen aan/uit" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Snel bewegen aan/uit" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Snel bewegen aan/uit" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Vliegen aan/uit" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Noclip aan/uit" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Range instellen" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Gebruiken" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Print stacks" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "druk op" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Huidig wachtwoord" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nieuw wachtwoord" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Herhaal wachtwoord" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Veranderen" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Herhaal wachtwoord" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nieuw wachtwoord" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Huidig wachtwoord" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Wachtwoorden zijn niet gelijk!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volume: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Terug" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Linkermuisknop" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Muiswielknop" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Rechtmuisknop" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X knop 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Terug" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Wissen" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Terug" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X knop 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Kapitaal" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pauze" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Converteren" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Laatste" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Einde" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Modus veranderen" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Volgende" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Eerste" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Spatie" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Omlaag" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Uitvoeren" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Selecteren" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Omhoog" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Help" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Screenshot" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Linker Windowstoets" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Menu" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Rechter Windowstoets" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Slaapknop" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Linker Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Rechter Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Linker Ctrl" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Linker Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Rechter Ctrl" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Rechter Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Komma" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Min" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punt" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "SAK" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Terug" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Kapitaal" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Wissen" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Converteren" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Omlaag" + +#: src/keycode.cpp +msgid "End" +msgstr "Einde" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase EOF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Uitvoeren" + +#: src/keycode.cpp +msgid "Final" +msgstr "Laatste" + +#: src/keycode.cpp +msgid "Help" +msgstr "Help" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Linkermuisknop" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Linker Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Linker Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Linker Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Linker Windowstoets" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Muiswielknop" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Min" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Modus veranderen" + +#: src/keycode.cpp +msgid "Next" +msgstr "Volgende" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pauze" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punt" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Eerste" + +#: src/keycode.cpp +msgid "Return" +msgstr "Terug" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Rechtmuisknop" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Rechter Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Rechter Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Rechter Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Rechter Windowstoets" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selecteren" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Slaapknop" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Screenshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spatie" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Omhoog" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X knop 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X knop 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Spel" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Downloaden" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" -#~ msgid "GAMES" -#~ msgstr "SPELLEN" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Anisotrope Filtering" -#~ msgid "Games" -#~ msgstr "Spellen" - -#~ msgid "Mods:" -#~ msgstr "Mods:" - -#~ msgid "edit game" -#~ msgstr "spel aanpassen" - -#~ msgid "new game" -#~ msgstr "nieuw spel" - -#~ msgid "EDIT GAME" -#~ msgstr "SPEL AANPASSEN" - -#~ msgid "Remove selected mod" -#~ msgstr "Geselecteerde mod verwijderen" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Mod toevoegen" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "Favorites:" -#~ msgstr "Favorieten:" - -#~ msgid "START SERVER" -#~ msgstr "START SERVER" - -#~ msgid "Name" -#~ msgstr "Naam" - -#~ msgid "Password" -#~ msgstr "Wachtwoord" - -#~ msgid "SETTINGS" -#~ msgstr "INSTELLINGEN" - -#~ msgid "Preload item visuals" -#~ msgstr "Voorwerpen vooraf laden" - -#~ msgid "Finite Liquid" -#~ msgstr "Eindige vloeistoffen" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "SINGLEPLAYER" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTUREN" - -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "Add mod:" -#~ msgstr "Mod toevoegen:" - -#~ msgid "Local install" -#~ msgstr "Plaatselijk installeren" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n" -#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie " -#~ "bewaard. " +#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "LEt op: Sommige ingestelde mods zijn vermist.\n" -#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. " +#~ msgid "is required by:" +#~ msgstr "is benodigd voor:" + +#~ msgid "Configuration saved. " +#~ msgstr "Instellingen bewaard. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Waarschuwing: Instellingen niet consistent. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens" + +#~ msgid "Multiplayer" +#~ msgstr "Multiplayer" + +#~ msgid "Advanced" +#~ msgstr "Geavanceerd" + +#~ msgid "Show Public" +#~ msgstr "Publieke server" + +#~ msgid "Show Favorites" +#~ msgstr "Favourieten" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Laat het adres leeg om een lokale server te starten." + +#~ msgid "Create world" +#~ msgstr "Maak wereld aan" + +#~ msgid "Address required." +#~ msgstr "IP-adres nodig." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd" + +#~ msgid "Files to be deleted" +#~ msgstr "Deze bestanden worden verwijderd" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Niet alle bestanden zijn verwijderd" #~ msgid "" #~ "Default Controls:\n" @@ -1275,64 +1279,95 @@ msgstr "Zoom" #~ "- ESC: Menu\n" #~ "- T: Chat\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Niet alle bestanden zijn verwijderd" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden" - -#~ msgid "Files to be deleted" -#~ msgstr "Deze bestanden worden verwijderd" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd" - -#~ msgid "Address required." -#~ msgstr "IP-adres nodig." - -#~ msgid "Create world" -#~ msgstr "Maak wereld aan" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Laat het adres leeg om een lokale server te starten." - -#~ msgid "Show Favorites" -#~ msgstr "Favourieten" - -#~ msgid "Show Public" -#~ msgstr "Publieke server" - -#~ msgid "Advanced" -#~ msgstr "Geavanceerd" - -#~ msgid "Multiplayer" -#~ msgstr "Multiplayer" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Waarschuwing: Instellingen niet consistent. " - -#~ msgid "Configuration saved. " -#~ msgstr "Instellingen bewaard. " - -#~ msgid "is required by:" -#~ msgstr "is benodigd voor:" - -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " #~ msgstr "" -#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item" +#~ "LEt op: Sommige ingestelde mods zijn vermist.\n" +#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. " -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotrope Filtering" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n" +#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie " +#~ "bewaard. " -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid "Local install" +#~ msgstr "Plaatselijk installeren" -#, fuzzy -#~ msgid "Downloading" -#~ msgstr "Downloaden" +#~ msgid "Add mod:" +#~ msgstr "Mod toevoegen:" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTUREN" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "SINGLEPLAYER" + +#~ msgid "Finite Liquid" +#~ msgstr "Eindige vloeistoffen" + +#~ msgid "Preload item visuals" +#~ msgstr "Voorwerpen vooraf laden" + +#~ msgid "SETTINGS" +#~ msgstr "INSTELLINGEN" + +#~ msgid "Password" +#~ msgstr "Wachtwoord" + +#~ msgid "Name" +#~ msgstr "Naam" + +#~ msgid "START SERVER" +#~ msgstr "START SERVER" + +#~ msgid "Favorites:" +#~ msgstr "Favorieten:" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Mod toevoegen" + +#~ msgid "Remove selected mod" +#~ msgstr "Geselecteerde mod verwijderen" + +#~ msgid "EDIT GAME" +#~ msgstr "SPEL AANPASSEN" + +#~ msgid "new game" +#~ msgstr "nieuw spel" + +#~ msgid "edit game" +#~ msgstr "spel aanpassen" + +#~ msgid "Mods:" +#~ msgstr "Mods:" + +#~ msgid "Games" +#~ msgstr "Spellen" + +#~ msgid "GAMES" +#~ msgstr "SPELLEN" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren" + +#~ msgid "Game Name" +#~ msgstr "Spel" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Herstart minetest om de driver te activeren" + +#~ msgid "Rendering:" +#~ msgstr "Rendering:" + +#~ msgid "Online mod repository" +#~ msgstr "Online mod opslagplaats" diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 23d1f83c8..d5baa149e 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-10-08 21:22+0200\n" "Last-Translator: Maciej Kasatkin \n" "Language-Team: Polish <>\n" @@ -19,165 +19,180 @@ msgstr "" "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu główne" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Połącz" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Ładowanie..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Świat:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Ukryj Grę" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Zależy od:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Zapisz" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Anuluj" -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Włącz wszystkie" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Zależy od:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Wyłącz wszystkie" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "włączone" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Włącz wszystkie" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Włącz wszystkie" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nazwa świata" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generator mapy" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ukryj Grę" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Gra" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Utwórz" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Zapisz" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Świat:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "włączone" + +#: 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:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Utwórz" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Gra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Generator mapy" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Nie podano nazwy świata lub nie wybrano gry" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nazwa świata" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Na pewno usunąć \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Tak" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Oczywiście, że nie!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: nie można usunąć \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: nieprawidłowy katalog \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Oczywiście, że nie!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Tak" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Usunąć świat \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nie" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Zmień nazwe Paczki Modów:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accept" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Zainstaluj mod: plik: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Zmień nazwe Paczki Modów:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -186,494 +201,510 @@ msgstr "" "\n" "Instalacja moda: nieznany typ pliku \"$1\"" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Instalacja $1 do $2 nie powiodła się" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Zainstaluj mod: plik: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instaluj" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Strona $1 z $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Ocena" + +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nazwa świata" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Ocena" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Ponowna instalacja" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instaluj" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "Strona $1 z $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Autorzy" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Twórcy" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktywni współautorzy" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Twórcy" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Autorzy" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Byli współautorzy" + +#: builtin/mainmenu/tab_credits.lua #, fuzzy msgid "Previous Core Developers" msgstr "Twórcy" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "Byli współautorzy" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Zainstalowane Mody:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -#, fuzzy -msgid "No mod description available" -msgstr "Brak informacjii" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Mod information:" msgstr "Brak informacjii" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "Mody" + +#: builtin/mainmenu/tab_mods.lua +#, fuzzy +msgid "No mod description available" +msgstr "Brak informacjii" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "Zmień nazwę" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Wybierz plik moda:" -#: builtin/mainmenu/tab_mods.lua:106 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Uninstall selected mod" msgstr "Usuń zaznaczony mod" -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Wybierz plik moda:" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" -msgstr "Mody" - -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Adres/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Nazwa gracza/Hasło" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "Klient" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Lista publicznych serwerów" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Usuń" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Połącz" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Tryb kreatywny" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "włączone" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Usuń" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nazwa gracza/Hasło" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Lista publicznych serwerów" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "włączone" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "Klient" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nowy" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Ustaw" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Rozpocznij grę/Połącz" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Wybierz świat:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Tryb kreatywny" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Włącz obrażenia" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publiczne" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nazwa gracza/Hasło" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Ustaw" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port Serwera" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Tryb kreatywny" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Włącz obrażenia" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nazwa gracza/Hasło" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nowy" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "Nie podano nazwy świata lub nie wybrano gry" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publiczne" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Wybierz świat:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Serwer" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Nieprzeźroczysta woda" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port Serwera" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Rozpocznij grę/Połącz" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Ozdobne drzewa" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "Chmury 3D" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 #, fuzzy msgid "Bilinear Filter" msgstr "Filtrowanie dwuliniowe" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Filtrowanie trójliniowe" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Płynne oświetlenie" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Włącz cząstki" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "Chmury 3D" - -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Nieprzeźroczysta woda" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Połącz" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Shadery" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Zmień klawisze" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Pojedynczy gracz" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mappowanie" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Zmień klawisze" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Połącz" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Włącz cząstki" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Ozdobne drzewa" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Nieprzeźroczysta woda" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Nieprzeźroczysta woda" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Pojedynczy gracz" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Ustawienia" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Pojedynczy gracz" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Shadery" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Płynne oświetlenie" + +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtrowanie trójliniowe" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Ustaw" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menu główne" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Pojedynczy gracz" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Graj" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Pojedynczy gracz" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Wybierz paczkę tekstur:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Brak informacjii" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Wybierz paczkę tekstur:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Paczki tekstur" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Błąd połączenia (brak odpowiedzi?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Tekstury przedmiotów..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "Ładowanie..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "Sprawdzanie adresu..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Tekstury przedmiotów..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menu główne" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Błąd połączenia (brak odpowiedzi?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nie wybrano świata ani adresu." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Nie można znaleźć lub wczytać trybu gry \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Nieprawidłowa specyfikacja trybu gry." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu główne" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nie wybrano świata ani adresu." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Kontynuuj" - -#: src/game.cpp:1072 -msgid "You died." -msgstr "Zginąłeś." - -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Wróć do gry" - -#: src/game.cpp:1092 +#: src/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" +"\n" +"Check debug.txt for details." msgstr "" +"\n" +"Sprawdź plik debug.txt by uzyskać więcej informacji." -#: src/game.cpp:1106 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Zmień klawisze" + +#: src/game.cpp +msgid "Change Password" +msgstr "Zmień hasło" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Łączenie z serwerem..." + +#: src/game.cpp +msgid "Continue" +msgstr "Dalej" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Tworzenie klienta..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Tworzenie serwera...." + +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -699,584 +730,556 @@ msgstr "" "- Rolka myszy: wybór przedmiotu↵\n" "- T: chat\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Dalej" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Zmień hasło" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Głośność" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Zmień klawisze" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Wyjście do menu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Wyjście z gry" -#: src/game.cpp:1841 +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definicje przedmiotów..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definicje nod..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Kontynuuj" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Sprawdzanie adresu..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Wróć do gry" + +#: src/game.cpp #, fuzzy msgid "Shutting down..." msgstr "Wyłączanie..." -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Tworzenie serwera...." +#: src/game.cpp +msgid "Sound Volume" +msgstr "Głośność" -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Tworzenie klienta..." +#: src/game.cpp +msgid "You died." +msgstr "Zginąłeś." -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Sprawdzanie adresu..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Łączenie z serwerem..." - -#: src/game.cpp:2317 -msgid "Item definitions..." -msgstr "Definicje przedmiotów..." - -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definicje nod..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 -msgid "KiB/s" -msgstr "" - -#: src/game.cpp:2338 -msgid "MiB/s" -msgstr "" - -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Sprawdź plik debug.txt by uzyskać więcej informacji." - -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Użyj\" = wspinaj się" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Tył" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Czat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Komenda" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsola" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Upuść" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Przód" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Ekwipunek" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Skok" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klawisz już zdefiniowany" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane " "klawisze z pliku minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Użyj\" = wspinaj się" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Klawisz już zdefiniowany" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "naciśnij klawisz" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Przód" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Tył" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Lewo" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Drukuj stosy" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Zasięg widzenia" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Prawo" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Użyj" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Skok" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Skradanie" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Upuść" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Ekwipunek" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Czat" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Komenda" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Konsola" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Przełącz tryb latania" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Przełącz tryb szybki" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Przełącz tryb szybki" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Przełącz tryb szybki" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Przełącz tryb latania" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Przełącz tryb noclip" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Zasięg widzenia" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Użyj" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Drukuj stosy" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "naciśnij klawisz" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Stare hasło" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nowe hasło" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Potwierdź hasło" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Zmień" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Potwierdź hasło" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nowe hasło" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Stare hasło" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hasła nie są jednakowe!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Głośność: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Wyjście" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Lewy przycisk myszy" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Głośność: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Środkowy przycisk myszy" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Prawy przycisk myszy" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X Button 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Delete" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Button 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Next" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Prior" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Spacja" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Dół" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Execute" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Góra" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Pomoc" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Lewy Windows" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Prawy Windows" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Lewy Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Prawy Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Lewy Control" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Lewy Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Prawy Control" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Prawy Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Przecinek" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Kropka" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Delete" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Przecinek" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Dół" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Execute" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Pomoc" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Lewy przycisk myszy" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Lewy Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Lewy Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Lewy Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Lewy Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Środkowy przycisk myszy" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Next" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Kropka" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prior" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Prawy przycisk myszy" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Prawy Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Prawy Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Prawy Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Prawy Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spacja" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Góra" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Button 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Button 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Nazwa Gry" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się" - -#~ msgid "GAMES" -#~ msgstr "GRY" - -#~ msgid "Games" -#~ msgstr "Gry" - -#~ msgid "Mods:" -#~ msgstr "Mody:" - -#~ msgid "edit game" -#~ msgstr "edytuj grę" - -#~ msgid "new game" -#~ msgstr "nowa gra" - -#~ msgid "EDIT GAME" -#~ msgstr "EDYTUJ GRĘ" - -#~ msgid "Remove selected mod" -#~ msgstr "Usuń zaznaczony mod" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<--Dodaj mod" - -#~ msgid "CLIENT" -#~ msgstr "KLIENT" - -#~ msgid "Favorites:" -#~ msgstr "Ulubione:" - -#~ msgid "START SERVER" -#~ msgstr "URUCHOM SERWER" - -#~ msgid "Name" -#~ msgstr "Nazwa" - -#~ msgid "Password" -#~ msgstr "Hasło" - -#~ msgid "SETTINGS" -#~ msgstr "USTAWIENIA" - -#~ msgid "Preload item visuals" -#~ msgstr "Ładuj obrazy przedmiotów" - -#~ msgid "Finite Liquid" -#~ msgstr "Realistyczne ciecze" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "TRYB JEDNOOSOBOWY" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACZKI TEKSTUR" - -#~ msgid "MODS" -#~ msgstr "MODY" - #, fuzzy -#~ msgid "Add mod:" -#~ msgstr "<<--Dodaj mod" +#~ msgid "Downloading" +#~ msgstr "Ściągnij" -#, fuzzy -#~ msgid "Local install" -#~ msgstr "Instaluj" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mappowanie" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtrowanie anizotropowe" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n" -#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. " +#~ "Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: " +#~ "przenieś pojedynczy przedmiot" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n" -#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. " +#~ msgid "is required by:" +#~ msgstr "wymagane przez:" + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguracja zapisana. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki" + +#~ msgid "Multiplayer" +#~ msgstr "Gra wieloosobowa" + +#~ msgid "Advanced" +#~ msgstr "Zaawansowane" + +#~ msgid "Show Public" +#~ msgstr "Pokaż publiczne" + +#~ msgid "Show Favorites" +#~ msgstr "Pokaż ulubione" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny." + +#~ msgid "Create world" +#~ msgstr "Stwórz świat" + +#~ msgid "Address required." +#~ msgstr "Wymagany adres." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Nie można skasować świata: nic nie zaznaczono" + +#~ msgid "Files to be deleted" +#~ msgstr "Pliki do skasowania" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Nie udało się skasować wszystkich plików świata" #~ msgid "" #~ "Default Controls:\n" @@ -1303,65 +1306,87 @@ msgstr "Zoom" #~ "- ESC: to menu\n" #~ "- T: czat\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Nie udało się skasować wszystkich plików świata" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry" - -#~ msgid "Files to be deleted" -#~ msgstr "Pliki do skasowania" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Nie można skasować świata: nic nie zaznaczono" - -#~ msgid "Address required." -#~ msgstr "Wymagany adres." - -#~ msgid "Create world" -#~ msgstr "Stwórz świat" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny." - -#~ msgid "Show Favorites" -#~ msgstr "Pokaż ulubione" - -#~ msgid "Show Public" -#~ msgstr "Pokaż publiczne" - -#~ msgid "Advanced" -#~ msgstr "Zaawansowane" - -#~ msgid "Multiplayer" -#~ msgstr "Gra wieloosobowa" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. " - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguracja zapisana. " - -#~ msgid "is required by:" -#~ msgstr "wymagane przez:" - -#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " #~ msgstr "" -#~ "Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: " -#~ "przenieś pojedynczy przedmiot" +#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n" +#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. " -#~ msgid "Anisotropic Filtering" -#~ msgstr "Filtrowanie anizotropowe" - -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mappowanie" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n" +#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. " #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Ściągnij" +#~ msgid "Local install" +#~ msgstr "Instaluj" + +#, fuzzy +#~ msgid "Add mod:" +#~ msgstr "<<--Dodaj mod" + +#~ msgid "MODS" +#~ msgstr "MODY" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACZKI TEKSTUR" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "TRYB JEDNOOSOBOWY" + +#~ msgid "Finite Liquid" +#~ msgstr "Realistyczne ciecze" + +#~ msgid "Preload item visuals" +#~ msgstr "Ładuj obrazy przedmiotów" + +#~ msgid "SETTINGS" +#~ msgstr "USTAWIENIA" + +#~ msgid "Password" +#~ msgstr "Hasło" + +#~ msgid "Name" +#~ msgstr "Nazwa" + +#~ msgid "START SERVER" +#~ msgstr "URUCHOM SERWER" + +#~ msgid "Favorites:" +#~ msgstr "Ulubione:" + +#~ msgid "CLIENT" +#~ msgstr "KLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<--Dodaj mod" + +#~ msgid "Remove selected mod" +#~ msgstr "Usuń zaznaczony mod" + +#~ msgid "EDIT GAME" +#~ msgstr "EDYTUJ GRĘ" + +#~ msgid "new game" +#~ msgstr "nowa gra" + +#~ msgid "edit game" +#~ msgstr "edytuj grę" + +#~ msgid "Mods:" +#~ msgstr "Mody:" + +#~ msgid "Games" +#~ msgstr "Gry" + +#~ msgid "GAMES" +#~ msgstr "GRY" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się" + +#~ msgid "Game Name" +#~ msgstr "Nazwa Gry" diff --git a/po/pt/minetest.po b/po/pt/minetest.po index b433ef245..8c8fcaeb7 100644 --- a/po/pt/minetest.po +++ b/po/pt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2014-01-06 01:45+0200\n" "Last-Translator: João Farias \n" "Language-Team: LANGUAGE \n" @@ -18,166 +18,181 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu Principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Ligar" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "A carregar..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Mundo:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Esconder Jogo" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Extra:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Depende de:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Guardar" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Ativar Tudo" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Depende de:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Desativar Tudo" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "ativo" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Ativar Tudo" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Ativar Tudo" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nome do Mundo" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Geração de Mapa" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Esconder Jogo" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Jogo" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Criar" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Extra:" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Guardar" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ativo" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "O mundo com o nome \"$1\" já existe" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Criar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Jogo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Geração de Mapa" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Mundo sem nome ou nenhum jogo selecionado" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nome do Mundo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Tem a certeza que pertende eliminar \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Sim" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Não, é claro que não!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Mensagem de Extra: falhou a eliminação de \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Mensagem de extra: caminho inválido \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Não, é claro que não!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Sim" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Eliminar Mundo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Não" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renomear Pacote de Extras:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Aceitar" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalar Extra: ficheiro: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renomear Pacote de Extras:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -186,494 +201,510 @@ msgstr "" "\n" "Instalar Extra: tipo de ficheiro desconhecido \"$1\"" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Falha ao instalar de $1 ao $2" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalar Extra: ficheiro: \"$1\"" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Página $1 de $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Classificação" + +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nome do Mundo" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Classificação" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "re-Instalar" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "Página $1 de $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Créditos" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Desenvolvedores Chave" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contribuintes Ativos" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Desenvolvedores Chave" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Créditos" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Antigos Contribuintes" + +#: builtin/mainmenu/tab_credits.lua #, fuzzy msgid "Previous Core Developers" msgstr "Desenvolvedores Chave" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "Antigos Contribuintes" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Extras Instalados:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repositório Online de Mods" - -#: builtin/mainmenu/tab_mods.lua:78 -#, fuzzy -msgid "No mod description available" -msgstr "Sem informação" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Mod information:" msgstr "Sem informação" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "Extras" + +#: builtin/mainmenu/tab_mods.lua +#, fuzzy +msgid "No mod description available" +msgstr "Sem informação" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "Renomear" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Desinstalar mode selecionado" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Seleccionar ficheiro de Extra:" -#: builtin/mainmenu/tab_mods.lua:106 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Uninstall selected mod" msgstr "Remover extra selecionado" -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Seleccionar ficheiro de Extra:" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Desinstalar mode selecionado" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" -msgstr "Extras" - -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Endereço/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Nome/Senha" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "Cliente" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Lista de Servidores Públicos" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Eliminar" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Ligar" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Modo Criativo" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "ativo" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Eliminar" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Lista de Servidores Públicos" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "ativo" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "Cliente" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Novo" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Configurar" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Jogar" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Seleccionar Mundo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Modo Criativo" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Ativar Dano" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Público" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nome/Senha" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurar" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Porta" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modo Criativo" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Ativar Dano" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Novo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "Mundo sem nome ou nenhum jogo selecionado" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Público" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Seleccionar Mundo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servidor" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Água Opaca" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Porta" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Jogar" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Árvores Melhoradas" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "Nuvens 3D" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 #, fuzzy msgid "Bilinear Filter" msgstr "Filtro Bi-Linear" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Filtro Tri-Linear" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Iluminação Suave" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Ativar Partículas" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "Nuvens 3D" - -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Água Opaca" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Ligar" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Sombras" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Mudar teclas" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Um Jogador" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mip-Mapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Mudar teclas" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Ligar" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Ativar Partículas" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Árvores Melhoradas" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Água Opaca" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Água Opaca" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Um Jogador" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Definições" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Um Jogador" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Sombras" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Iluminação Suave" + +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtro Tri-Linear" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Configurar" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menu Principal" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Um Jogador" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jogar" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Um Jogador" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selecione um pacote de texturas:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Sem informação" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selecione um pacote de texturas:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pacotes de Texturas" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Erro de conexão (excedeu tempo?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Texturas dos items..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "A carregar..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "A resolver endereço..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Texturas dos items..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menu Principal" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Erro de conexão (excedeu tempo?)" -#: src/client/clientlauncher.cpp:425 +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Não foi possível encontrar ou carregar jogo \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "gamespec inválido." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu Principal" + +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" "Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer." -#: src/client/clientlauncher.cpp:432 +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/clientlauncher.cpp:441 -msgid "Could not find or load game \"" -msgstr "Não foi possível encontrar ou carregar jogo \"" - -#: src/client/clientlauncher.cpp:459 -msgid "Invalid gamespec." -msgstr "gamespec inválido." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Consulte debug.txt para mais detalhes." + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Mudar teclas" + +#: src/game.cpp +msgid "Change Password" +msgstr "Mudar Senha" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "A conectar ao servidor..." + +#: src/game.cpp +msgid "Continue" msgstr "Continuar" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Morreste." +#: src/game.cpp +msgid "Creating client..." +msgstr "A criar cliente..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Reaparecer" +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "A criar servidor..." -#: src/game.cpp:1092 -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/game.cpp:1106 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -699,584 +730,552 @@ msgstr "" "- Roda do rato: seleccionar item\n" "- T: conversação\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Continuar" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Mudar Senha" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volume do som" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Mudar teclas" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Sair para Menu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Sair para o sistema" -#: src/game.cpp:1841 +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definições dos Itens..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Dados..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Continuar" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "A resolver endereço..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Reaparecer" + +#: src/game.cpp #, fuzzy msgid "Shutting down..." msgstr "A desligar..." -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "A criar servidor..." +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume do som" -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "A criar cliente..." +#: src/game.cpp +msgid "You died." +msgstr "Morreste." -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "A resolver endereço..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "A conectar ao servidor..." - -#: src/game.cpp:2317 -msgid "Item definitions..." -msgstr "Definições dos Itens..." - -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Dados..." - -#: src/game.cpp:2334 -msgid "KiB/s" -msgstr "" - -#: src/game.cpp:2338 -msgid "MiB/s" -msgstr "" - -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Consulte debug.txt para mais detalhes." - -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Use\" = descer" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Tecla já em uso" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "pressione a tecla" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Avançar" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Recuar" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Esquerda" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Direita" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Usar" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Saltar" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Agachar" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Largar" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventário" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Conversa" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Comando" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Consola" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Ativar/Desativar vôo" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Ativar/Desativar correr" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Largar" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avançar" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventário" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Saltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tecla já em uso" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Esquerda" + +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Imprimir stacks" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Seleccionar Distância" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Direita" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Agachar" + +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Ativar/Desativar correr" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Ativar/Desativar correr" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Ativar/Desativar vôo" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Ativar/Desativar noclip" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Seleccionar Distância" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usar" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Imprimir stacks" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "pressione a tecla" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Senha antiga" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Senha Nova" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confirmar Senha" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Mudar" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar Senha" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Senha Nova" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Senha antiga" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Senhas não correspondem!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volume do som: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Sair" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Botão Esquerdo" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume do som: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Roda do Rato" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Botão Direito" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Botão X 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Voltar" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Limpar" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tabulação" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Botão X 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Capital" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pausa" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Converter" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "ESC" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nãoconverter" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Próximo" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Prévio" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Espaço" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Baixo" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Executar" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Seleccionar" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Cima" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Ajuda" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Screenshot" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "WINDOWS Esq." - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "App" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "WINDOWS Dir." - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Suspender" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Shift Esquerdo" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Shift Direito" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Control Esq" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Menu Esquerdo" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Control Direito" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Menu Direito" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Virgula" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Menos" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Período" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Mais" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attm" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Voltar" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Capital" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Limpar" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgula" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Converter" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Baixo" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Apagar OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "ESC" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Executar" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ajuda" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Botão Esquerdo" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Control Esq" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menu Esquerdo" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift Esquerdo" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "WINDOWS Esq." + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Roda do Rato" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Menos" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Próximo" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nãoconverter" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Limpar OEM" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PAL" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pausa" + +#: src/keycode.cpp +msgid "Period" +msgstr "Período" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Mais" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prévio" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Botão Direito" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Control Direito" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menu Direito" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift Direito" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "WINDOWS Dir." + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Seleccionar" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Suspender" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Screenshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espaço" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulação" + +#: src/keycode.cpp +msgid "Up" +msgstr "Cima" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Botão X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Botão X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Nome do Jogo" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "" -#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo " -#~ "\"$2\"" - -#~ msgid "GAMES" -#~ msgstr "JOGOS" - -#~ msgid "Games" -#~ msgstr "Jogos" - -#~ msgid "Mods:" -#~ msgstr "Extras:" - -#~ msgid "edit game" -#~ msgstr "editar jogo" - -#~ msgid "new game" -#~ msgstr "novo jogo" - -#~ msgid "EDIT GAME" -#~ msgstr "EDITAR JOGO" - -#~ msgid "Remove selected mod" -#~ msgstr "Remover extra selecionado" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adicionar extra" - -#~ msgid "CLIENT" -#~ msgstr "CLIENTE" - -#~ msgid "Favorites:" -#~ msgstr "Favoritos:" - -#~ msgid "START SERVER" -#~ msgstr "INICIAR SERVIDOR" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "Password" -#~ msgstr "Senha" - -#~ msgid "SETTINGS" -#~ msgstr "DEFINIÇÕES" - -#~ msgid "Preload item visuals" -#~ msgstr "Pré-carregamento dos itens" - -#~ msgid "Finite Liquid" -#~ msgstr "Líquido Finito" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "Um Jogador" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACOTES DE TEXTURAS" - -#~ msgid "MODS" -#~ msgstr "EXTRAS" - #, fuzzy -#~ msgid "Add mod:" -#~ msgstr "<<-- Adicionar extra" +#~ msgid "Downloading" +#~ msgstr "Descarregar" -#, fuzzy -#~ msgid "Local install" -#~ msgstr "Instalar" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods ainda não estão configurados.\n" -#~ "Eles vão ser ativados por predefinição quando guardar a configuração. " +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtro Anisotrópico" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods configurados estão em falta.\n" -#~ "As suas definições vão ser removidas quando gravar a configuração. " +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item" + +#~ msgid "is required by:" +#~ msgstr "é necessário pelo:" + +#~ msgid "Configuration saved. " +#~ msgstr "Configuração gravada. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Atenção: Configuração não compatível. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" + +#~ msgid "Multiplayer" +#~ msgstr "Vários jogadores" + +#~ msgid "Advanced" +#~ msgstr "Avançado" + +#~ msgid "Show Public" +#~ msgstr "Mostrar Públicos" + +#~ msgid "Show Favorites" +#~ msgstr "Mostrar Favoritos" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Deixe endereço em branco para iniciar servidor local." + +#~ msgid "Create world" +#~ msgstr "Criar mundo" + +#~ msgid "Address required." +#~ msgstr "Endereço necessário." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado" + +#~ msgid "Files to be deleted" +#~ msgstr "Ficheiros para eliminar" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Não foi possível configurar mundo: Nada seleccionado" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos" #~ msgid "" #~ "Default Controls:\n" @@ -1303,63 +1302,92 @@ msgstr "Zoom" #~ "- ESC: Este menu\n" #~ "- T: Chat\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods configurados estão em falta.\n" +#~ "As suas definições vão ser removidas quando gravar a configuração. " -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Não foi possível configurar mundo: Nada seleccionado" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos" - -#~ msgid "Files to be deleted" -#~ msgstr "Ficheiros para eliminar" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado" - -#~ msgid "Address required." -#~ msgstr "Endereço necessário." - -#~ msgid "Create world" -#~ msgstr "Criar mundo" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Deixe endereço em branco para iniciar servidor local." - -#~ msgid "Show Favorites" -#~ msgstr "Mostrar Favoritos" - -#~ msgid "Show Public" -#~ msgstr "Mostrar Públicos" - -#~ msgid "Advanced" -#~ msgstr "Avançado" - -#~ msgid "Multiplayer" -#~ msgstr "Vários jogadores" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Atenção: Configuração não compatível. " - -#~ msgid "Configuration saved. " -#~ msgstr "Configuração gravada. " - -#~ msgid "is required by:" -#~ msgstr "é necessário pelo:" - -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item" - -#~ msgid "Anisotropic Filtering" -#~ msgstr "Filtro Anisotrópico" - -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods ainda não estão configurados.\n" +#~ "Eles vão ser ativados por predefinição quando guardar a configuração. " #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Descarregar" +#~ msgid "Local install" +#~ msgstr "Instalar" + +#, fuzzy +#~ msgid "Add mod:" +#~ msgstr "<<-- Adicionar extra" + +#~ msgid "MODS" +#~ msgstr "EXTRAS" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACOTES DE TEXTURAS" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "Um Jogador" + +#~ msgid "Finite Liquid" +#~ msgstr "Líquido Finito" + +#~ msgid "Preload item visuals" +#~ msgstr "Pré-carregamento dos itens" + +#~ msgid "SETTINGS" +#~ msgstr "DEFINIÇÕES" + +#~ msgid "Password" +#~ msgstr "Senha" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "START SERVER" +#~ msgstr "INICIAR SERVIDOR" + +#~ msgid "Favorites:" +#~ msgstr "Favoritos:" + +#~ msgid "CLIENT" +#~ msgstr "CLIENTE" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adicionar extra" + +#~ msgid "Remove selected mod" +#~ msgstr "Remover extra selecionado" + +#~ msgid "EDIT GAME" +#~ msgstr "EDITAR JOGO" + +#~ msgid "new game" +#~ msgstr "novo jogo" + +#~ msgid "edit game" +#~ msgstr "editar jogo" + +#~ msgid "Mods:" +#~ msgstr "Extras:" + +#~ msgid "Games" +#~ msgstr "Jogos" + +#~ msgid "GAMES" +#~ msgstr "JOGOS" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "" +#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo " +#~ "\"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Nome do Jogo" + +#~ msgid "Online mod repository" +#~ msgstr "Repositório Online de Mods" diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 830bd5e82..2a6a1f623 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-11-25 02:13+0200\n" "Last-Translator: Frederico Guimarães \n" "Language-Team: LANGUAGE \n" @@ -18,164 +18,179 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Conectar" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Carregando..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Mundo:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Ocultar jogos" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Ocultar conteúdo PMs" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Depende de:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvar" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Habilitar PMs" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Depende de:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Desabilitar PMs" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "habilitado" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Habilitar PMs" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Habilitar todos" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nome do mundo" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Mapgen" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Jogo" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Criar" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ocultar jogos" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Ocultar conteúdo PMs" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvar" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "habilitado" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Já existe um mundo com o nome \"$1\"" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Criar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Jogo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" "Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seed" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nome do mundo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Tem certeza que deseja excluir \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Sim" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Claro que não!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: não foi possível excluir \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: caminho inválido do módulo \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Claro que não!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Sim" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Excluir o mundo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Não" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renomear pacote de módulos:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Aceitar" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalação de módulo: arquivo: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renomear pacote de módulos:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -184,496 +199,512 @@ msgstr "" "\n" "Instalação de módulo: o tipo de arquivo \"$1\" não é suportado" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Não foi possível instalar $1 em $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalação de módulo: arquivo: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" +"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalação de módulo: não foi possível encontrar o nome adequado da pasta " "para o pacote de módulos $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "" -"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Página $1 de $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Classificação" + +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nome do mundo" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Classificação" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "reinstalar" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "Página $1 de $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Créditos" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Desenvolvedores principais" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Colaboradores ativos" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Desenvolvedores principais" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Créditos" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Colaboradores anteriores" + +#: builtin/mainmenu/tab_credits.lua #, fuzzy msgid "Previous Core Developers" msgstr "Desenvolvedores principais" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "Colaboradores anteriores" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Módulos instalados:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repositório de módulos online" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nenhuma descrição disponível do módulo" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informação do módulo:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Renomear" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Desinstalar o pacote de módulos selecionado" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Desinstalar o módulo selecionado" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selecione o arquivo do módulo:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Módulos" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nenhuma descrição disponível do módulo" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Renomear" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selecione o arquivo do módulo:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Desinstalar o módulo selecionado" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Desinstalar o pacote de módulos selecionado" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Endereço/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Nome/Senha" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "Cliente" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Servidores públicos" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Excluir" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Conectar" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Modo criativo" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "habilitado" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Excluir" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Servidores públicos" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "habilitado" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "Cliente" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Novo" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Configurar" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Iniciar o jogo" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Selecione um mundo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Modo criativo" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Habilitar dano" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Público" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nome/Senha" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurar" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Porta do servidor" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modo criativo" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Habilitar dano" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Novo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "" "Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Público" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selecione um mundo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servidor" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Água opaca" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Porta do servidor" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Iniciar o jogo" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Árvores melhores" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "Nuvens 3D" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 #, fuzzy msgid "Bilinear Filter" msgstr "Filtragem bi-linear" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Filtragem tri-linear" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Iluminação suave" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Habilitar partículas" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "Nuvens 3D" - -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Água opaca" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Conectar" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Sombreadores" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Mudar teclas" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Um jogador" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mipmapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Mudar teclas" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Conectar" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Habilitar partículas" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Árvores melhores" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Água opaca" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Água opaca" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Um jogador" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Configurações" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Um jogador" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Sombreadores" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Iluminação suave" + +#: 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 "Para habilitar os sombreadores é necessário usar o driver OpenGL." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtragem tri-linear" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Configurar" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menu principal" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Um jogador" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jogar" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Um jogador" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selecione o pacote de texturas:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nenhuma informação disponível" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selecione o pacote de texturas:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pacotes de texturas" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Erro de conexão (tempo excedido?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Texturas dos itens..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "Carregando..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "Resolvendo os endereços..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Texturas dos itens..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Menu principal" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Erro de conexão (tempo excedido?)" -#: src/client/clientlauncher.cpp:425 +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Não foi possível localizar ou carregar jogo \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Especificação do jogo inválida." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu principal" + +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" "Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a " "ser feito." -#: src/client/clientlauncher.cpp:432 +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/clientlauncher.cpp:441 -msgid "Could not find or load game \"" -msgstr "Não foi possível localizar ou carregar jogo \"" - -#: src/client/clientlauncher.cpp:459 -msgid "Invalid gamespec." -msgstr "Especificação do jogo inválida." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Verifique o debug.txt para mais detalhes." + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Mudar teclas" + +#: src/game.cpp +msgid "Change Password" +msgstr "Alterar a senha" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Conectando ao servidor..." + +#: src/game.cpp +msgid "Continue" msgstr "Continuar" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Você morreu." +#: src/game.cpp +msgid "Creating client..." +msgstr "Criando o cliente..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Reviver" +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Criando o servidor..." -#: src/game.cpp:1092 -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/game.cpp:1106 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -699,582 +730,554 @@ msgstr "" "- Roda: selecionar item\n" "- T: bate-papo\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Continuar" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Alterar a senha" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volume do som" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Mudar teclas" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Sair para o menu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Sair do Minetest" -#: src/game.cpp:1841 +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definições dos itens..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Mídia..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definições dos nós..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Continuar" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Resolvendo os endereços..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Reviver" + +#: src/game.cpp #, fuzzy msgid "Shutting down..." msgstr "Desligando tudo..." -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Criando o servidor..." +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume do som" -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Criando o cliente..." +#: src/game.cpp +msgid "You died." +msgstr "Você morreu." -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Resolvendo os endereços..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Conectando ao servidor..." - -#: src/game.cpp:2317 -msgid "Item definitions..." -msgstr "Definições dos itens..." - -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definições dos nós..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Mídia..." - -#: src/game.cpp:2334 -msgid "KiB/s" -msgstr "" - -#: src/game.cpp:2338 -msgid "MiB/s" -msgstr "" - -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Verifique o debug.txt para mais detalhes." - -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Usar\" = descer" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Voltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Bate-papo" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Console" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "\"Pular\" duas vezes ativa o voo" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Soltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avançar" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventário" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Pular" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Essa tecla já está em uso" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Teclas (se este menu estiver com problema, remova itens do arquivo minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Usar\" = descer" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "\"Pular\" duas vezes ativa o voo" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Essa tecla já está em uso" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "press. uma tecla" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Avançar" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Voltar" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Esquerda" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Impr. pilha (log)" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Sel. distância" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Direita" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Usar" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Pular" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Esgueirar" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Soltar" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventário" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Bate-papo" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Comando" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Console" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Alternar voo" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Alternar corrida" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Alternar corrida" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Alternar corrida" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Alternar voo" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Alternar noclip" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Sel. distância" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usar" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Impr. pilha (log)" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "press. uma tecla" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Senha antiga" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nova senha" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confirmar a senha" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Alterar" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar a senha" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nova senha" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Senha antiga" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "As senhas não correspondem!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volume do som: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Sair" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Botão esquerdo" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume do som: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Roda do mouse" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Botão direito" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Botão X 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Limpar" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Botão X 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Page Down" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Page Up" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Espaço" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Abaixo" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Executar" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print Screen" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Acima" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Ajuda" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Captura de tela" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Windows esq." - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Tecl.num.0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Tecl.num.1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Windows dir." - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Tecl.num.2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Tecl.num.3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Tecl.num.4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Tecl.num.5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Tecl.num.6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Tecl.num.7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Tecl.num.*" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Tecl.num.+" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Tecl.num.-" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Tecl.num./" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Tecl.num.8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Tecl.num.9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Shift esq." - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Shift dir." - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Ctrl esq." - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Menu esq." - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Ctrl dir." - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Menu dir." - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Vírgula" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Menos" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Ponto" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Mais" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Limpar" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Vírgula" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Abaixo" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Apagar OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Executar" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ajuda" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Botão esquerdo" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl esq." + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menu esq." + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift esq." + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Windows esq." + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Roda do mouse" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Menos" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Down" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Tecl.num.*" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Tecl.num.+" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Tecl.num.-" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Tecl.num./" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Tecl.num.0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Tecl.num.1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Tecl.num.2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Tecl.num.3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Tecl.num.4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Tecl.num.5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Tecl.num.6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Tecl.num.7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Tecl.num.8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Tecl.num.9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Limpar OEM" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Ponto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Mais" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Up" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Botão direito" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl dir." + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menu dir." + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift dir." + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Windows dir." + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Captura de tela" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espaço" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Acima" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Botão X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Botão X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Nome do jogo" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Baixar" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\"" +#~ msgid "Mip-Mapping" +#~ msgstr "Mipmapping" -#~ msgid "GAMES" -#~ msgstr "JOGOS" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtragem anisotrópica" -#~ msgid "Games" -#~ msgstr "Jogos" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item" -#~ msgid "Mods:" -#~ msgstr "Módulos:" +#~ msgid "is required by:" +#~ msgstr "é necessário para:" -#~ msgid "edit game" -#~ msgstr "editar o jogo" +#~ msgid "Configuration saved. " +#~ msgstr "A configuração foi salva. " -#~ msgid "new game" -#~ msgstr "novo jogo" +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Atenção: A configuração não está consistente." -#~ msgid "EDIT GAME" -#~ msgstr "EDITAR JOGO" +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos" -#~ msgid "Remove selected mod" -#~ msgstr "Remover o módulo selecionado" +#~ msgid "Multiplayer" +#~ msgstr "Vários jogadores" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adicionar módulo" +#~ msgid "Advanced" +#~ msgstr "Avançado" -#~ msgid "CLIENT" -#~ msgstr "CLIENTE" +#~ msgid "Show Public" +#~ msgstr "Exibir públicos" -#~ msgid "Favorites:" -#~ msgstr "Favoritos:" +#~ msgid "Show Favorites" +#~ msgstr "Exibir favoritos" -#~ msgid "START SERVER" -#~ msgstr "SERVIDOR" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Deixe o endereço em branco para iniciar um servidor local." -#~ msgid "Name" -#~ msgstr "Nome" +#~ msgid "Create world" +#~ msgstr "Criar o mundo" -#~ msgid "Password" -#~ msgstr "Senha" +#~ msgid "Address required." +#~ msgstr "É necessário um endereço." -#~ msgid "SETTINGS" -#~ msgstr "CONFIGURAÇÕES" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado" -#~ msgid "Preload item visuals" -#~ msgstr "Precarga de elementos visuais" +#~ msgid "Files to be deleted" +#~ msgstr "Arquivos a serem excluídos" -#~ msgid "Finite Liquid" -#~ msgstr "Líquido finito" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo" -#~ msgid "SINGLE PLAYER" -#~ msgstr "UM JOGADOR" +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado" -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTURAS" - -#~ msgid "MODS" -#~ msgstr "MÓDULOS" - -#~ msgid "Add mod:" -#~ msgstr "Adicionar módulo:" - -#~ msgid "Local install" -#~ msgstr "Instalação local" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods ainda não foram configurados.\n" -#~ "E eles serão ativados por padrão, quando você salvar a configuração." - -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods configurados não foram encontrados.\n" -#~ "Suas definições serão removidas quando você salvar a configuração." +#~ msgid "Failed to delete all world files" +#~ msgstr "Não foi possível excluir todos os arquivos do mundo" #~ msgid "" #~ "Default Controls:\n" @@ -1301,63 +1304,88 @@ msgstr "Zoom" #~ "- ESC: este menu\n" #~ "- T: bate-papo\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Não foi possível excluir todos os arquivos do mundo" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods configurados não foram encontrados.\n" +#~ "Suas definições serão removidas quando você salvar a configuração." -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods ainda não foram configurados.\n" +#~ "E eles serão ativados por padrão, quando você salvar a configuração." -#~ msgid "Cannot create world: No games found" -#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo" +#~ msgid "Local install" +#~ msgstr "Instalação local" -#~ msgid "Files to be deleted" -#~ msgstr "Arquivos a serem excluídos" +#~ msgid "Add mod:" +#~ msgstr "Adicionar módulo:" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado" +#~ msgid "MODS" +#~ msgstr "MÓDULOS" -#~ msgid "Address required." -#~ msgstr "É necessário um endereço." +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTURAS" -#~ msgid "Create world" -#~ msgstr "Criar o mundo" +#~ msgid "SINGLE PLAYER" +#~ msgstr "UM JOGADOR" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Deixe o endereço em branco para iniciar um servidor local." +#~ msgid "Finite Liquid" +#~ msgstr "Líquido finito" -#~ msgid "Show Favorites" -#~ msgstr "Exibir favoritos" +#~ msgid "Preload item visuals" +#~ msgstr "Precarga de elementos visuais" -#~ msgid "Show Public" -#~ msgstr "Exibir públicos" +#~ msgid "SETTINGS" +#~ msgstr "CONFIGURAÇÕES" -#~ msgid "Advanced" -#~ msgstr "Avançado" +#~ msgid "Password" +#~ msgstr "Senha" -#~ msgid "Multiplayer" -#~ msgstr "Vários jogadores" +#~ msgid "Name" +#~ msgstr "Nome" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos" +#~ msgid "START SERVER" +#~ msgstr "SERVIDOR" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Atenção: A configuração não está consistente." +#~ msgid "Favorites:" +#~ msgstr "Favoritos:" -#~ msgid "Configuration saved. " -#~ msgstr "A configuração foi salva. " +#~ msgid "CLIENT" +#~ msgstr "CLIENTE" -#~ msgid "is required by:" -#~ msgstr "é necessário para:" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adicionar módulo" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item" +#~ msgid "Remove selected mod" +#~ msgstr "Remover o módulo selecionado" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Filtragem anisotrópica" +#~ msgid "EDIT GAME" +#~ msgstr "EDITAR JOGO" -#~ msgid "Mip-Mapping" -#~ msgstr "Mipmapping" +#~ msgid "new game" +#~ msgstr "novo jogo" -#, fuzzy -#~ msgid "Downloading" -#~ msgstr "Baixar" +#~ msgid "edit game" +#~ msgstr "editar o jogo" + +#~ msgid "Mods:" +#~ msgstr "Módulos:" + +#~ msgid "Games" +#~ msgstr "Jogos" + +#~ msgid "GAMES" +#~ msgstr "JOGOS" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Nome do jogo" + +#~ msgid "Online mod repository" +#~ msgstr "Repositório de módulos online" diff --git a/po/ro/minetest.po b/po/ro/minetest.po index e58dace34..c3449e143 100644 --- a/po/ro/minetest.po +++ b/po/ro/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-12-18 21:44+0200\n" "Last-Translator: King Artur \n" "Language-Team: LANGUAGE \n" @@ -19,163 +19,178 @@ msgstr "" "20)) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Meniul Principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Conectează" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Se încarcă..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Lume:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Ascunde Joc" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Ascunde conținutul mp" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Dependințe:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvează" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Anulează" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Activează MP" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dependințe:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Dezactivează MP" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "activat" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Activează MP" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Activează tot" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Numele lumii" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seminţe" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Mapgen" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Joc" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Creează" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ascunde Joc" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Ascunde conținutul mp" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvează" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Lume:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "activat" + +#: 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:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Creează" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Joc" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Jocul nu are nume, sau nu ai selectat un joc" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seminţe" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Numele lumii" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Ești sigur că vrei să ștergi \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Da" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Nu, sigur că nu!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Eroare la ștergerea \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Pacht de mod invalid \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Nu, sigur că nu!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Da" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Ștergi lumea \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nu" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Redenumiți Pachetul de moduri:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Acceptă" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalare Mod: fișier: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Redenumiți Pachetul de moduri:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -184,492 +199,508 @@ msgstr "" "\n" "Instalare Mod: tip de fișier neacceptat \"$1\"" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Eșuare la instalarea $1 în $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalare Mod: fișier: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de " "mod $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalează" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Pagina $1 din $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Notă" + +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Numele lumii" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Notă" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Reinstalează" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalează" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "Pagina $1 din $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Credits" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Dezvoltatori de bază" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contribuitori activi" -#: builtin/mainmenu/tab_credits.lua:54 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Dezvoltatori de bază" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Credits" + +#: 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ă" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "Foști contribuitori" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Moduri Instalate:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repozitoriu Online de moduri" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nici o descriere de mod disponibilă" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informații mod:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Redenumiți" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Dezinstalaţi Pachetul de moduri selectat" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Dezinstalaţi modul selectat" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selectează Fișierul Modului:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Moduri" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nici o descriere de mod disponibilă" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Redenumiți" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selectează Fișierul Modului:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Dezinstalaţi modul selectat" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Dezinstalaţi Pachetul de moduri selectat" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Adresă/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Nume/Parolă" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "Client" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Listă de servere publică" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Șterge" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Conectează" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Modul Creativ" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "activat" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Șterge" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nume/Parolă" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Listă de servere publică" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "activat" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "Client" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Nou" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Configurează" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Începe jocul" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Selectează lumea:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Modul Creativ" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Activează Daune" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Public" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nume/Parolă" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurează" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port server" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modul Creativ" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Activează Daune" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nume/Parolă" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nou" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "Jocul nu are nume, sau nu ai selectat un joc" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Public" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selectează lumea:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Apă opacă" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port server" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Începe jocul" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Copaci fantezici" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "Nori 3D" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +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 #, fuzzy msgid "Bilinear Filter" msgstr "Filtrare Biliniară" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Filtrare Triliniară" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Lumină mai bună" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Activează particulele" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "Nori 3D" - -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Apă opacă" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Conectează" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Umbră" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Modifică tastele" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Singleplayer" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "Mip Mapping" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Modifică tastele" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Conectează" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Activează particulele" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Copaci fantezici" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Apă opacă" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "Apă opacă" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Singleplayer" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Setări" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Umbră" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "Lumină mai bună" + +#: 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 "Pentru a permite shadere OpenGL trebuie să fie folosite." + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +msgstr "Filtrare Triliniară" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Configurează" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Meniul Principal" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Singleplayer" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Joacă" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Singleplayer" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selectează pachetul de textură:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nici o informație disponibilă" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selectează pachetul de textură:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pachete de tetură" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Eroare de conexiune (timeout?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Texturi..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "Se încarcă..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "Se rezolvă adresa..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Texturi..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Meniul Principal" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Eroare de conexiune (timeout?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Nu se poate găsi sau încărca jocul \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Specificare invalidă" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Meniul Principal" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "lipsă_tip_font" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Verifică deug.txt pentru detalii." + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Modifică tastele" + +#: src/game.cpp +msgid "Change Password" +msgstr "Schimbă Parola" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Se conectează la server..." + +#: src/game.cpp +msgid "Continue" msgstr "Continuă" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Ai murit." +#: src/game.cpp +msgid "Creating client..." +msgstr "Se creează clientul..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Reînviere" +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Se crează serverul..." -#: src/game.cpp:1092 -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/game.cpp:1106 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -695,578 +726,575 @@ msgstr "" "- Rotiță mouse: selectează obiect\n" "- T: chat\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Continuă" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Schimbă Parola" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Volum Sunet" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Modifică tastele" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Ieși în Meniu" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Ieși din joc" -#: src/game.cpp:1841 +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definițiile obiectelor..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definițiile Blocurilor..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Continuă" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Se rezolvă adresa..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Reînviere" + +#: src/game.cpp #, fuzzy msgid "Shutting down..." msgstr "Se închide..." -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Se crează serverul..." +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volum Sunet" -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Se creează clientul..." +#: src/game.cpp +msgid "You died." +msgstr "Ai murit." -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Se rezolvă adresa..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Se conectează la server..." - -#: src/game.cpp:2317 -msgid "Item definitions..." -msgstr "Definițiile obiectelor..." - -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Definițiile Blocurilor..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 -msgid "KiB/s" -msgstr "" - -#: src/game.cpp:2338 -msgid "MiB/s" -msgstr "" - -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Verifică deug.txt pentru detalii." - -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Aleargă\" = coboară" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Înapoi" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comandă" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Consloă" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Apasă de 2 ori \"sari\" pentru a zbura" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Aruncă" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Înainte" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventar" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Sari" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tastă deja folosită" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Aleargă\" = coboară" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Apasă de 2 ori \"sari\" pentru a zbura" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Tastă deja folosită" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "apasă o tastă" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Înainte" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Înapoi" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Stânga" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Salvează logurile" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Selectare distanță" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Dreapta" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Aleargă" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Sari" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Furișează" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Aruncă" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Inventar" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Comandă" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Consloă" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Intră pe zbor" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Intră pe rapid" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Intră pe rapid" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Intră pe rapid" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Intră pe zbor" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Intră pe noclip" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Selectare distanță" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Aleargă" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Salvează logurile" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "apasă o tastă" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Vechea parolă" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Noua parolă" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confirmarea parolei" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Schimbă" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmarea parolei" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Noua parolă" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vechea parolă" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Parolele nu se potrivesc!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Volum sunet: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Ieșire" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Stânga" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volum sunet: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Rotiță" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Drepata" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X Butonul 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Înapoi" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Șterge" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Înapoi" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Butonul 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Capital" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Meniu" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Pauză" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Schimbă modul" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Următorul" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Anteriorul" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Spațiu" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Jos" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Execută" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Selectează" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Sus" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Ajutor" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "PrintScreen" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Windows Stânga" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Aplicații" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Windows Dreapta" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Shift Stânga" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Shift Dreapta" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Ctrl Stânga" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Meniu Stânga" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Ctrl Dreapta" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Meniu Drepata" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Virgulă" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Punct" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Înapoi" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Capital" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Șterge" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgulă" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Jos" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Ștergere OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Execută" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ajutor" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Stânga" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl Stânga" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Meniu Stânga" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift Stânga" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Windows Stânga" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Meniu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Rotiță" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Schimbă modul" + +#: src/keycode.cpp +msgid "Next" +msgstr "Următorul" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Curățare OEM" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pauză" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punct" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Anteriorul" + +#: src/keycode.cpp +msgid "Return" +msgstr "Înapoi" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Drepata" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl Dreapta" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Meniu Drepata" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift Dreapta" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Windows Dreapta" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selectează" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "PrintScreen" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spațiu" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Sus" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Butonul 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Butonul 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Mărire" -#~ msgid "Game Name" -#~ msgstr "Numele jocului" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Descarcă" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\"" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip Mapping" -#~ msgid "GAMES" -#~ msgstr "JOCURI" - -#~ msgid "Games" -#~ msgstr "Jocuri" - -#~ msgid "Mods:" -#~ msgstr "Moduri:" - -#~ msgid "edit game" -#~ msgstr "modifică jocul" - -#~ msgid "new game" -#~ msgstr "joc nou" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFICĂ JOCUL" - -#~ msgid "Remove selected mod" -#~ msgstr "Șterge modul selectat" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adaugă modul" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "Favorites:" -#~ msgstr "Preferate:" - -#~ msgid "START SERVER" -#~ msgstr "DESCHIDE SERVERUL" - -#~ msgid "Name" -#~ msgstr "Nume" - -#~ msgid "Password" -#~ msgstr "Parolă" - -#~ msgid "SETTINGS" -#~ msgstr "SETĂRI" - -#~ msgid "Preload item visuals" -#~ msgstr "Pre-încarcă imaginile obiectelor" - -#~ msgid "Finite Liquid" -#~ msgstr "Lichid finit" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "SINGLE PLAYER" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACHETE DE TEXTURĂ" - -#~ msgid "MODS" -#~ msgstr "MODURI" - -#~ msgid "Add mod:" -#~ msgstr "Adăugaţi mod:" - -#~ msgid "Local install" -#~ msgstr "Instalare locală" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Filtru Anizotropic" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Click stânga: Mută toate obiectele, Click dreapta: Mută un singur obiect" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Filtru Anizotropic" +#~ msgid "Local install" +#~ msgstr "Instalare locală" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip Mapping" +#~ msgid "Add mod:" +#~ msgstr "Adăugaţi mod:" -#, fuzzy -#~ msgid "Downloading" -#~ msgstr "Descarcă" +#~ msgid "MODS" +#~ msgstr "MODURI" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACHETE DE TEXTURĂ" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "SINGLE PLAYER" + +#~ msgid "Finite Liquid" +#~ msgstr "Lichid finit" + +#~ msgid "Preload item visuals" +#~ msgstr "Pre-încarcă imaginile obiectelor" + +#~ msgid "SETTINGS" +#~ msgstr "SETĂRI" + +#~ msgid "Password" +#~ msgstr "Parolă" + +#~ msgid "Name" +#~ msgstr "Nume" + +#~ msgid "START SERVER" +#~ msgstr "DESCHIDE SERVERUL" + +#~ msgid "Favorites:" +#~ msgstr "Preferate:" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adaugă modul" + +#~ msgid "Remove selected mod" +#~ msgstr "Șterge modul selectat" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFICĂ JOCUL" + +#~ msgid "new game" +#~ msgstr "joc nou" + +#~ msgid "edit game" +#~ msgstr "modifică jocul" + +#~ msgid "Mods:" +#~ msgstr "Moduri:" + +#~ msgid "Games" +#~ msgstr "Jocuri" + +#~ msgid "GAMES" +#~ msgstr "JOCURI" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Numele jocului" + +#~ msgid "Online mod repository" +#~ msgstr "Repozitoriu Online de moduri" diff --git a/po/ru/minetest.po b/po/ru/minetest.po index 95d31b44d..b7ee57dca 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -7,177 +7,192 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-07 11:49+0200\n" "Last-Translator: Alex “XShell” Schekoldin \n" -"Language-Team: Russian " -"\n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" -"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"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 2.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "Ошибка в скрипте Lua в моде:" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Произошла ошибка:" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Главное меню" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Подключиться" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Загрузка..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" "Попробуйте обновить список публичных серверов и проверьте связь с Интернетом." -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Мир:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Скрыть игру" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Скрыть содержимое модпака" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Мод:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Зависит от:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Сохранить" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "Отменить" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "Включить мультиплеер" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Зависит от:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Отключить мультиплеер" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "включено" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Включить мультиплеер" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Включить всё" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Название мира" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Сид" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Скрыть игру" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Генератор карты" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Скрыть содержимое модпака" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Игра" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Мод:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Создать" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Сохранить" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "У вас не установлено мини-игр." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Мир:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Загрузите их с minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "включено" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Внимание: \"Minimal development test\" для разработчиков." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Скачайте мини-игры, такие как minetest_game, на minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Мир под названием \"$1\" уже существует" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Создать" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Скачайте мини-игры, такие как minetest_game, на minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Загрузите их с minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Игра" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "Генератор карты" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Не задано имя мира или не выбрана игра" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Сид" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal 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 subgames installed." +msgstr "У вас не установлено мини-игр." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Уверены, что хотите удалить \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Да" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Никак нет!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: невозможно удалить \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: неправильный путь \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Никак нет!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Да" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Удалить мир \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Нет" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Переименовать модпак:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Принять" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Установка мода: файл \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Переименовать модпак:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -185,454 +200,510 @@ msgstr "" "\n" "Установка мода: неподдерживаемый тип файла \"$1\" или битый архив" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Невозможно установить $1 в $2" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Установка мода: файл \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Установка мода: невозможно определить название мода для $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Установка мода: невозможно найти подходящее имя директории для модпака $1" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Установка мода: невозможно определить название мода для $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Не сортировано" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Поиск" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Загрузка $1..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Успешно установлено:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Краткое имя:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Рейтинг" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Переустановить" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Установить" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Закрыть хранилище" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Загрузка $1..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Установить" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Страница $1 из $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Благодарности" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Рейтинг" -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "Основные разработчики" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Поиск" -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Краткое имя:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Успешно установлено:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Не сортировано" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Переустановить" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Активные контрибьюторы" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" -msgstr "Разработчики в отставке" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Основные разработчики" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Благодарности" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Контрибьюторы в отставке" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Разработчики в отставке" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Установленные моды:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Онлайн-хранилище модов" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Описание к моду отсутствует" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Описание мода:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Переименовать" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Удалить выбранный мод-пак" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Удалить выбранный мод" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Выберите файл с модом:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "Моды" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Описание к моду отсутствует" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Переименовать" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Выберите файл с модом:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Удалить выбранный мод" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Удалить выбранный мод-пак" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Адрес / Порт:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Имя / Пароль:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Список публичных серверов" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Удалить" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Подключиться" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Режим творчества" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Разрешить увечья" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP разрешён" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Client" msgstr "Клиент" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Новый" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Подключиться" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "Настроить" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Начать игру" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Выберите мир:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Режим творчества" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" msgstr "Разрешить увечья" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Публичные" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Удалить" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Имя / Пароль" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Имя / Пароль:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Список публичных серверов" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP разрешён" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Адрес" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "Порт" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Настроить" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Порт сервера" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Режим творчества" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Разрешить увечья" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Имя / Пароль" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Новый" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" msgstr "Не выбран мир!" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Порт" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Публичные" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Выберите мир:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Сервер" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "Opaque Leaves" -msgstr "Непрозрачная листва" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Порт сервера" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "Упрощённая листва" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Начать игру" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Fancy Leaves" -msgstr "Красивая листва" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "Без фильтраций" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Bilinear Filter" -msgstr "Билинейная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Trilinear Filter" -msgstr "Трилинейная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "Без Мипмаппинга" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "Мипмаппинг" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "Мипмаппинг с анизотр. фильтром" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Уверены, что хотите сбросить мир одиночной игры?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "Нет!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Мягкое освещение" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Включить частицы" - -#: builtin/mainmenu/tab_settings.lua:206 +#: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" msgstr "3D облака" -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "Непрозрачная вода" +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:210 -msgid "Connected Glass" -msgstr "Стёкла без швов" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "Подсветка нод" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "Текстурирование:" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "Уверены, что хотите сбросить мир одиночной игры?" -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "Рендеринг:" +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "Билинейная фильтрация" -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "Перезапустите Minetest для принятия изменений" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Шейдеры" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Смена управления" - -#: builtin/mainmenu/tab_settings.lua:236 -msgid "Reset singleplayer world" -msgstr "Сброс одиночной игры" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "Масштаб интерфейса" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "Коэффициент масштаба интерфейса: " - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "Свободный выбор цели" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "Чувствительность (пк)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" msgstr "Бампмаппинг" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Смена управления" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "Стёкла без швов" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Включить частицы" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "Красивая листва" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "Масштаб интерфейса" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "Генерировать карты нормалей" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "Без фильтраций" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "Без Мипмаппинга" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "Нет!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "Подсветка нод" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.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 msgid "Parallax Occlusion" msgstr "Parallax Occlusion" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "Волны на воде" +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "Сброс одиночной игры" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "Покачивание листвы" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "Коэффициент масштаба интерфейса: " -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "Покачивание растений" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Для включения шейдеров необходим драйвер OpenGL." - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Настройки" -#: builtin/mainmenu/tab_simple_main.lua:82 -msgid "Start Singleplayer" -msgstr "Начать одиночную игру" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Шейдеры" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: 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 +msgid "Touch free target" +msgstr "Свободный выбор цели" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "Чувствительность (пк)" + +#: 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 Plants" +msgstr "Покачивание растений" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +msgstr "Волны на воде" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Настройка модов" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Главное меню" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Начать одиночную игру" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Играть" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Одиночная игра" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Выберите пакет текстур:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Описание отсутствует" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Выберите пакет текстур:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Пакеты текстур" -#: src/client.cpp:1721 -msgid "Loading textures..." -msgstr "Загрузка текстур..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Ошибка соединения (таймаут?)" -#: src/client.cpp:1736 -msgid "Rebuilding shaders..." -msgstr "Сборка шейдеров..." - -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "Инициирование нод..." - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "Инициирование нод" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Текстуры предметов..." - -#: src/client.cpp:1793 +#: src/client.cpp msgid "Done!" msgstr "Готово!" -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Главное меню" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Инициирование нод" -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "Имя игрока слишком длинное." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Инициирование нод..." -#: src/client/clientlauncher.cpp:261 +#: src/client.cpp +msgid "Item textures..." +msgstr "Текстуры предметов..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Загрузка текстур..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Сборка шейдеров..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Ошибка соединения (таймаут?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Не выбран мир и не введен адрес. Нечего делать." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "По этому пути мира нет: " - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Невозможно найти или загрузить игру \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Неправильная конфигурация игры." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "По этому пути мира нет: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Подробная информация в debug.txt." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Смена управления" + +#: src/game.cpp +msgid "Change Password" +msgstr "Изменить пароль" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Подключение к серверу..." + +#: src/game.cpp +msgid "Continue" msgstr "Продолжить" -#: src/game.cpp:1072 -msgid "You died." -msgstr "Вы умерли." +#: src/game.cpp +msgid "Creating client..." +msgstr "Создание клиента..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Возродиться" +#: src/game.cpp +msgid "Creating server..." +msgstr "Создание сервера..." -#: src/game.cpp:1092 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Управление по умолчанию:\n" +"- WASD: движение\n" +"- Пробел: прыжок/вверх\n" +"- Shift: красться/вниз\n" +"- Q: бросить предмет\n" +"- I: инвентарь\n" +"- Мышка: поворот\n" +"- ЛКМ: копать/удар\n" +"- ПКМ: поставить/использовать\n" +"- Колесико мыши: выбор предмета\n" +"- T: чат\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -661,605 +732,536 @@ msgstr "" "экран:\n" "--> Положить один предмет в ячейку\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Управление по умолчанию:\n" -"- WASD: движение\n" -"- Пробел: прыжок/вверх\n" -"- Shift: красться/вниз\n" -"- Q: бросить предмет\n" -"- I: инвентарь\n" -"- Мышка: поворот\n" -"- ЛКМ: копать/удар\n" -"- ПКМ: поставить/использовать\n" -"- Колесико мыши: выбор предмета\n" -"- T: чат\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Продолжить" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Изменить пароль" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Громкость звука" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Смена управления" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Выход в меню" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Выход в ОС" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Завершение..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Создание сервера..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Создание клиента..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Получение адреса..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Подключение к серверу..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Описания предметов..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Описания нод..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Медиафайлы..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "КиБ/с" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Медиафайлы..." + +#: src/game.cpp msgid "MiB/s" msgstr "МиБ/с" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Подробная информация в debug.txt." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Описания нод..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Продолжить" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Получение адреса..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Возродиться" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Завершение..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Громкость звука" + +#: src/game.cpp +msgid "You died." +msgstr "Вы умерли." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Введите " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "OK" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Использовать\" = вниз" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Назад" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Чат" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Команда" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Консоль" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Двойной прыжок = летать" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Бросить" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Вперед" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Инвентарь" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Прыжок" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Клавиша уже используется" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Сочетания клавиш. (Если это меню сломалось, удалите настройки из minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Использовать\" = вниз" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Двойной прыжок = летать" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Клавиша уже используется" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "нажмите клавишу" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Вперед" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Назад" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Влево" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Вправо" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Использовать" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Прыжок" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Красться" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Бросить" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Инвентарь" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Чат" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Команда" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Консоль" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Полёт" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Ускорение" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle Cinematic" -msgstr "Киношность" - -#: src/guiKeyChangeMenu.cpp:414 -msgid "Toggle noclip" -msgstr "Включить noclip" - -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Зона видимости" - -#: src/guiKeyChangeMenu.cpp:416 +#: src/guiKeyChangeMenu.cpp msgid "Print stacks" msgstr "Печать стеков" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Старый пароль" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Зона видимости" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Новый пароль" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Вправо" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Подтверждение пароля" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Красться" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Киношность" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Ускорение" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Полёт" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Включить noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Использовать" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "нажмите клавишу" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Изменить" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Подтверждение пароля" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Новый пароль" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Старый пароль" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Пароли не совпадают!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Громкость звука: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Выход" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Левая кнопка" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Громкость звука: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Средняя кнопка" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Правая кнопка" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Доп. кнопка 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Назад" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Очистить" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Вернуться" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Доп. кнопка 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Кана" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Меню" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Пауза" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Преобразовать" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Конец" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Кандзи" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Не преобразовано" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Next" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Prior" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Пробел" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Вниз" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Выполнить" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Выбор" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Вверх" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Справка" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Cнимок" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Левая кл. Win" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Приложения" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Доп. клав. 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Доп. клав. 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Прав. кл. Win" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Доп. клав. 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Доп. клав. 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Доп. клав. 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Доп. клав. 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Доп. клав. 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Доп. клав. 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Доп. клав. *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Доп. клав. +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Доп. клав. -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Доп. клав. /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Доп. клав. 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Доп. клав. 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Левый Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Правый Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Левый Ctrl" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Левая клавиша меню" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Правый Ctrl" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Правая клавиша меню" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Запятая" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Минус" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Период" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Плюс" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Внимание" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Назад" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Очистить" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Запятая" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Преобразовать" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Вниз" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Стереть ОНС" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Выполнить" + +#: src/keycode.cpp +msgid "Final" +msgstr "Конец" + +#: src/keycode.cpp +msgid "Help" +msgstr "Справка" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Кана" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Кандзи" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Левая кнопка" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Левый Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Левая клавиша меню" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Левый Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Левая кл. Win" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Меню" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Средняя кнопка" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Минус" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Next" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Не преобразовано" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Доп. клав. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Доп. клав. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Доп. клав. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Доп. клав. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Доп. клав. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Доп. клав. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Доп. клав. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Доп. клав. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Доп. клав. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Доп. клав. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Доп. клав. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Доп. клав. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Доп. клав. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Доп. клав. 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Очистить OEM" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Пауза" + +#: src/keycode.cpp +msgid "Period" +msgstr "Период" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Плюс" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prior" + +#: src/keycode.cpp +msgid "Return" +msgstr "Вернуться" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Правая кнопка" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Правый Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Правая клавиша меню" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Правый Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Прав. кл. Win" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Выбор" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Cнимок" + +#: src/keycode.cpp +msgid "Space" +msgstr "Пробел" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Вверх" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Доп. кнопка 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Доп. кнопка 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Масштаб" -#~ msgid "Game Name" -#~ msgstr "Название" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Загрузить" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру \"$2\"" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-текстурирование" -#~ msgid "GAMES" -#~ msgstr "ИГРЫ" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Анизотропная фильтрация" -#~ msgid "Games" -#~ msgstr "Игры" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет" -#~ msgid "Mods:" -#~ msgstr "Моды:" +#~ msgid "is required by:" +#~ msgstr "требуется для:" -#~ msgid "edit game" -#~ msgstr "Редактировать" +#~ msgid "Configuration saved. " +#~ msgstr "Настройки сохранены. " -#~ msgid "new game" -#~ msgstr "Создать игру" +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Предупреждение: Неверная конфигурация. " -#~ msgid "EDIT GAME" -#~ msgstr "РЕДАКТИРОВАНИЕ" +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы" -#~ msgid "Remove selected mod" -#~ msgstr "Удалить мод" +#~ msgid "Multiplayer" +#~ msgstr "Сетевая игра" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Добавить мод" +#~ msgid "Advanced" +#~ msgstr "Дополнительно" -#~ msgid "CLIENT" -#~ msgstr "КЛИЕНТ" +#~ msgid "Show Public" +#~ msgstr "Публичные" -#~ msgid "Favorites:" -#~ msgstr "Избранное:" +#~ msgid "Show Favorites" +#~ msgstr "Избранные" -#~ msgid "START SERVER" -#~ msgstr "СЕРВЕР" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Оставьте адрес пустым для запуска локального сервера." -#~ msgid "Name" -#~ msgstr "Имя" +#~ msgid "Create world" +#~ msgstr "Создать мир" -#~ msgid "Password" -#~ msgstr "Пароль" +#~ msgid "Address required." +#~ msgstr "Нужно ввести адрес." -#~ msgid "SETTINGS" -#~ msgstr "НАСТРОЙКИ" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Невозможно удалить мир: Ничего не выбрано" -#~ msgid "Preload item visuals" -#~ msgstr "Предзагрузка изображений" +#~ msgid "Files to be deleted" +#~ msgstr "Следующие файлы будут удалены" -#~ msgid "Finite Liquid" -#~ msgstr "Конечные жидкости" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Невозможно создать мир: Ни одной игры не найдено" -#~ msgid "SINGLE PLAYER" -#~ msgstr "ОДИНОЧНАЯ ИГРА" +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Невозможно настроить мир: ничего не выбрано" -#~ msgid "TEXTURE PACKS" -#~ msgstr "ПАКЕТЫ ТЕКСТУР" - -#~ msgid "MODS" -#~ msgstr "МОДЫ" - -#~ msgid "Add mod:" -#~ msgstr "Добавить мод:" - -#~ msgid "Local install" -#~ msgstr "Локальная установка" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Предупреждение: Некоторые моды еще не настроены.\n" -#~ "Их стандартные настройки будут установлены, когда вы сохраните " -#~ "конфигурацию. " - -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Предупреждение: Некоторые моды не найдены.\n" -#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Ошибка при удалении файлов мира" #~ msgid "" #~ "Default Controls:\n" @@ -1286,63 +1288,95 @@ msgstr "Масштаб" #~ "- ESC: это меню\n" #~ "- T: чат\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Ошибка при удалении файлов мира" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Предупреждение: Некоторые моды не найдены.\n" +#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. " -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Невозможно настроить мир: ничего не выбрано" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Предупреждение: Некоторые моды еще не настроены.\n" +#~ "Их стандартные настройки будут установлены, когда вы сохраните " +#~ "конфигурацию. " -#~ msgid "Cannot create world: No games found" -#~ msgstr "Невозможно создать мир: Ни одной игры не найдено" +#~ msgid "Local install" +#~ msgstr "Локальная установка" -#~ msgid "Files to be deleted" -#~ msgstr "Следующие файлы будут удалены" +#~ msgid "Add mod:" +#~ msgstr "Добавить мод:" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Невозможно удалить мир: Ничего не выбрано" +#~ msgid "MODS" +#~ msgstr "МОДЫ" -#~ msgid "Address required." -#~ msgstr "Нужно ввести адрес." +#~ msgid "TEXTURE PACKS" +#~ msgstr "ПАКЕТЫ ТЕКСТУР" -#~ msgid "Create world" -#~ msgstr "Создать мир" +#~ msgid "SINGLE PLAYER" +#~ msgstr "ОДИНОЧНАЯ ИГРА" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Оставьте адрес пустым для запуска локального сервера." +#~ msgid "Finite Liquid" +#~ msgstr "Конечные жидкости" -#~ msgid "Show Favorites" -#~ msgstr "Избранные" +#~ msgid "Preload item visuals" +#~ msgstr "Предзагрузка изображений" -#~ msgid "Show Public" -#~ msgstr "Публичные" +#~ msgid "SETTINGS" +#~ msgstr "НАСТРОЙКИ" -#~ msgid "Advanced" -#~ msgstr "Дополнительно" +#~ msgid "Password" +#~ msgstr "Пароль" -#~ msgid "Multiplayer" -#~ msgstr "Сетевая игра" +#~ msgid "Name" +#~ msgstr "Имя" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы" +#~ msgid "START SERVER" +#~ msgstr "СЕРВЕР" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Предупреждение: Неверная конфигурация. " +#~ msgid "Favorites:" +#~ msgstr "Избранное:" -#~ msgid "Configuration saved. " -#~ msgstr "Настройки сохранены. " +#~ msgid "CLIENT" +#~ msgstr "КЛИЕНТ" -#~ msgid "is required by:" -#~ msgstr "требуется для:" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Добавить мод" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет" +#~ msgid "Remove selected mod" +#~ msgstr "Удалить мод" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Анизотропная фильтрация" +#~ msgid "EDIT GAME" +#~ msgstr "РЕДАКТИРОВАНИЕ" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-текстурирование" +#~ msgid "new game" +#~ msgstr "Создать игру" -#, fuzzy -#~ msgid "Downloading" -#~ msgstr "Загрузить" +#~ msgid "edit game" +#~ msgstr "Редактировать" + +#~ msgid "Mods:" +#~ msgstr "Моды:" + +#~ msgid "Games" +#~ msgstr "Игры" + +#~ msgid "GAMES" +#~ msgstr "ИГРЫ" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Название" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Перезапустите Minetest для принятия изменений" + +#~ msgid "Rendering:" +#~ msgstr "Рендеринг:" + +#~ msgid "Online mod repository" +#~ msgstr "Онлайн-хранилище модов" diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 2fdb5b6bb..4e64a2672 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-07-14 16:48+0200\n" "Last-Translator: Michal Čihař \n" "Language-Team: Turkish slotuna bir item bırak\n" -#: src/game.cpp:1106 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Varsayılanlar Kontroller:\n" -"- WASD: Hareket et\n" -"- Boşluk: Zıpla/Tırman\n" -"- Shift: Sessiz yürü/Aşağı in\n" -"- Q: Elindekini bırak\n" -"- I: Envanter\n" -"- Fare: Dön/Bak\n" -"- Sol fare: Kaz/Vur\n" -"- Sağ fare: Yerleştir/Kullan\n" -"- Fare tekerleği: Araç seç\n" -"- T: Sohbet\n" - -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Devam et" - -#: src/game.cpp:1129 -msgid "Change Password" -msgstr "Şifre değiştir" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Ses yüksekliği :" - -#: src/game.cpp:1136 -msgid "Change Keys" -msgstr "Tuşları değiştir" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Menüye dön" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Oyundan Çık" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "Kapatılıyor..." - -#: src/game.cpp:1948 -msgid "Creating server..." -msgstr "Sunucu oluşturuluyor..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "İstemci oluşturuluyor..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Adres çözümleniyor..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Sunucuya bağlanılıyor..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "Nesne tanımlamaları..." -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "Blok tanımlamaları..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Hata ayrıntıları için debug.txt dosyasını inceleyin." +#: src/game.cpp +msgid "Node definitions..." +msgstr "Blok tanımlamaları..." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Uygula" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Adres çözümleniyor..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Yeniden Canlan" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Kapatılıyor..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Ses yüksekliği :" + +#: src/game.cpp +msgid "You died." +msgstr "Geberdin." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Entrer " -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "tamam" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Kullan Tuşu\" = Aşağı in" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Çift zıplayarak uçma modunu aç/kapa" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Tuş zaten kullanımda" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "tuşa bas" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "İleri" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Geri" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "Sol" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "Sağ" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Kullan" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Zıpla" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "Sessiz Yürü" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Bırak" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Envanter" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Konuşma" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Komut" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Konsol" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Uçuş modu aç/kapa" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Çift zıplayarak uçma modunu aç/kapa" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Hız modu aç/kapa" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Bırak" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "İleri" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Envanter" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Zıpla" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tuş zaten kullanımda" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Sol" + +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Yazdırma yığınları" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Uzaklık seçimi" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Sağ" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Sessiz Yürü" + +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Hız modu aç/kapa" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Hız modu aç/kapa" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Uçuş modu aç/kapa" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Noclip aç/kapa" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Uzaklık seçimi" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Kullan" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Yazdırma yığınları" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "tuşa bas" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Eski şifre" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Yeni şifre" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Şifreyi doğrulayın" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Değiştir" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Şifreyi doğrulayın" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Yeni şifre" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Eski şifre" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Şifreler uyuşmuyor !" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Ses yüksekliği :" - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Çıkış" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Sol tuşu" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Ses yüksekliği :" -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Orta Tuş" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Sağ tuş" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X Button 1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "Geri" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Temizle" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "Return" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X Button 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Büyük" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Kontroller" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Menü" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Beklet" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "Dönüştür" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Çıkış" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Bitiş" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "Dönüştürme" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "Son" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Ev" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "Mod değiştir" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "İleri" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Öncelikli" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "Boşluk" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Aşağı" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "Çalıştır" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Yazdır" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Seç" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Yukarı" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Yardım" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "Ekran Resmi" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Sol Windows tuşu" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Uygulamalar" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Sağ Windows tuşu" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Uyu" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Sol Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Sağ Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Sol CTRL" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Sol Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Sağ CTRL" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Sağ Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Virgul" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Eksi" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "Dönem" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Artı" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Dikkat" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "Geri" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Büyük" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Temizle" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgul" + +#: src/keycode.cpp +msgid "Control" +msgstr "Kontroller" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Dönüştür" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Aşağı" + +#: src/keycode.cpp +msgid "End" +msgstr "Son" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "l'OEF 'i sil" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Çıkış" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "Çalıştır" + +#: src/keycode.cpp +msgid "Final" +msgstr "Bitiş" + +#: src/keycode.cpp +msgid "Help" +msgstr "Yardım" + +#: src/keycode.cpp +msgid "Home" +msgstr "Ev" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Sol tuşu" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Sol CTRL" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Sol Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Sol Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Sol Windows tuşu" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Orta Tuş" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Eksi" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mod değiştir" + +#: src/keycode.cpp +msgid "Next" +msgstr "İleri" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Dönüştürme" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Temizle" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Beklet" + +#: src/keycode.cpp +msgid "Period" +msgstr "Dönem" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Artı" + +#: src/keycode.cpp +msgid "Print" +msgstr "Yazdır" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Öncelikli" + +#: src/keycode.cpp +msgid "Return" +msgstr "Return" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Sağ tuş" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Sağ CTRL" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Sağ Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Sağ Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Sağ Windows tuşu" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Seç" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Uyu" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Ekran Resmi" + +#: src/keycode.cpp +msgid "Space" +msgstr "Boşluk" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Yukarı" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Button 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Button 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Yakınlaştır" -#~ msgid "Numpad " -#~ msgstr "Numpad " - -#~ msgid " MB/s" -#~ msgstr " MB/s" - -#~ msgid " KB/s" -#~ msgstr " KB/s" - -#~ msgid "Fly mode" -#~ msgstr "Uçuş modu" - -#~ msgid "Tri-Linear Filtering" -#~ msgstr "Üç yönlü süzme" - -#~ msgid "Bi-Linear Filtering" -#~ msgstr "Çift yönlü süzme" - -#~ msgid "Anisotropic Filtering" -#~ msgstr "Eşyönsüz süzme" - -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid "Downloading" +#~ msgstr "İndiriliyor" #~ msgid "please wait..." #~ msgstr "lütfen bekleyin..." -#~ msgid "Downloading" -#~ msgstr "İndiriliyor" +#~ msgid "Mip-Mapping" +#~ msgstr "Mip-Mapping" + +#~ msgid "Anisotropic Filtering" +#~ msgstr "Eşyönsüz süzme" + +#~ msgid "Bi-Linear Filtering" +#~ msgstr "Çift yönlü süzme" + +#~ msgid "Tri-Linear Filtering" +#~ msgstr "Üç yönlü süzme" + +#~ msgid "Fly mode" +#~ msgstr "Uçuş modu" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid "Numpad " +#~ msgstr "Numpad " + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Değişikliklerin etkin olabilmesi için minetesti yeniden başlatın" + +#~ msgid "Rendering:" +#~ msgstr "Kaplama:" + +#~ msgid "Online mod repository" +#~ msgstr "Çevirimiçi eklenti deposu" diff --git a/po/uk/minetest.po b/po/uk/minetest.po index 697214e08..44f0e9008 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2013-06-27 01:22+0200\n" "Last-Translator: Vladimir a \n" "Language-Team: LANGUAGE \n" @@ -19,663 +19,694 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Головне Меню" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Підключитися" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "Завантаження..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -#, fuzzy -msgid "World:" -msgstr "Виберіть світ:" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "Відміна" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -#, fuzzy -msgid "Hide Game" -msgstr "Гра" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "залежить від:" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Зберегти" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 -msgid "Cancel" -msgstr "Відміна" - -#: builtin/mainmenu/dlg_config_world.lua:71 -#, fuzzy -msgid "Enable MP" -msgstr "Увімкнути Все" - -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Вимкнути Усе" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "Увімкнено" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Увімкнути Все" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Увімкнути Все" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Назва Світу" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Гра" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Створити" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Зберегти" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Виберіть світ:" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Увімкнено" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Неможливо створити світ: Світ з таким ім'ям вже існує" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Створити" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "Гра" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Назва Світу" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "Так" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "Так" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Видалити світ" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ні" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp #, fuzzy msgid "Accept" msgstr "Підтвердити" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Не вдалося ініціалізувати світ" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" +#: builtin/mainmenu/store.lua +msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Назва Світу" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Подяка" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:54 -msgid "Previous Core Developers" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:59 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Подяка" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Виберіть світ:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "Адреса/Порт" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "Ім'я/Пароль" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, fuzzy -msgid "Public Serverlist" -msgstr "Список публічних серверів:" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "Видалити" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Підключитися" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "Режим Створення" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "Увімкнено" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Видалити" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Ім'я/Пароль" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Public Serverlist" +msgstr "Список публічних серверів:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "Увімкнено" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "Новий" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Налаштувати" -#: builtin/mainmenu/tab_server.lua:29 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Режим Створення" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Ввімкнути урон" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Ім'я/Пароль" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Новий" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Публичний" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Виберіть світ:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua #, fuzzy msgid "Start Game" msgstr "Почати гру / Підключитися" -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "Виберіть світ:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "Режим Створення" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "Ввімкнути урон" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Публичний" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Ім'я/Пароль" - -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "3D Хмари" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_settings.lua +msgid "8x" msgstr "" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 -msgid "No world created or selected!" +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" msgstr "" -#: builtin/mainmenu/tab_server.lua:191 -msgid "Server" +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "Непрозора вода" - -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Simple Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "Гарні дерева" - -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:33 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bilinear Filter" msgstr "Білінійна фільтрація" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "Трилінійна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "Рівне освітлення" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "Ввімкнути частки" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "3D Хмари" - -#: builtin/mainmenu/tab_settings.lua:208 -#, fuzzy -msgid "Opaque Water" -msgstr "Непрозора вода" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "Підключитися" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "Шейдери" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "Змінити клавіши" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "Одиночна гра" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "MIP-текстурування" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Змінити клавіши" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "Підключитися" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "Ввімкнути частки" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "Гарні дерева" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "Непрозора вода" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Water" +msgstr "Непрозора вода" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "Одиночна гра" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Налаштування" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Одиночна гра" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "Шейдери" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: 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 "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +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 "Waving Water" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Налаштувати" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Головне Меню" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Одиночна гра" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Грати" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Одиночна гра" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Помилка з'єднання (час вийшов?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Текстура предметів..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "Завантаження..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "Отримання адреси..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "Текстура предметів..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "Головне Меню" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Помилка з'єднання (час вийшов?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Жоден світ не вибрано та не надано адреси. Нічого не робити." - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Неможливо знайти, або завантажити гру \"" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Помилкова конфігурація гри." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" -msgstr "Далі" - -#: src/game.cpp:1072 -msgid "You died." -msgstr "Ви загинули." - -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "Народитися" - -#: src/game.cpp:1092 +#: src/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" +"\n" +"Check debug.txt for details." msgstr "" +"\n" +"Деталі у файлі debug.txt." -#: src/game.cpp:1106 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Змінити клавіши" + +#: src/game.cpp +msgid "Change Password" +msgstr "Змінити Пароль" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Підключення до сервера..." + +#: src/game.cpp +msgid "Continue" +msgstr "Продовжити" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Створення клієнта..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Створення сервера..." + +#: src/game.cpp #, fuzzy msgid "" "Default Controls:\n" @@ -702,598 +733,592 @@ msgstr "" "- Колесо миші: вибір предмета\n" "- T: чат\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "Продовжити" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "Змінити Пароль" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "Гучність звуку" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "Змінити клавіши" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "Вихід в меню" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "Вихід з гри" -#: src/game.cpp:1841 -msgid "Shutting down..." -msgstr "" - -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "Створення сервера..." - -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "Створення клієнта..." - -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "Отримання адреси..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "Підключення до сервера..." - -#: src/game.cpp:2317 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2334 +#: src/game.cpp msgid "KiB/s" msgstr "" -#: src/game.cpp:2338 +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp msgid "MiB/s" msgstr "" -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "Node definitions..." msgstr "" -"\n" -"Деталі у файлі debug.txt." -#: src/guiFormSpecMenu.cpp:2855 +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Далі" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Отримання адреси..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Народитися" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Гучність звуку" + +#: src/game.cpp +msgid "You died." +msgstr "Ви загинули." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "\"Use\" = climb down" +msgstr "\"Використовувати\" = підніматися в гору" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Назад" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Чат" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Комманда" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Консоль" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Подвійний \"Стрибок\" щоб полетіти" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Викинути" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Уперед" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Інвентар" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Стрибок" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Клавіша вже використовується" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Комбінації клавіш. (Якщо це меню зламалося, видаліть налаштування з minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -#, fuzzy -msgid "\"Use\" = climb down" -msgstr "\"Використовувати\" = підніматися в гору" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Подвійний \"Стрибок\" щоб полетіти" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "Клавіша вже використовується" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "Натисніть клавішу" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "Уперед" - -#: src/guiKeyChangeMenu.cpp:400 -msgid "Backward" -msgstr "Назад" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Ліворуч" -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "Надрукувати стек" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Вибір діапазону" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "Праворуч" -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "Використовувати" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "Стрибок" - -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Крастися" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "Викинути" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "Інвентар" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Chat" -msgstr "Чат" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Command" -msgstr "Комманда" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Console" -msgstr "Консоль" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "Переключити режим польоту" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "Переключити швидкий режим" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "Переключити швидкий режим" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Переключити швидкий режим" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Переключити режим польоту" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Переключити режим проходження скрізь стін" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "Вибір діапазону" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Використовувати" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "Надрукувати стек" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Натисніть клавішу" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Старий Пароль" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Новий Пароль" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Підтвердження нового пароля" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Змінити" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Підтвердження нового пароля" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Новий Пароль" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Старий Пароль" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Паролі не збігаються!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "Гучність Звуку: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Вихід" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "Ліва кнопка" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Гучність Звуку: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "Середня кнопка" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "Права кнопка" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "Додаткова кнопка 1" - -#: src/keycode.cpp:224 -#, fuzzy -msgid "Back" -msgstr "Назад" - -#: src/keycode.cpp:224 -#, fuzzy -msgid "Clear" -msgstr "Clear" - -#: src/keycode.cpp:224 -#, fuzzy -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "Додаткова кнопка 2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "Меню" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "Пауза" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Convert" -msgstr "Конвертувати" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Final" -msgstr "Кинець" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Nonconvert" -msgstr "Не конвертуванно" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:227 -#, fuzzy -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:227 -#, fuzzy -msgid "Mode Change" -msgstr "Mode" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "Page Up" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Page Down" - -#: src/keycode.cpp:227 -#, fuzzy -msgid "Space" -msgstr "Space" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "Вниз" - -#: src/keycode.cpp:228 -#, fuzzy -msgid "Execute" -msgstr "Виконати" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "Print Screen" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "Вгору" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "Допомога" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:229 -#, fuzzy -msgid "Snapshot" -msgstr "Знімок" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "Ліва клавіша Win (Command)" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "Додатки" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "Num 0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "Num 1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "Права клавіша Win (Command)" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "Сон" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "Num 2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "Num 3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "Num 4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "Num 5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "Num 6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "Num 7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "Num *" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "Num +" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "Num -" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "Num /" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "Num 8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "Num 9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "Ліва клавіша Shift" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "Права клавіша Shift" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "Ліва клавіша Control" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "Ліва клавіша Menu" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "Права клавіша Control" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "Права клавіша Menu" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "Кома" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "Мінус" - -#: src/keycode.cpp:243 -#, fuzzy -msgid "Period" -msgstr "Період" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "Плюс" - -#: src/keycode.cpp:247 +#: src/keycode.cpp #, fuzzy msgid "Attn" msgstr "Увага" -#: src/keycode.cpp:247 +#: src/keycode.cpp +#, fuzzy +msgid "Back" +msgstr "Назад" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +#, fuzzy +msgid "Clear" +msgstr "Clear" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Кома" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +#, fuzzy +msgid "Convert" +msgstr "Конвертувати" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "Вниз" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp #, fuzzy msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp #, fuzzy msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:248 +#: src/keycode.cpp +#, fuzzy +msgid "Execute" +msgstr "Виконати" + +#: src/keycode.cpp +#, fuzzy +msgid "Final" +msgstr "Кинець" + +#: src/keycode.cpp +msgid "Help" +msgstr "Допомога" + +#: src/keycode.cpp +#, fuzzy +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Ліва кнопка" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ліва клавіша Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Ліва клавіша Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Ліва клавіша Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Ліва клавіша Win (Command)" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Меню" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Середня кнопка" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Мінус" + +#: src/keycode.cpp +#, fuzzy +msgid "Mode Change" +msgstr "Mode" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Up" + +#: src/keycode.cpp +#, fuzzy +msgid "Nonconvert" +msgstr "Не конвертуванно" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Num *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Num +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Num -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Num /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Num 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Num 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Num 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Num 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Num 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Num 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Num 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Num 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Num 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Num 9" + +#: src/keycode.cpp #, fuzzy msgid "OEM Clear" msgstr "OEM Очистити" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "Пауза" + +#: src/keycode.cpp +#, fuzzy +msgid "Period" +msgstr "Період" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Плюс" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Down" + +#: src/keycode.cpp +#, fuzzy +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Права кнопка" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Права клавіша Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Права клавіша Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Права клавіша Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Права клавіша Win (Command)" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Сон" + +#: src/keycode.cpp +#, fuzzy +msgid "Snapshot" +msgstr "Знімок" + +#: src/keycode.cpp +#, fuzzy +msgid "Space" +msgstr "Space" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Вгору" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Додаткова кнопка 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Додаткова кнопка 2" + +#: src/keycode.cpp #, fuzzy msgid "Zoom" msgstr "Збільшити" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Гра" +#~ msgid "Downloading" +#~ msgstr "Вниз" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Гра" +#~ msgid "Mip-Mapping" +#~ msgstr "MIP-текстурування" -#~ msgid "Favorites:" -#~ msgstr "Улюблені:" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Старий Пароль" - -#~ msgid "Preload item visuals" -#~ msgstr "Попереднє завантаження зображень" - -#, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Кінцеві рідини" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Помилка при видаленні файлів світу" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Неможливо створити світ: Не знайдено жодної гри" - -#~ msgid "Files to be deleted" -#~ msgstr "Файлів, що підлягають видаленню" - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Неможливо видалити світ: Нічого не вибрано" - -#~ msgid "Address required." -#~ msgstr "Адреса необхідна." - -#~ msgid "Create world" -#~ msgstr "Створити світ" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Залишіть адресу незаповненою для створення локального серверу." - -#~ msgid "Show Favorites" -#~ msgstr "Показати Улюблені" - -#~ msgid "Show Public" -#~ msgstr "Показати Публічні" - -#~ msgid "Advanced" -#~ msgstr "Додатково" - -#~ msgid "Multiplayer" -#~ msgstr "Мережева гра" - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи" - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Попередження: Помилкова конфігурація. " - -#~ msgid "Configuration saved. " -#~ msgstr "Налаштування Збережено. " - -#~ msgid "is required by:" -#~ msgstr "необхідний для:" +#~ msgid "Anisotropic Filtering" +#~ msgstr "Анізотропна фільтрація" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Ліва кнопка миші: Перемістити усі предмети, Права кнопка миші: " #~ "Перемістити один предмет" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Анізотропна фільтрація" +#~ msgid "is required by:" +#~ msgstr "необхідний для:" -#~ msgid "Mip-Mapping" -#~ msgstr "MIP-текстурування" +#~ msgid "Configuration saved. " +#~ msgstr "Налаштування Збережено. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Попередження: Помилкова конфігурація. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи" + +#~ msgid "Multiplayer" +#~ msgstr "Мережева гра" + +#~ msgid "Advanced" +#~ msgstr "Додатково" + +#~ msgid "Show Public" +#~ msgstr "Показати Публічні" + +#~ msgid "Show Favorites" +#~ msgstr "Показати Улюблені" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Залишіть адресу незаповненою для створення локального серверу." + +#~ msgid "Create world" +#~ msgstr "Створити світ" + +#~ msgid "Address required." +#~ msgstr "Адреса необхідна." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Неможливо видалити світ: Нічого не вибрано" + +#~ msgid "Files to be deleted" +#~ msgstr "Файлів, що підлягають видаленню" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Неможливо створити світ: Не знайдено жодної гри" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Помилка при видаленні файлів світу" #, fuzzy -#~ msgid "Downloading" -#~ msgstr "Вниз" +#~ msgid "Finite Liquid" +#~ msgstr "Кінцеві рідини" + +#~ msgid "Preload item visuals" +#~ msgstr "Попереднє завантаження зображень" + +#, fuzzy +#~ msgid "Password" +#~ msgstr "Старий Пароль" + +#~ msgid "Favorites:" +#~ msgstr "Улюблені:" + +#, fuzzy +#~ msgid "Games" +#~ msgstr "Гра" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Гра" diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index bda9dc6e7..22f2f6100 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-17 07:23+0200\n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-04-19 02:00+0800\n" "Last-Translator: Ang Weijie \n" "Language-Team: LANGUAGE \n" @@ -18,163 +18,178 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:82 +#: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" msgstr "" -#: builtin/fstk/ui.lua:84 +#: builtin/fstk/ui.lua msgid "An error occured:" msgstr "" -#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "主菜单" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "确定" -#: builtin/mainmenu/common.lua:239 src/game.cpp:1891 +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "连接" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." msgstr "载入中..." -#: builtin/mainmenu/common.lua:240 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "世界:" - -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "隐藏游戏" - -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "隐藏MOD包内容" - -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "MOD:" - -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "依赖于:" - -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "保存" - -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:223 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "启用MOD包" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "依赖于:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "禁用MOD包" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "启用" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "启用MOD包" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "全部启用" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "世界名称" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "种子" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "隐藏游戏" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "地图生成器" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "隐藏MOD包内容" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "游戏" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "MOD:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "创建" +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "保存" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "你没有安装任何游戏" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "世界:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "从minetest.net下载一个" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "启用" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "警告: 最小化开发测试为开发人员所使用。" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "从minetest.net下载一个游戏,例如:minetest_game" - -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "名为 \"$1\" 的世界已经存在" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "创建" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "从minetest.net下载一个游戏,例如:minetest_game" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "从minetest.net下载一个" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "游戏" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "地图生成器" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "未给定世界名或未选择游戏" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "种子" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "警告: 最小化开发测试为开发人员所使用。" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "世界名称" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "你没有安装任何游戏" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "你确认要删除\"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:100 -msgid "Yes" -msgstr "是" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "当然不!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "MOD管理器:无法删除“$1“" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "MOD管理器:MOD“$1“路径非法" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "当然不!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "是" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "删除世界“$1”?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "否" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "重命名MOD包:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "接受" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "安装MOD:文件:”$1“" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "重命名MOD包:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -183,492 +198,508 @@ msgstr "" "\n" "安装MOD:不支持的文件类型“$1“" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "无法安装$1到$2" -#: builtin/mainmenu/modmgr.lua:368 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "安装MOD:找不到MOD包$1的合适文件夹名" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "安装MOD:文件:”$1“" -#: builtin/mainmenu/modmgr.lua:388 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "安装MOD:找不到$1的真正MOD名" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "未分类" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "安装MOD:找不到MOD包$1的合适文件夹名" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "搜索" +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "关闭商店" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Downloading $1, please wait..." msgstr "请稍候..." -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "成功的安装:" +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "安装" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "第$1页,共$2页" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "评级" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "搜索" + +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "短名称" -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "评级" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "成功的安装:" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "未分类" + +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "重新安装" -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "安装" - -#: builtin/mainmenu/store.lua:518 -msgid "Close store" -msgstr "关闭商店" - -#: builtin/mainmenu/store.lua:526 -msgid "Page $1 of $2" -msgstr "第$1页,共$2页" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "归功" - -#: builtin/mainmenu/tab_credits.lua:31 -msgid "Core Developers" -msgstr "内部开发人员" - -#: builtin/mainmenu/tab_credits.lua:47 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "积极贡献者" -#: builtin/mainmenu/tab_credits.lua:54 +#: 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 #, fuzzy msgid "Previous Core Developers" msgstr "内部开发人员" -#: builtin/mainmenu/tab_credits.lua:59 -msgid "Previous Contributors" -msgstr "前贡献者" - -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "已安装的MOD:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "网上MOD库" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "无MOD资料可得" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "MOD资料:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "改名" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "删除选中的MOD包" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "删除选中的MOD" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "选择MOD文件:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua msgid "Mods" msgstr "MODS" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "无MOD资料可得" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "改名" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "选择MOD文件:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "删除选中的MOD" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "删除选中的MOD包" + +#: builtin/mainmenu/tab_multiplayer.lua #, fuzzy msgid "Address / Port :" msgstr "地址/端口" -#: builtin/mainmenu/tab_multiplayer.lua:24 -#, fuzzy -msgid "Name / Password :" -msgstr "名字/密码" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "客户端" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "公共服务器列表" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 -msgid "Delete" -msgstr "删除" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "连接" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Creative mode" msgstr "创造模式" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Damage enabled" msgstr "启用" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "删除" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "名字/密码" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "公共服务器列表" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "PvP enabled" msgstr "启用" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "客户端" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 -msgid "New" -msgstr "新建" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 -msgid "Configure" -msgstr "配置" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "启动游戏" - -#: builtin/mainmenu/tab_server.lua:30 -#: builtin/mainmenu/tab_singleplayer.lua:100 -msgid "Select World:" -msgstr "选择世界:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:101 -msgid "Creative Mode" -msgstr "创造模式" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:103 -msgid "Enable Damage" -msgstr "开启伤害风险" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "公共服务器" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "名字/密码" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "绑定地址" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "端口" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "配置" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "服务器端口" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "创造模式" -#: builtin/mainmenu/tab_server.lua:138 -#: builtin/mainmenu/tab_singleplayer.lua:165 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "开启伤害风险" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "名字/密码" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "新建" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "No world created or selected!" msgstr "未给定世界名或未选择游戏" -#: builtin/mainmenu/tab_server.lua:191 +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "端口" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "公共服务器" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "选择世界:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "服务器" -#: builtin/mainmenu/tab_settings.lua:21 -#, fuzzy -msgid "Opaque Leaves" -msgstr "不透明的水" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "服务器端口" -#: builtin/mainmenu/tab_settings.lua:22 -#, fuzzy -msgid "Simple Leaves" -msgstr "摇动的叶子" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "启动游戏" -#: builtin/mainmenu/tab_settings.lua:23 -#, fuzzy -msgid "Fancy Leaves" -msgstr "花式树" - -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "2x" msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 +#: 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 "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Are you sure to reset your singleplayer world?" +msgstr "你确定要重置您的单人世界吗?" + +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bilinear Filter" msgstr "双线性过滤" -#: builtin/mainmenu/tab_settings.lua:34 -#, fuzzy -msgid "Trilinear Filter" -msgstr "三线性过滤" - -#: builtin/mainmenu/tab_settings.lua:43 -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:44 -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:45 -msgid "Mipmap + Aniso. Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:98 -msgid "Are you sure to reset your singleplayer world?" -msgstr "你确定要重置您的单人世界吗?" - -#: builtin/mainmenu/tab_settings.lua:102 -msgid "No!!!" -msgstr "不!!!" - -#: builtin/mainmenu/tab_settings.lua:202 -msgid "Smooth Lighting" -msgstr "平滑光照" - -#: builtin/mainmenu/tab_settings.lua:204 -msgid "Enable Particles" -msgstr "启用粒子效果" - -#: builtin/mainmenu/tab_settings.lua:206 -msgid "3D Clouds" -msgstr "三维云彩" - -#: builtin/mainmenu/tab_settings.lua:208 -msgid "Opaque Water" -msgstr "不透明的水" - -#: builtin/mainmenu/tab_settings.lua:210 -#, fuzzy -msgid "Connected Glass" -msgstr "连接的玻璃" - -#: builtin/mainmenu/tab_settings.lua:212 -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:217 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:222 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:226 -msgid "Restart minetest for driver change to take effect" -msgstr "重启minetest让驱动变化生效" - -#: builtin/mainmenu/tab_settings.lua:228 -msgid "Shaders" -msgstr "着色器" - -#: builtin/mainmenu/tab_settings.lua:233 -msgid "Change keys" -msgstr "改变键位设置" - -#: builtin/mainmenu/tab_settings.lua:236 -#, fuzzy -msgid "Reset singleplayer world" -msgstr "重置单人游戏" - -#: builtin/mainmenu/tab_settings.lua:240 -msgid "GUI scale factor" -msgstr "GUI缩放因子" - -#: builtin/mainmenu/tab_settings.lua:244 -msgid "Scaling factor applied to menu elements: " -msgstr "菜单元素应用缩放因子" - -#: builtin/mainmenu/tab_settings.lua:250 -msgid "Touch free target" -msgstr "自由触摸目标" - -#: builtin/mainmenu/tab_settings.lua:256 -msgid "Touchthreshold (px)" -msgstr "触控阈值(像素)" - -#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 +#: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Bumpmapping" msgstr "贴图处理" -#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "改变键位设置" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Connected Glass" +msgstr "连接的玻璃" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable Particles" +msgstr "启用粒子效果" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Fancy Leaves" +msgstr "花式树" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "GUI缩放因子" + +#: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" msgstr "产生法线贴图" -#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 +#: 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 Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No!!!" +msgstr "不!!!" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Opaque Leaves" +msgstr "不透明的水" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "不透明的水" + +#: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" msgstr "视差贴图" -#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 -msgid "Waving Water" -msgstr "摇动的水" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Reset singleplayer world" +msgstr "重置单人游戏" -#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 -msgid "Waving Leaves" -msgstr "摇动的叶子" +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "菜单元素应用缩放因子" -#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 -msgid "Waving Plants" -msgstr "摇动的植物" - -#: builtin/mainmenu/tab_settings.lua:308 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "启用着色器需要使用OpenGL驱动。" - -#: builtin/mainmenu/tab_settings.lua:430 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "设置" -#: builtin/mainmenu/tab_simple_main.lua:82 -#, fuzzy -msgid "Start Singleplayer" -msgstr "单人游戏" +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "着色器" -#: builtin/mainmenu/tab_simple_main.lua:83 +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +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 +msgid "Touch free target" +msgstr "自由触摸目标" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "触控阈值(像素)" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Trilinear Filter" +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 "Waving Water" +msgstr "摇动的水" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "配置MOD" -#: builtin/mainmenu/tab_simple_main.lua:201 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "主菜单" -#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "单人游戏" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "开始游戏" -#: builtin/mainmenu/tab_singleplayer.lua:246 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "单人游戏" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "选择材质包:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "无资料可得" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "选择材质包:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "材质包" -#: src/client.cpp:1721 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "连接出错(超时?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "物品材质..." + +#: src/client.cpp #, fuzzy msgid "Loading textures..." msgstr "载入中..." -#: src/client.cpp:1736 +#: src/client.cpp #, fuzzy msgid "Rebuilding shaders..." msgstr "正在解析地址..." -#: src/client.cpp:1743 -msgid "Initializing nodes..." -msgstr "" - -#: src/client.cpp:1760 -msgid "Initializing nodes" -msgstr "" - -#: src/client.cpp:1768 -msgid "Item textures..." -msgstr "物品材质..." - -#: src/client.cpp:1793 -msgid "Done!" -msgstr "" - -#: src/client/clientlauncher.cpp:185 -msgid "Main Menu" -msgstr "主菜单" - -#: src/client/clientlauncher.cpp:223 -msgid "Player name too long." -msgstr "玩家的名字太长了" - -#: src/client/clientlauncher.cpp:261 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "连接出错(超时?)" -#: src/client/clientlauncher.cpp:425 -msgid "No world selected and no address provided. Nothing to do." -msgstr "没有选择世界或提供地址。未执行操作。" - -#: src/client/clientlauncher.cpp:432 -msgid "Provided world path doesn't exist: " -msgstr "提供世界地址不存在" - -#: src/client/clientlauncher.cpp:441 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "无法找到或载入游戏模式" -#: src/client/clientlauncher.cpp:459 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "非法游戏模式规格。" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: 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 "Provided world path doesn't exist: " +msgstr "提供世界地址不存在" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"查看 debug.txt 以获得详细信息。" + +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "改变键位设置" + +#: src/game.cpp +msgid "Change Password" +msgstr "更改密码" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "正在连接服务器..." + +#: src/game.cpp +msgid "Continue" msgstr "继续" -#: src/game.cpp:1072 -msgid "You died." -msgstr "你死了。" +#: src/game.cpp +msgid "Creating client..." +msgstr "正在建立客户端..." -#: src/game.cpp:1073 -msgid "Respawn" -msgstr "重生" +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "正在建立服务器...." -#: src/game.cpp:1092 -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/game.cpp:1106 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -694,580 +725,561 @@ msgstr "" "鼠标滚轮: 选择物品\n" "T: 聊天\n" -#: src/game.cpp:1125 -msgid "Continue" -msgstr "继续" +#: src/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/game.cpp:1129 -msgid "Change Password" -msgstr "更改密码" - -#: src/game.cpp:1134 -msgid "Sound Volume" -msgstr "音量" - -#: src/game.cpp:1136 -#, fuzzy -msgid "Change Keys" -msgstr "改变键位设置" - -#: src/game.cpp:1139 +#: src/game.cpp msgid "Exit to Menu" msgstr "退出至菜单" -#: src/game.cpp:1141 +#: src/game.cpp msgid "Exit to OS" msgstr "退出至操作系统" -#: src/game.cpp:1841 +#: src/game.cpp +msgid "Item definitions..." +msgstr "物品定义..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "媒体..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "方块定义..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "继续" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "正在解析地址..." + +#: src/game.cpp +msgid "Respawn" +msgstr "重生" + +#: src/game.cpp #, fuzzy msgid "Shutting down..." msgstr "关闭中......" -#: src/game.cpp:1948 -#, fuzzy -msgid "Creating server..." -msgstr "正在建立服务器...." +#: src/game.cpp +msgid "Sound Volume" +msgstr "音量" -#: src/game.cpp:1984 -msgid "Creating client..." -msgstr "正在建立客户端..." +#: src/game.cpp +msgid "You died." +msgstr "你死了。" -#: src/game.cpp:2159 -msgid "Resolving address..." -msgstr "正在解析地址..." - -#: src/game.cpp:2261 -msgid "Connecting to server..." -msgstr "正在连接服务器..." - -#: src/game.cpp:2317 -msgid "Item definitions..." -msgstr "物品定义..." - -#: src/game.cpp:2322 -msgid "Node definitions..." -msgstr "方块定义..." - -#: src/game.cpp:2329 -msgid "Media..." -msgstr "媒体..." - -#: src/game.cpp:2334 -msgid "KiB/s" -msgstr "" - -#: src/game.cpp:2338 -msgid "MiB/s" -msgstr "" - -#: src/game.cpp:4363 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"查看 debug.txt 以获得详细信息。" - -#: src/guiFormSpecMenu.cpp:2855 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "输入" -#: src/guiFormSpecMenu.cpp:2875 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "确定" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "键位配置。(如果这个菜单被弄乱,从minetest.conf中删掉点东西)" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "“使用” = 向下爬" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "连按两次“跳”切换飞行模式" - -#: src/guiKeyChangeMenu.cpp:295 -msgid "Key already in use" -msgstr "按键已被占用" - -#: src/guiKeyChangeMenu.cpp:373 -msgid "press key" -msgstr "按键" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Forward" -msgstr "向前" - -#: src/guiKeyChangeMenu.cpp:400 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "向后" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 -msgid "Left" -msgstr "向左" - -#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 -msgid "Right" -msgstr "向右" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Use" -msgstr "使用" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Jump" -msgstr "跳" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Sneak" -msgstr "潜行" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Drop" -msgstr "丢出" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Inventory" -msgstr "物品栏" - -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "聊天" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "命令" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "控制台" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fly" -msgstr "切换飞行模式" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "连按两次“跳”切换飞行模式" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle fast" -msgstr "切换快速移动模式" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "丢出" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "向前" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "物品栏" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "跳" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "按键已被占用" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "键位配置。(如果这个菜单被弄乱,从minetest.conf中删掉点东西)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "向左" + +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "打印栈" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "选择范围" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "向右" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "潜行" + +#: src/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle Cinematic" msgstr "切换快速移动模式" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "切换快速移动模式" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "切换飞行模式" + +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "切换穿墙模式" -#: src/guiKeyChangeMenu.cpp:415 -msgid "Range select" -msgstr "选择范围" +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "使用" -#: src/guiKeyChangeMenu.cpp:416 -msgid "Print stacks" -msgstr "打印栈" +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "按键" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "旧密码" - -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "新密码" - -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "确认密码" - -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "更改" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "确认密码" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "新密码" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "旧密码" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "密码不匹配!" -#: src/guiVolumeChange.cpp:105 -msgid "Sound Volume: " -msgstr "音量: " - -#: src/guiVolumeChange.cpp:119 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "退出" -#: src/keycode.cpp:223 -msgid "Left Button" -msgstr "左键" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "音量: " -#: src/keycode.cpp:223 -msgid "Middle Button" -msgstr "中键" - -#: src/keycode.cpp:223 -msgid "Right Button" -msgstr "右键" - -#: src/keycode.cpp:223 -msgid "X Button 1" -msgstr "X键1" - -#: src/keycode.cpp:224 -msgid "Back" -msgstr "退格" - -#: src/keycode.cpp:224 -msgid "Clear" -msgstr "Clear键" - -#: src/keycode.cpp:224 -msgid "Return" -msgstr "回车" - -#: src/keycode.cpp:224 -msgid "Tab" -msgstr "Tab键" - -#: src/keycode.cpp:224 -msgid "X Button 2" -msgstr "X键2" - -#: src/keycode.cpp:225 -msgid "Capital" -msgstr "大写" - -#: src/keycode.cpp:225 -msgid "Control" -msgstr "Ctrl键" - -#: src/keycode.cpp:225 -msgid "Kana" -msgstr "假名" - -#: src/keycode.cpp:225 -msgid "Menu" -msgstr "菜单" - -#: src/keycode.cpp:225 -msgid "Pause" -msgstr "暂停" - -#: src/keycode.cpp:225 -msgid "Shift" -msgstr "Shift键" - -#: src/keycode.cpp:226 -msgid "Convert" -msgstr "转换" - -#: src/keycode.cpp:226 -msgid "Escape" -msgstr "Escape键" - -#: src/keycode.cpp:226 -msgid "Final" -msgstr "Final键" - -#: src/keycode.cpp:226 -msgid "Junja" -msgstr "Junja键" - -#: src/keycode.cpp:226 -msgid "Kanji" -msgstr "Kanji键" - -#: src/keycode.cpp:226 -msgid "Nonconvert" -msgstr "无变换" - -#: src/keycode.cpp:227 -msgid "End" -msgstr "End键" - -#: src/keycode.cpp:227 -msgid "Home" -msgstr "Home键" - -#: src/keycode.cpp:227 -msgid "Mode Change" -msgstr "改变模式" - -#: src/keycode.cpp:227 -msgid "Next" -msgstr "下一个" - -#: src/keycode.cpp:227 -msgid "Prior" -msgstr "Prior键" - -#: src/keycode.cpp:227 -msgid "Space" -msgstr "空格" - -#: src/keycode.cpp:228 -msgid "Down" -msgstr "向下" - -#: src/keycode.cpp:228 -msgid "Execute" -msgstr "执行" - -#: src/keycode.cpp:228 -msgid "Print" -msgstr "打印" - -#: src/keycode.cpp:228 -msgid "Select" -msgstr "选择" - -#: src/keycode.cpp:228 -msgid "Up" -msgstr "向上" - -#: src/keycode.cpp:229 -msgid "Help" -msgstr "帮助" - -#: src/keycode.cpp:229 -msgid "Insert" -msgstr "插入" - -#: src/keycode.cpp:229 -msgid "Snapshot" -msgstr "快照" - -#: src/keycode.cpp:232 -msgid "Left Windows" -msgstr "左窗口" - -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Apps" msgstr "应用" -#: src/keycode.cpp:233 -msgid "Numpad 0" -msgstr "小键盘0" - -#: src/keycode.cpp:233 -msgid "Numpad 1" -msgstr "小键盘1" - -#: src/keycode.cpp:233 -msgid "Right Windows" -msgstr "右窗口" - -#: src/keycode.cpp:233 -msgid "Sleep" -msgstr "睡眠" - -#: src/keycode.cpp:234 -msgid "Numpad 2" -msgstr "小键盘2" - -#: src/keycode.cpp:234 -msgid "Numpad 3" -msgstr "小键盘3" - -#: src/keycode.cpp:234 -msgid "Numpad 4" -msgstr "小键盘4" - -#: src/keycode.cpp:234 -msgid "Numpad 5" -msgstr "小键盘5" - -#: src/keycode.cpp:234 -msgid "Numpad 6" -msgstr "小键盘6" - -#: src/keycode.cpp:234 -msgid "Numpad 7" -msgstr "小键盘7" - -#: src/keycode.cpp:235 -msgid "Numpad *" -msgstr "小键盘*" - -#: src/keycode.cpp:235 -msgid "Numpad +" -msgstr "小键盘+" - -#: src/keycode.cpp:235 -msgid "Numpad -" -msgstr "小键盘-" - -#: src/keycode.cpp:235 -msgid "Numpad /" -msgstr "小键盘/" - -#: src/keycode.cpp:235 -msgid "Numpad 8" -msgstr "小键盘8" - -#: src/keycode.cpp:235 -msgid "Numpad 9" -msgstr "小键盘9" - -#: src/keycode.cpp:239 -msgid "Num Lock" -msgstr "小键盘锁" - -#: src/keycode.cpp:239 -msgid "Scroll Lock" -msgstr "Scroll Lock键" - -#: src/keycode.cpp:240 -msgid "Left Shift" -msgstr "左Shift键" - -#: src/keycode.cpp:240 -msgid "Right Shift" -msgstr "右Shift键" - -#: src/keycode.cpp:241 -msgid "Left Control" -msgstr "左Control键" - -#: src/keycode.cpp:241 -msgid "Left Menu" -msgstr "左菜单" - -#: src/keycode.cpp:241 -msgid "Right Control" -msgstr "右Control键" - -#: src/keycode.cpp:241 -msgid "Right Menu" -msgstr "右菜单" - -#: src/keycode.cpp:243 -msgid "Comma" -msgstr "逗号" - -#: src/keycode.cpp:243 -msgid "Minus" -msgstr "减号" - -#: src/keycode.cpp:243 -msgid "Period" -msgstr "句号" - -#: src/keycode.cpp:243 -msgid "Plus" -msgstr "加号" - -#: src/keycode.cpp:247 +#: src/keycode.cpp msgid "Attn" msgstr "Attn键" -#: src/keycode.cpp:247 +#: src/keycode.cpp +msgid "Back" +msgstr "退格" + +#: src/keycode.cpp +msgid "Capital" +msgstr "大写" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Clear键" + +#: src/keycode.cpp +msgid "Comma" +msgstr "逗号" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl键" + +#: src/keycode.cpp +msgid "Convert" +msgstr "转换" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel键" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Down" +msgstr "向下" + +#: src/keycode.cpp +msgid "End" +msgstr "End键" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF键" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape键" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel键" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Execute" +msgstr "执行" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final键" + +#: src/keycode.cpp +msgid "Help" +msgstr "帮助" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home键" + +#: src/keycode.cpp +msgid "Insert" +msgstr "插入" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja键" + +#: src/keycode.cpp +msgid "Kana" +msgstr "假名" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji键" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "左键" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "左Control键" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "左菜单" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "左Shift键" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "左窗口" + +#: src/keycode.cpp +msgid "Menu" +msgstr "菜单" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "中键" + +#: src/keycode.cpp +msgid "Minus" +msgstr "减号" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "改变模式" + +#: src/keycode.cpp +msgid "Next" +msgstr "下一个" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "无变换" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "小键盘锁" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "小键盘*" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "小键盘+" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "小键盘-" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "小键盘/" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "小键盘0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "小键盘1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "小键盘2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "小键盘3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "小键盘4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "小键盘5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "小键盘6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "小键盘7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "小键盘8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "小键盘9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear键" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "PA1" msgstr "PA1键" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Pause" +msgstr "暂停" + +#: src/keycode.cpp +msgid "Period" +msgstr "句号" + +#: src/keycode.cpp +msgid "Plus" +msgstr "加号" + +#: src/keycode.cpp +msgid "Print" +msgstr "打印" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prior键" + +#: src/keycode.cpp +msgid "Return" +msgstr "回车" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "右键" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "右Control键" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "右菜单" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "右Shift键" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "右窗口" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock键" + +#: src/keycode.cpp +msgid "Select" +msgstr "选择" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift键" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "睡眠" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "快照" + +#: src/keycode.cpp +msgid "Space" +msgstr "空格" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab键" + +#: src/keycode.cpp +msgid "Up" +msgstr "向上" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X键1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X键2" + +#: src/keycode.cpp msgid "Zoom" msgstr "缩放" -#~ msgid "Game Name" -#~ msgstr "游戏名" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "下载中" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "游戏管理: 无法复制MOD“$1”到游戏“$2”" +#~ msgid "Mip-Mapping" +#~ msgstr "贴图处理" -#~ msgid "GAMES" -#~ msgstr "游戏" +#~ msgid "Anisotropic Filtering" +#~ msgstr "各向异性过滤" -#~ msgid "Games" -#~ msgstr "游戏" +#~ msgid "Fly mode" +#~ msgstr "飞行模式" -#~ msgid "Mods:" -#~ msgstr "MODS:" +#~ msgid " KB/s" +#~ msgstr "千字节/秒" -#~ msgid "edit game" -#~ msgstr "编辑游戏" +#~ msgid " MB/s" +#~ msgstr "兆字节/秒" -#~ msgid "new game" -#~ msgstr "新建游戏" +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "左键:移动所有物品,右键:移动单个物品" -#~ msgid "EDIT GAME" -#~ msgstr "编辑游戏" +#~ msgid "is required by:" +#~ msgstr "被需要:" -#~ msgid "Remove selected mod" -#~ msgstr "删除选中MOD" +#~ msgid "Configuration saved. " +#~ msgstr "配置已保存。 " -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- 添加MOD" +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "警告:配置不一致。 " -#~ msgid "CLIENT" -#~ msgstr "客户端" +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "无法创建世界:名字包含非法字符" -#~ msgid "Favorites:" -#~ msgstr "最爱的服务器:" +#~ msgid "Multiplayer" +#~ msgstr "多人游戏" -#~ msgid "START SERVER" -#~ msgstr "启动服务器" +#~ msgid "Advanced" +#~ msgstr "高级联机设置" -#~ msgid "Name" -#~ msgstr "名字" +#~ msgid "Show Public" +#~ msgstr "显示公共" -#~ msgid "Password" -#~ msgstr "密码" +#~ msgid "Show Favorites" +#~ msgstr "显示最爱" -#~ msgid "SETTINGS" -#~ msgstr "设置" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "地址栏留空可启动本地服务器。" -#~ msgid "Preload item visuals" -#~ msgstr "预先加载物品图像" +#~ msgid "Create world" +#~ msgstr "创造世界" -#~ msgid "Finite Liquid" -#~ msgstr "液体有限延伸" +#~ msgid "Address required." +#~ msgstr "需要地址。" -#~ msgid "SINGLE PLAYER" -#~ msgstr "单人游戏" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "无法删除世界:没有选择世界" -#~ msgid "TEXTURE PACKS" -#~ msgstr "材质包" +#~ msgid "Files to be deleted" +#~ msgstr "将被删除的文件" -#~ msgid "MODS" -#~ msgstr "MODS" +#~ msgid "Cannot create world: No games found" +#~ msgstr "无法创造世界:未找到游戏模式" -#~ msgid "Add mod:" -#~ msgstr "添加MOD:" +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "无法配置世界:没有选择世界" -#~ msgid "Local install" -#~ msgstr "本地安装" - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "警告:一些MOD仍未设定。\n" -#~ "它们会在你保存配置的时候自动启用。 " - -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "警告:缺少一些设定了的MOD。\n" -#~ "它们的设置会在你保存配置的时候被移除。 " +#~ msgid "Failed to delete all world files" +#~ msgstr "无法删除所有该世界的文件" #~ msgid "" #~ "Default Controls:\n" @@ -1295,72 +1307,91 @@ msgstr "缩放" #~ "ESC:菜单\n" #~ "T:聊天\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "无法删除所有该世界的文件" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "警告:缺少一些设定了的MOD。\n" +#~ "它们的设置会在你保存配置的时候被移除。 " -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "无法配置世界:没有选择世界" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "警告:一些MOD仍未设定。\n" +#~ "它们会在你保存配置的时候自动启用。 " -#~ msgid "Cannot create world: No games found" -#~ msgstr "无法创造世界:未找到游戏模式" +#~ msgid "Local install" +#~ msgstr "本地安装" -#~ msgid "Files to be deleted" -#~ msgstr "将被删除的文件" +#~ msgid "Add mod:" +#~ msgstr "添加MOD:" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "无法删除世界:没有选择世界" +#~ msgid "MODS" +#~ msgstr "MODS" -#~ msgid "Address required." -#~ msgstr "需要地址。" +#~ msgid "TEXTURE PACKS" +#~ msgstr "材质包" -#~ msgid "Create world" -#~ msgstr "创造世界" +#~ msgid "SINGLE PLAYER" +#~ msgstr "单人游戏" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "地址栏留空可启动本地服务器。" +#~ msgid "Finite Liquid" +#~ msgstr "液体有限延伸" -#~ msgid "Show Favorites" -#~ msgstr "显示最爱" +#~ msgid "Preload item visuals" +#~ msgstr "预先加载物品图像" -#~ msgid "Show Public" -#~ msgstr "显示公共" +#~ msgid "SETTINGS" +#~ msgstr "设置" -#~ msgid "Advanced" -#~ msgstr "高级联机设置" +#~ msgid "Password" +#~ msgstr "密码" -#~ msgid "Multiplayer" -#~ msgstr "多人游戏" +#~ msgid "Name" +#~ msgstr "名字" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "无法创建世界:名字包含非法字符" +#~ msgid "START SERVER" +#~ msgstr "启动服务器" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "警告:配置不一致。 " +#~ msgid "Favorites:" +#~ msgstr "最爱的服务器:" -#~ msgid "Configuration saved. " -#~ msgstr "配置已保存。 " +#~ msgid "CLIENT" +#~ msgstr "客户端" -#~ msgid "is required by:" -#~ msgstr "被需要:" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- 添加MOD" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "左键:移动所有物品,右键:移动单个物品" +#~ msgid "Remove selected mod" +#~ msgstr "删除选中MOD" -#~ msgid " MB/s" -#~ msgstr "兆字节/秒" +#~ msgid "EDIT GAME" +#~ msgstr "编辑游戏" -#~ msgid " KB/s" -#~ msgstr "千字节/秒" +#~ msgid "new game" +#~ msgstr "新建游戏" -#~ msgid "Fly mode" -#~ msgstr "飞行模式" +#~ msgid "edit game" +#~ msgstr "编辑游戏" -#~ msgid "Anisotropic Filtering" -#~ msgstr "各向异性过滤" +#~ msgid "Mods:" +#~ msgstr "MODS:" -#~ msgid "Mip-Mapping" -#~ msgstr "贴图处理" +#~ msgid "Games" +#~ msgstr "游戏" -#, fuzzy -#~ msgid "Downloading" -#~ msgstr "下载中" +#~ msgid "GAMES" +#~ msgstr "游戏" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "游戏管理: 无法复制MOD“$1”到游戏“$2”" + +#~ msgid "Game Name" +#~ msgstr "游戏名" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "重启minetest让驱动变化生效" + +#~ msgid "Online mod repository" +#~ msgstr "网上MOD库" From beba96941365a750f8b681df7a73566bdf797f0c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 13 Sep 2015 00:09:00 -0400 Subject: [PATCH 388/670] Ore: Add ore sheet column height range selection Modders are now able to select the range of ore column height, and the midpoint at which they 'grow' starting from. This commit adds three new parameters for the 'sheet' ore type: column_height_min, column_height_max, and column_midpoint_factor. clust_size is now deprecated for this ore type. --- doc/lua_api.txt | 23 ++++++++++++++--------- src/mg_ore.cpp | 12 +++++++----- src/mg_ore.h | 4 ++++ src/script/lua_api/l_mapgen.cpp | 13 ++++++++++++- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index b07d046c4..ae414406d 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -714,23 +714,28 @@ a non-equal distribution of ore. ### `sheet` Creates a sheet of ore in a blob shape according to the 2D perlin noise -described by `noise_params`. The relative height of the sheet can be -controlled by the same perlin noise as well, by specifying a non-zero -`scale` parameter in `noise_params`. +described by `noise_params`. This is essentially an improved version of +the so-called "stratus" ore seen in some unofficial mods. -**IMPORTANT**: The noise is not transformed by `offset` or `scale` when comparing -against the noise threshold, but scale is used to determine relative height. -The height of the blob is randomly scattered, with a maximum height of `clust_size`. +This sheet consists of vertical columns of uniform randomly distributed height, +varying between the inclusive range `column_height_min` and `column_height_max`. +If `column_height_min` is not specified, this parameter defaults to 1. +If `column_height_max` is not specified, this parameter defaults to `clust_size` +for reverse compatibility. New code should prefer `column_height_max`. -`clust_scarcity` and `clust_num_ores` are ignored. +The `column_midpoint_factor` parameter controls the position of the column at which +ore eminates from. If 1, columns grow upward. If 0, columns grow downward. If 0.5, +columns grow equally starting from each direction. `column_midpoint_factor` is a +decimal number ranging in value from 0 to 1. If this parameter is not specified, +the default is 0.5. -This is essentially an improved version of the so-called "stratus" ore seen in -some unofficial mods. +The ore parameters `clust_scarcity` and `clust_num_ores` are ignored for this ore type. ### `blob` Creates a deformed sphere of ore according to 3d perlin noise described by `noise_params`. The maximum size of the blob is `clust_size`, and `clust_scarcity` has the same meaning as with the `scatter` type. + ### `vein Creates veins of ore varying in density by according to the intersection of two instances of 3d perlin noise with diffferent seeds, both described by diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp index 0d0f74bf5..f5d312ba2 100644 --- a/src/mg_ore.cpp +++ b/src/mg_ore.cpp @@ -176,8 +176,8 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, PseudoRandom pr(blockseed + 4234); MapNode n_ore(c_ore, 0, ore_param2); - int max_height = clust_size; - int y_start = pr.range(nmin.Y, nmax.Y - max_height); + u16 max_height = column_height_max; + int y_start = pr.range(nmin.Y + max_height, nmax.Y - max_height); if (!noise) { int sx = nmax.X - nmin.X + 1; @@ -200,10 +200,12 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, continue; } - int height = max_height * (1. / pr.range(1, 3)); - int y0 = y_start + np.scale * noiseval; //pr.range(1, 3) - 1; + u16 height = pr.range(column_height_min, column_height_max); + int ymidpoint = y_start + noiseval; + int y0 = ymidpoint - height * (1 - column_midpoint_factor); int y1 = y0 + height; - for (int y = y0; y != y1; y++) { + + for (int y = y0; y < y1; y++) { u32 i = vm->m_area.index(x, y, z); if (!vm->m_area.contains(i)) continue; diff --git a/src/mg_ore.h b/src/mg_ore.h index ffe8cfe50..db204437e 100644 --- a/src/mg_ore.h +++ b/src/mg_ore.h @@ -87,6 +87,10 @@ class OreSheet : public Ore { public: static const bool NEEDS_NOISE = true; + 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); }; diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index d30b68054..9050816bb 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -937,8 +937,19 @@ int ModApiMapgen::l_register_ore(lua_State *L) } lua_pop(L, 1); - if (oretype == ORE_VEIN) { + //// Get type-specific parameters + if (oretype == ORE_SHEET) { + OreSheet *oresheet = (OreSheet *)ore; + + oresheet->column_height_min = getintfield_default(L, index, + "column_height_min", 1); + oresheet->column_height_max = getintfield_default(L, index, + "column_height_max", ore->clust_size); + oresheet->column_midpoint_factor = getfloatfield_default(L, index, + "column_midpoint_factor", 0.5f); + } else if (oretype == ORE_VEIN) { OreVein *orevein = (OreVein *)ore; + orevein->random_factor = getfloatfield_default(L, index, "random_factor", 1.f); } From 915807f8db1f3721ad9ffc00a4863ad940010c45 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 13 Sep 2015 23:41:17 +0200 Subject: [PATCH 389/670] Rename doc/mapformat.txt and update doc to match SRP changes The documentation file contains not just information about the map itself, but also about further files inside the world's directory. Documentation didn't reflect recent SRP addition, now it does. --- doc/{mapformat.txt => worldformat.txt} | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) rename doc/{mapformat.txt => worldformat.txt} (94%) diff --git a/doc/mapformat.txt b/doc/worldformat.txt similarity index 94% rename from doc/mapformat.txt rename to doc/worldformat.txt index 2b049adcd..d3b1b1189 100644 --- a/doc/mapformat.txt +++ b/doc/worldformat.txt @@ -41,13 +41,21 @@ auth.txt --------- Contains authentication data, player per line. :: -Format of password hash is SHA1'd, in the base64 encoding. + +Legacy format (until 0.4.12) of password hash is SHA1'd, +in the base64 encoding. + +Format (since 0.4.13) of password hash is #1##, with the parts inside <> encoded in the base64 encoding. + is an RFC 5054 compatible SRP-2048-SHA1 verifier +of the given salt, password, and the player's name lowercased. Example lines: - Player "celeron55", no password, privileges "interact" and "shout": celeron55::interact,shout -- Player "Foo", password "bar", privilege "shout": +- Player "Foo", password "bar", privilege "shout", with a legacy password hash: foo:iEPX+SQWIR3p67lj/0zigSWTKHg:shout +- Player "Foo", password "bar", privilege "shout", with an up to date pw hash (yes it is THAT long): + foo:#1#hPpy4O3IAn1hsNK00A6wNw#Kpu6rj7McsrPCt4euTb5RA5ltF7wdcWGoYMcRngwDi11cZhPuuR9i5Bo7o6A877TgcEwoc//HNrj9EjR/CGjdyTFmNhiermZOADvd8eu32FYK1kf7RMC0rXWxCenYuOQCG4WF9mMGiyTPxC63VAjAMuc1nCZzmy6D9zt0SIKxOmteI75pAEAIee2hx4OkSXRIiU4Zrxo1Xf7QFxkMY4x77vgaPcvfmuzom0y/fU1EdSnZeopGPvzMpFx80ODFx1P34R52nmVl0W8h4GNo0k8ZiWtRCdrJxs8xIg7z5P1h3Th/BJ0lwexpdK8sQZWng8xaO5ElthNuhO8UQx1l6FgEA:shout - Player "bar", no password, no privileges: bar:: @@ -204,14 +212,14 @@ algorithm, defined here in Python: def getBlockAsInteger(p): return int64(p[2]*16777216 + p[1]*4096 + p[0]) - + def int64(u): while u >= 2**63: u -= 2**64 while u <= -2**63: u += 2**64 return u - + It can be converted the other way by using this code: def getIntegerAsBlock(i): @@ -221,7 +229,7 @@ It can be converted the other way by using this code: i = int((i - y) / 4096) z = unsignedToSigned(i % 4096, 2048) return x,y,z - + def unsignedToSigned(i, max_positive): if i < max_positive: return i From 283bf97a1cc5435179533fac5428a382f9af3934 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 14 Sep 2015 06:02:41 +0200 Subject: [PATCH 390/670] Serialisation: documentation fixes, clarifying renames and whitespace fixes 1. Do two renames: * SER_FMT_CLIENT_VER_LOWEST -> SER_FMT_VER_LOWEST_WRITE * SER_FMT_VER_LOWEST -> SER_FMT_VER_LOWEST_READ Now the two define values are consistently named with the _WRITE defines SER_FMT_VER_{HIGHEST,LOWEST}_WRITE, and to better point out what the two serialisation versions actually are for. 2. wrap some lines in doc/worldformat.txt, and point out that the node timers are serialized at a later point, as this can cause confusion about what now happens (if one doesn't strictly read the if block's conditions). 3. some whitespace fixes in NodeTimerList::serialize, and one new comment. --- doc/worldformat.txt | 7 +++++-- src/mapblock.cpp | 2 +- src/mapblock.h | 2 +- src/network/serverpackethandler.cpp | 4 ++-- src/nodetimer.cpp | 16 ++++++++-------- src/serialization.h | 12 ++++++------ 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/doc/worldformat.txt b/doc/worldformat.txt index d3b1b1189..105fbb63e 100644 --- a/doc/worldformat.txt +++ b/doc/worldformat.txt @@ -45,7 +45,8 @@ Contains authentication data, player per line. Legacy format (until 0.4.12) of password hash is SHA1'd, in the base64 encoding. -Format (since 0.4.13) of password hash is #1##, with the parts inside <> encoded in the base64 encoding. +Format (since 0.4.13) of password hash is #1##, with the +parts inside <> encoded in the base64 encoding. is an RFC 5054 compatible SRP-2048-SHA1 verifier of the given salt, password, and the player's name lowercased. @@ -54,7 +55,7 @@ Example lines: celeron55::interact,shout - Player "Foo", password "bar", privilege "shout", with a legacy password hash: foo:iEPX+SQWIR3p67lj/0zigSWTKHg:shout -- Player "Foo", password "bar", privilege "shout", with an up to date pw hash (yes it is THAT long): +- Player "Foo", password "bar", privilege "shout", with a 0.4.13 pw hash: foo:#1#hPpy4O3IAn1hsNK00A6wNw#Kpu6rj7McsrPCt4euTb5RA5ltF7wdcWGoYMcRngwDi11cZhPuuR9i5Bo7o6A877TgcEwoc//HNrj9EjR/CGjdyTFmNhiermZOADvd8eu32FYK1kf7RMC0rXWxCenYuOQCG4WF9mMGiyTPxC63VAjAMuc1nCZzmy6D9zt0SIKxOmteI75pAEAIee2hx4OkSXRIiU4Zrxo1Xf7QFxkMY4x77vgaPcvfmuzom0y/fU1EdSnZeopGPvzMpFx80ODFx1P34R52nmVl0W8h4GNo0k8ZiWtRCdrJxs8xIg7z5P1h3Th/BJ0lwexpdK8sQZWng8xaO5ElthNuhO8UQx1l6FgEA:shout - Player "bar", no password, no privileges: bar:: @@ -316,6 +317,8 @@ if map format version == 24: (NOTE: Not released as stable) u16 timer position (z*16*16 + y*16 + x) s32 timeout*1000 s32 elapsed*1000 +if map format version >= 25: + -- Nothing right here, node timers are serialized later u8 static object version: - Always 0 diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 346f01a0b..11c4c125b 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -564,7 +564,7 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk) throw SerializationError("ERROR: Not writing dummy block."); } - FATAL_ERROR_IF(version < SER_FMT_CLIENT_VER_LOWEST, "Serialize version error"); + FATAL_ERROR_IF(version < SER_FMT_VER_LOWEST_WRITE, "Serialisation version error"); // First byte u8 flags = 0; diff --git a/src/mapblock.h b/src/mapblock.h index 334136b92..197d58ec7 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -504,7 +504,7 @@ public: // These don't write or read version by itself // Set disk to true for on-disk format, false for over-the-network format - // Precondition: version >= SER_FMT_CLIENT_VER_LOWEST + // Precondition: version >= SER_FMT_VER_LOWEST_WRITE void serialize(std::ostream &os, u8 version, bool disk); // If disk == true: In addition to doing other things, will add // unknown blocks from id-name mapping to wndef diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index f756d80ef..d89e30c8d 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -103,7 +103,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // Use the highest version supported by both u8 depl_serial_v = std::min(client_max, our_max); // If it's lower than the lowest supported, give up. - if (depl_serial_v < SER_FMT_VER_LOWEST) + if (depl_serial_v < SER_FMT_VER_LOWEST_READ) depl_serial_v = SER_FMT_VER_INVALID; if (depl_serial_v == SER_FMT_VER_INVALID) { @@ -347,7 +347,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) // Use the highest version supported by both int deployed = std::min(client_max, our_max); // If it's lower than the lowest supported, give up. - if (deployed < SER_FMT_VER_LOWEST) + if (deployed < SER_FMT_VER_LOWEST_READ) deployed = SER_FMT_VER_INVALID; if (deployed == SER_FMT_VER_INVALID) { diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp index a5b48a5af..1feefa203 100644 --- a/src/nodetimer.cpp +++ b/src/nodetimer.cpp @@ -45,9 +45,9 @@ void NodeTimer::deSerialize(std::istream &is) void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const { - if(map_format_version == 24){ + if (map_format_version == 24) { // Version 0 is a placeholder for "nothing to see here; go away." - if(m_data.empty()){ + if (m_data.empty()) { writeU8(os, 0); // version return; } @@ -55,18 +55,18 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const writeU16(os, m_data.size()); } - if(map_format_version >= 25){ - writeU8(os, 2+4+4); + if (map_format_version >= 25) { + writeU8(os, 2 + 4 + 4); // length of the data for a single timer writeU16(os, m_data.size()); } - for(std::map::const_iterator + for (std::map::const_iterator i = m_data.begin(); - i != m_data.end(); ++i){ + i != m_data.end(); ++i) { v3s16 p = i->first; NodeTimer t = i->second; - u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X; + u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X; writeU16(os, p16); t.serialize(os); } @@ -75,7 +75,7 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version) { m_data.clear(); - + if(map_format_version == 24){ u8 timer_version = readU8(is); if(timer_version == 0) diff --git a/src/serialization.h b/src/serialization.h index ab6fe0f79..01d37d363 100644 --- a/src/serialization.h +++ b/src/serialization.h @@ -30,11 +30,11 @@ with this program; if not, write to the Free Software Foundation, Inc., -------------------------------- For map data (blocks, nodes, sectors). - + NOTE: The goal is to increment this so that saved maps will be loadable by any version. Other compatibility is not maintained. - + 0: original networked test with 1-byte nodes 1: update with 2-byte nodes 2: lighting is transmitted in param @@ -70,14 +70,14 @@ with this program; if not, write to the Free Software Foundation, Inc., // Saved on disk version #define SER_FMT_VER_HIGHEST_WRITE 25 // Lowest supported serialization version -#define SER_FMT_VER_LOWEST 0 -// Lowest client supported serialization version +#define SER_FMT_VER_LOWEST_READ 0 +// Lowest serialization version for writing // Can't do < 24 anymore; we have 16-bit dynamically allocated node IDs // in memory; conversion just won't work in this direction. -#define SER_FMT_CLIENT_VER_LOWEST 24 +#define SER_FMT_VER_LOWEST_WRITE 24 inline bool ser_ver_supported(s32 v) { - return v >= SER_FMT_VER_LOWEST && v <= SER_FMT_VER_HIGHEST_READ; + return v >= SER_FMT_VER_LOWEST_READ && v <= SER_FMT_VER_HIGHEST_READ; } /* From 8acccf4c584b31ab08dc6ba0b95cb223c8ab4dad Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 14 Sep 2015 07:44:12 +0200 Subject: [PATCH 391/670] Fix "make install" and add underscore to doc file name Fix regression since commit: 915807f8db1f3721ad9ffc00a4863ad940010c45 "Rename doc/mapformat.txt and update doc to match SRP changes" And add an underscore to doc file name to make it more readable. --- CMakeLists.txt | 2 +- doc/{worldformat.txt => world_format.txt} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename doc/{worldformat.txt => world_format.txt} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15774d564..ea41d0d2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,7 +171,7 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}") install(FILES "README.txt" DESTINATION "${DOCDIR}") install(FILES "doc/lua_api.txt" DESTINATION "${DOCDIR}") install(FILES "doc/menu_lua_api.txt" DESTINATION "${DOCDIR}") -install(FILES "doc/mapformat.txt" DESTINATION "${DOCDIR}") +install(FILES "doc/world_format.txt" DESTINATION "${DOCDIR}") install(FILES "minetest.conf.example" DESTINATION "${EXAMPLE_CONF_DIR}") if(UNIX AND NOT APPLE) diff --git a/doc/worldformat.txt b/doc/world_format.txt similarity index 100% rename from doc/worldformat.txt rename to doc/world_format.txt From 620dcddf4394f381c69df57528ad17577b7979ed Mon Sep 17 00:00:00 2001 From: Rui914 Date: Sat, 15 Aug 2015 04:22:43 +0900 Subject: [PATCH 392/670] Minor tweaks handle_settings_buttons --- builtin/mainmenu/tab_settings.lua | 70 ++++++++++++++----------------- 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index c17a39432..e13fd967f 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -287,14 +287,14 @@ end -------------------------------------------------------------------------------- local function handle_settings_buttons(this, fields, tabname, tabdata) - if fields["cb_fancy_trees"] then - core.setting_set("new_style_leaves", fields["cb_fancy_trees"]) - return true - end if fields["cb_smooth_lighting"] then core.setting_set("smooth_lighting", fields["cb_smooth_lighting"]) return true end + if fields["cb_particles"] then + core.setting_set("enable_particles", fields["cb_particles"]) + return true + end if fields["cb_3d_clouds"] then core.setting_set("enable_3d_clouds", fields["cb_3d_clouds"]) return true @@ -303,15 +303,6 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("opaque_water", fields["cb_opaque_water"]) return true end - if fields["cb_shaders"] then - if (core.setting_get("video_driver") == "direct3d8" or core.setting_get("video_driver") == "direct3d9") then - core.setting_set("enable_shaders", "false") - gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.") - else - core.setting_set("enable_shaders", fields["cb_shaders"]) - end - return true - end if fields["cb_connected_glass"] then core.setting_set("connected_glass", fields["cb_connected_glass"]) return true @@ -320,8 +311,15 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("enable_node_highlighting", fields["cb_node_highlighting"]) return true end - if fields["cb_particles"] then - core.setting_set("enable_particles", fields["cb_particles"]) + + if fields["cb_shaders"] then + if (core.setting_get("video_driver") == "direct3d8" + or core.setting_get("video_driver") == "direct3d9") then + core.setting_set("enable_shaders", "false") + gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.") + else + core.setting_set("enable_shaders", fields["cb_shaders"]) + end return true end if fields["cb_bumpmapping"] then @@ -345,10 +343,6 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("enable_waving_plants", fields["cb_waving_plants"]) return true end - if fields["btn_change_keys"] ~= nil then - core.show_keys_menu() - return true - end if fields["sb_gui_scaling"] then local event = core.explode_scrollbar_event(fields["sb_gui_scaling"]) @@ -359,6 +353,10 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) return true end end + if fields["btn_change_keys"] then + core.show_keys_menu() + return true + end if fields["cb_touchscreen_target"] then core.setting_set("touchtarget", fields["cb_touchscreen_target"]) return true @@ -371,33 +369,25 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) --Note dropdowns have to be handled LAST! local ddhandled = false - if fields["dd_touchthreshold"] then - core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"]) - ddhandled = true - end - if fields["dd_leaves_style"] == leaves_style_labels[3] then - core.setting_set("leaves_style", leaves_style[2][3]) - ddhandled = true - end - if fields["dd_leaves_style"] == leaves_style_labels[2] then - core.setting_set("leaves_style", leaves_style[2][2]) - ddhandled = true - end if fields["dd_leaves_style"] == leaves_style_labels[1] then core.setting_set("leaves_style", leaves_style[2][1]) ddhandled = true + elseif fields["dd_leaves_style"] == leaves_style_labels[2] then + core.setting_set("leaves_style", leaves_style[2][2]) + ddhandled = true + elseif fields["dd_leaves_style"] == leaves_style_labels[3] then + core.setting_set("leaves_style", leaves_style[2][3]) + ddhandled = true end if fields["dd_filters"] == dd_filter_labels[1] then core.setting_set("bilinear_filter", "false") core.setting_set("trilinear_filter", "false") ddhandled = true - end - if fields["dd_filters"] == dd_filter_labels[2] then + elseif fields["dd_filters"] == dd_filter_labels[2] then core.setting_set("bilinear_filter", "true") core.setting_set("trilinear_filter", "false") ddhandled = true - end - if fields["dd_filters"] == dd_filter_labels[3] then + elseif fields["dd_filters"] == dd_filter_labels[3] then core.setting_set("bilinear_filter", "false") core.setting_set("trilinear_filter", "true") ddhandled = true @@ -406,13 +396,11 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("mip_map", "false") core.setting_set("anisotropic_filter", "false") ddhandled = true - end - if fields["dd_mipmap"] == dd_mipmap_labels[2] then + elseif fields["dd_mipmap"] == dd_mipmap_labels[2] then core.setting_set("mip_map", "true") core.setting_set("anisotropic_filter", "false") ddhandled = true - end - if fields["dd_mipmap"] == dd_mipmap_labels[3] then + elseif fields["dd_mipmap"] == dd_mipmap_labels[3] then core.setting_set("mip_map", "true") core.setting_set("anisotropic_filter", "true") ddhandled = true @@ -422,6 +410,10 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) antialiasing_fname_to_name(fields["dd_antialiasing"])) ddhandled = true end + if fields["dd_touchthreshold"] then + core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"]) + ddhandled = true + end return ddhandled end From 8e9c9e305aecdb5b432c0990fef85fa6ff3c042b Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 12 Sep 2015 22:19:29 +0100 Subject: [PATCH 393/670] Firelike drawtype: Improve code Remove unusable fine rotation by param2 Remove unused and redundant code Fix code style issues --- src/content_mapblock.cpp | 152 ++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 92 deletions(-) diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index c4d09e18c..cd6d126de 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -1157,7 +1157,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); - float s = BS/2*f.visual_scale; + float s = BS / 2 * f.visual_scale; content_t current = n.getContent(); content_t n2c; @@ -1165,148 +1165,116 @@ void mapblock_mesh_generate_special(MeshMakeData *data, v3s16 n2p; static const v3s16 dirs[6] = { - v3s16( 0, 1, 0), - v3s16( 0,-1, 0), - v3s16( 1, 0, 0), - v3s16(-1, 0, 0), - v3s16( 0, 0, 1), - v3s16( 0, 0,-1) + v3s16( 0, 1, 0), + v3s16( 0, -1, 0), + v3s16( 1, 0, 0), + v3s16(-1, 0, 0), + v3s16( 0, 0, 1), + v3s16( 0, 0, -1) }; - int doDraw[6] = {0,0,0,0,0,0}; + int doDraw[6] = {0, 0, 0, 0, 0, 0}; bool drawAllFaces = true; - bool drawBottomFacesOnly = false; // Currently unused - // Check for adjacent nodes - for(int i = 0; i < 6; i++) - { + for (int i = 0; i < 6; i++) { n2p = blockpos_nodes + p + dirs[i]; n2 = data->m_vmanip.getNodeNoEx(n2p); n2c = n2.getContent(); if (n2c != CONTENT_IGNORE && n2c != CONTENT_AIR && n2c != current) { doDraw[i] = 1; - if(drawAllFaces) + if (drawAllFaces) drawAllFaces = false; } } - for(int j = 0; j < 6; j++) - { - int vOffset = 0; // Vertical offset of faces after rotation - int hOffset = 4; // Horizontal offset of faces to reach the edge + for (int j = 0; j < 6; j++) { - video::S3DVertex vertices[4] = - { - video::S3DVertex(-s,-BS/2, 0, 0,0,0, c, 0,1), - video::S3DVertex( s,-BS/2, 0, 0,0,0, c, 1,1), - video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0), - video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0), + video::S3DVertex vertices[4] = { + video::S3DVertex(-s, -BS / 2, 0, 0, 0, 0, c, 0, 1), + video::S3DVertex( s, -BS / 2, 0, 0, 0, 0, c, 1, 1), + video::S3DVertex( s, -BS / 2 + s * 2, 0, 0, 0, 0, c, 1, 0), + video::S3DVertex(-s, -BS / 2 + s * 2, 0, 0, 0, 0, c, 0, 0), }; // Calculate which faces should be drawn, (top or sides) - if(j == 0 && (drawAllFaces || (doDraw[3] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { - vertices[i].Pos.rotateXZBy(90 + n.param2 * 2); + if (j == 0 && (drawAllFaces || + (doDraw[3] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(90); vertices[i].Pos.rotateXYBy(-10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.X -= hOffset; + vertices[i].Pos.X -= 4.0; } - } - else if(j == 1 && (drawAllFaces || (doDraw[5] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { - vertices[i].Pos.rotateXZBy(180 + n.param2 * 2); + } else if (j == 1 && (drawAllFaces || + (doDraw[5] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(180); vertices[i].Pos.rotateYZBy(10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.Z -= hOffset; + vertices[i].Pos.Z -= 4.0; } - } - else if(j == 2 && (drawAllFaces || (doDraw[2] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { - vertices[i].Pos.rotateXZBy(270 + n.param2 * 2); + } else if (j == 2 && (drawAllFaces || + (doDraw[2] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(270); vertices[i].Pos.rotateXYBy(10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.X += hOffset; + vertices[i].Pos.X += 4.0; } - } - else if(j == 3 && (drawAllFaces || (doDraw[4] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 3 && (drawAllFaces || + (doDraw[4] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(-10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.Z += hOffset; + vertices[i].Pos.Z += 4.0; } - } - // Center cross-flames - else if(j == 4 && (drawAllFaces || doDraw[1] == 1)) - { - for(int i=0; i<4; i++) { - vertices[i].Pos.rotateXZBy(45 + n.param2 * 2); - vertices[i].Pos.Y -= vOffset; + } else if (j == 4 && (drawAllFaces || doDraw[1] == 1)) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(45); } - } - else if(j == 5 && (drawAllFaces || doDraw[1] == 1)) - { - for(int i=0; i<4; i++) { - vertices[i].Pos.rotateXZBy(-45 + n.param2 * 2); - vertices[i].Pos.Y -= vOffset; + } else if (j == 5 && (drawAllFaces || doDraw[1] == 1)) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(-45); } - } - - // Render flames on bottom - else if(j == 0 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + // Render flames on bottom of node above + } else if (j == 0 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); - vertices[i].Pos.rotateXZBy(90 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(90); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.X -= hOffset+0.7; + vertices[i].Pos.X -= 4.7; } - } - else if(j == 1 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 1 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); - vertices[i].Pos.rotateXZBy(180 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(180); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.Z -= hOffset+0.7; + vertices[i].Pos.Z -= 4.7; } - } - else if(j == 2 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 2 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); - vertices[i].Pos.rotateXZBy(270 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(270); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.X += hOffset+0.7; + vertices[i].Pos.X += 4.7; } - } - else if(j == 3 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 3 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.Z += hOffset+0.7; + vertices[i].Pos.Z += 4.7; } - } - else { + } else { // Skip faces that aren't adjacent to a node continue; } - for(int i=0; i<4; i++) - { + for (int i = 0; i < 4; i++) { vertices[i].Pos *= f.visual_scale; vertices[i].Pos += intToFloat(p, BS); } - u16 indices[] = {0,1,2,2,3,0}; + u16 indices[] = {0, 1, 2, 2, 3, 0}; // Add to mesh collector collector.append(tile, vertices, 4, indices, 6); } From f61f817b9c170942a5b3ce3591125c2191645cd0 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 15 Sep 2015 18:37:58 +0200 Subject: [PATCH 394/670] Disallow placing entities outside safe boundaries Entity positions are serialized as F1000. Disallow placing entities outside safe borders with the minetest.add_entity call. Note that this patch only enforces those boundaries for placing entities, moving entities that move outside boundaries aren't affected. Thanks to @nanepiwo for pointing this out. --- src/environment.cpp | 9 +++++++++ src/mapblock.h | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/environment.cpp b/src/environment.cpp index eb599668b..0b3c0347d 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1493,6 +1493,15 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object, delete object; return 0; } + + if (objectpos_over_limit(object->getBasePosition())) { + errorstream << "ServerEnvironment::addActiveObjectRaw(): " + << "object position outside maximum range" << std::endl; + if (object->environmentDeletes()) + delete object; + return 0; + } + /*infostream<<"ServerEnvironment::addActiveObjectRaw(): " <<"added (id="<getId()<<")"< MapBlockVect; +inline bool objectpos_over_limit(v3f p) +{ + const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")); + return (p.X < -map_gen_limit + || p.X > map_gen_limit + || p.Y < -map_gen_limit + || p.Y > map_gen_limit + || p.Z < -map_gen_limit + || p.Z > map_gen_limit); +} + inline bool blockpos_over_limit(v3s16 p) { const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, From 6c81be51ffd26ec7dee1ecb887a8743a8b6a6ce4 Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 16 Sep 2015 16:12:59 +0200 Subject: [PATCH 395/670] Fix object position border checking Borders have to be converted into BS format in order to be accurately comparable to object positions. --- src/environment.cpp | 4 +++- src/mapblock.h | 16 ++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 0b3c0347d..6877c2460 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1495,8 +1495,10 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object, } if (objectpos_over_limit(object->getBasePosition())) { + v3f p = object->getBasePosition(); errorstream << "ServerEnvironment::addActiveObjectRaw(): " - << "object position outside maximum range" << std::endl; + << "object position (" << p.X << "," << p.Y << "," << p.Z + << ") outside maximum range" << std::endl; if (object->environmentDeletes()) delete object; return 0; diff --git a/src/mapblock.h b/src/mapblock.h index b2d5f98fa..73c17ee60 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -639,14 +639,14 @@ typedef std::vector MapBlockVect; inline bool objectpos_over_limit(v3f p) { - const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, - g_settings->getU16("map_generation_limit")); - return (p.X < -map_gen_limit - || p.X > map_gen_limit - || p.Y < -map_gen_limit - || p.Y > map_gen_limit - || p.Z < -map_gen_limit - || p.Z > map_gen_limit); + const static float map_gen_limit_bs = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")) * BS; + return (p.X < -map_gen_limit_bs + || p.X > map_gen_limit_bs + || p.Y < -map_gen_limit_bs + || p.Y > map_gen_limit_bs + || p.Z < -map_gen_limit_bs + || p.Z > map_gen_limit_bs); } inline bool blockpos_over_limit(v3s16 p) From dcbb95338a9b0e2c5c95fcfc6eeceb9d6d93f320 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Tue, 15 Sep 2015 21:28:16 -0400 Subject: [PATCH 396/670] Ore: Add puff ore type --- doc/lua_api.txt | 28 +++++++++- src/mg_ore.cpp | 97 ++++++++++++++++++++++++++++++++- src/mg_ore.h | 27 +++++++-- src/script/lua_api/l_mapgen.cpp | 49 ++++++++++++----- 4 files changed, 178 insertions(+), 23 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index ae414406d..af48c64f6 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -714,8 +714,8 @@ a non-equal distribution of ore. ### `sheet` Creates a sheet of ore in a blob shape according to the 2D perlin noise -described by `noise_params`. This is essentially an improved version of -the so-called "stratus" ore seen in some unofficial mods. +described by `noise_params` and `noise_threshold`. This is essentially an +improved version of the so-called "stratus" ore seen in some unofficial mods. This sheet consists of vertical columns of uniform randomly distributed height, varying between the inclusive range `column_height_min` and `column_height_max`. @@ -731,12 +731,23 @@ the default is 0.5. The ore parameters `clust_scarcity` and `clust_num_ores` are ignored for this ore type. +### `puff` +Creates a sheet of ore in a cloud-like puff shape. + +As with the `sheet` ore type, the size and shape of puffs are described by +`noise_params` and `noise_threshold` and are placed at random vertical positions +within the currently generated chunk. + +The vertical top and bottom displacement of each puff are determined by the noise +parameters `np_puff_top` and `np_puff_bottom`, respectively. + + ### `blob` Creates a deformed sphere of ore according to 3d perlin noise described by `noise_params`. The maximum size of the blob is `clust_size`, and `clust_scarcity` has the same meaning as with the `scatter` type. -### `vein +### `vein` Creates veins of ore varying in density by according to the intersection of two instances of 3d perlin noise with diffferent seeds, both described by `noise_params`. `random_factor` varies the influence random chance has on @@ -771,6 +782,17 @@ Also produce this same ore between the height range of `-y_max` and `-y_min`. Useful for having ore in sky realms without having to duplicate ore entries. +### `puff_cliffs` +If set, puff ore generation will not taper down large differences in displacement +when approaching the edge of a puff. This flag has no effect for ore types other +than `puff`. + +### `puff_additive_composition` +By default, when noise described by `np_puff_top` or `np_puff_bottom` results in a +negative displacement, the sub-column at that point is not generated. With this +attribute set, puff ore generation will instead generate the absolute difference in +noise displacement values. This flag has no effect for ore types other than `puff`. + Decoration types ---------------- The varying types of decorations that can be placed. diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp index f5d312ba2..28be816f5 100644 --- a/src/mg_ore.cpp +++ b/src/mg_ore.cpp @@ -25,8 +25,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" FlagDesc flagdesc_ore[] = { - {"absheight", OREFLAG_ABSHEIGHT}, - {NULL, 0} + {"absheight", OREFLAG_ABSHEIGHT}, + {"puff_cliffs", OREFLAG_PUFF_CLIFFS}, + {"puff_additive_composition", OREFLAG_PUFF_ADDITIVE}, + {NULL, 0} }; @@ -220,6 +222,94 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, /////////////////////////////////////////////////////////////////////////////// +OrePuff::OrePuff() : + Ore() +{ + noise_puff_top = NULL; + noise_puff_bottom = NULL; +} + + +OrePuff::~OrePuff() +{ + delete noise_puff_top; + delete noise_puff_bottom; +} + + +void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed, + v3s16 nmin, v3s16 nmax, u8 *biomemap) +{ + PseudoRandom pr(blockseed + 4234); + MapNode n_ore(c_ore, 0, ore_param2); + + int y_start = pr.range(nmin.Y, nmax.Y); + + if (!noise) { + int sx = nmax.X - nmin.X + 1; + int sz = nmax.Z - nmin.Z + 1; + noise = new Noise(&np, 0, sx, sz); + noise_puff_top = new Noise(&np_puff_top, 0, sx, sz); + noise_puff_bottom = new Noise(&np_puff_bottom, 0, sx, sz); + } + + noise->seed = mapseed + y_start; + noise->perlinMap2D(nmin.X, nmin.Z); + bool noise_generated = false; + + size_t index = 0; + for (int z = nmin.Z; z <= nmax.Z; z++) + for (int x = nmin.X; x <= nmax.X; x++, index++) { + float noiseval = noise->result[index]; + if (noiseval < nthresh) + continue; + + if (biomemap && !biomes.empty()) { + std::set::iterator it = biomes.find(biomemap[index]); + if (it == biomes.end()) + continue; + } + + if (!noise_generated) { + noise_generated = true; + noise_puff_top->perlinMap2D(nmin.X, nmin.Z); + noise_puff_bottom->perlinMap2D(nmin.X, nmin.Z); + } + + float ntop = noise_puff_top->result[index]; + float nbottom = noise_puff_bottom->result[index]; + + if (!(flags & OREFLAG_PUFF_CLIFFS)) { + float ndiff = noiseval - nthresh; + if (ndiff < 1.0f) { + ntop *= ndiff; + nbottom *= ndiff; + } + } + + int ymid = y_start; + int y0 = ymid - nbottom; + int y1 = ymid + ntop; + + if ((flags & OREFLAG_PUFF_ADDITIVE) && (y0 > y1)) + SWAP(int, y0, y1); + + for (int y = y0; y <= y1; y++) { + u32 i = vm->m_area.index(x, y, z); + if (!vm->m_area.contains(i)) + continue; + if (!CONTAINS(c_wherein, vm->m_data[i].getContent())) + continue; + + vm->m_data[i] = n_ore; + } + } +} + + +/////////////////////////////////////////////////////////////////////////////// + + void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, u8 *biomemap) { @@ -285,7 +375,8 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, /////////////////////////////////////////////////////////////////////////////// -OreVein::OreVein() +OreVein::OreVein() : + Ore() { noise2 = NULL; } diff --git a/src/mg_ore.h b/src/mg_ore.h index db204437e..8ffb8fca0 100644 --- a/src/mg_ore.h +++ b/src/mg_ore.h @@ -30,17 +30,18 @@ class MMVManip; /////////////////// Ore generation flags -// Use absolute value of height to determine ore placement -#define OREFLAG_ABSHEIGHT 0x01 -#define OREFLAG_USE_NOISE 0x08 +#define OREFLAG_ABSHEIGHT 0x01 +#define OREFLAG_PUFF_CLIFFS 0x02 +#define OREFLAG_PUFF_ADDITIVE 0x04 +#define OREFLAG_USE_NOISE 0x08 #define ORE_RANGE_ACTUAL 1 #define ORE_RANGE_MIRROR 2 - enum OreType { ORE_SCATTER, ORE_SHEET, + ORE_PUFF, ORE_BLOB, ORE_VEIN, }; @@ -95,6 +96,22 @@ public: v3s16 nmin, v3s16 nmax, u8 *biomemap); }; +class OrePuff : public Ore { +public: + static const bool NEEDS_NOISE = true; + + NoiseParams np_puff_top; + NoiseParams np_puff_bottom; + Noise *noise_puff_top; + Noise *noise_puff_bottom; + + OrePuff(); + virtual ~OrePuff(); + + virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, + v3s16 nmin, v3s16 nmax, u8 *biomemap); +}; + class OreBlob : public Ore { public: static const bool NEEDS_NOISE = true; @@ -134,6 +151,8 @@ public: return new OreScatter; case ORE_SHEET: return new OreSheet; + case ORE_PUFF: + return new OrePuff; case ORE_BLOB: return new OreBlob; case ORE_VEIN: diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 9050816bb..dcb611f47 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -70,6 +70,7 @@ struct EnumString ModApiMapgen::es_OreType[] = { {ORE_SCATTER, "scatter"}, {ORE_SHEET, "sheet"}, + {ORE_PUFF, "puff"}, {ORE_BLOB, "blob"}, {ORE_VEIN, "vein"}, {0, NULL}, @@ -880,7 +881,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) "ore_type", es_OreType, ORE_SCATTER); Ore *ore = oremgr->create(oretype); if (!ore) { - errorstream << "register_ore: ore_type " << oretype << " not implemented"; + errorstream << "register_ore: ore_type " << oretype << " not implemented\n"; return 0; } @@ -938,20 +939,42 @@ int ModApiMapgen::l_register_ore(lua_State *L) lua_pop(L, 1); //// Get type-specific parameters - if (oretype == ORE_SHEET) { - OreSheet *oresheet = (OreSheet *)ore; + switch (oretype) { + case ORE_SHEET: { + OreSheet *oresheet = (OreSheet *)ore; - oresheet->column_height_min = getintfield_default(L, index, - "column_height_min", 1); - oresheet->column_height_max = getintfield_default(L, index, - "column_height_max", ore->clust_size); - oresheet->column_midpoint_factor = getfloatfield_default(L, index, - "column_midpoint_factor", 0.5f); - } else if (oretype == ORE_VEIN) { - OreVein *orevein = (OreVein *)ore; + oresheet->column_height_min = getintfield_default(L, index, + "column_height_min", 1); + oresheet->column_height_max = getintfield_default(L, index, + "column_height_max", ore->clust_size); + oresheet->column_midpoint_factor = getfloatfield_default(L, index, + "column_midpoint_factor", 0.5f); - orevein->random_factor = getfloatfield_default(L, index, - "random_factor", 1.f); + break; + } + case ORE_PUFF: { + OrePuff *orepuff = (OrePuff *)ore; + + lua_getfield(L, index, "np_puff_top"); + read_noiseparams(L, -1, &orepuff->np_puff_top); + lua_pop(L, 1); + + lua_getfield(L, index, "np_puff_bottom"); + read_noiseparams(L, -1, &orepuff->np_puff_bottom); + lua_pop(L, 1); + + break; + } + case ORE_VEIN: { + OreVein *orevein = (OreVein *)ore; + + orevein->random_factor = getfloatfield_default(L, index, + "random_factor", 1.f); + + break; + } + default: + break; } ObjDefHandle handle = oremgr->add(ore); From 94f1e5d9bdd30725a7a63b668450dc0646a873cd Mon Sep 17 00:00:00 2001 From: est31 Date: Thu, 17 Sep 2015 20:08:11 +0200 Subject: [PATCH 397/670] Send proper block to old clients for swap_node calls The legacy code added in commit d879a539cd19ddd1ee34afec2512fb2238de2822 - "Add minetest.swap_node" for sending the whole mapblock to older clients on the case of a node modification with swap_node, had the problem that the block chosen to be sent to the client was referenced with node coordinates and not with block coordinates, resulting in getting the wrong block sent to the client. --- src/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.cpp b/src/server.cpp index 646e8465b..9a5739892 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2102,7 +2102,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, if (client->net_proto_version <= 21) { // Old clients always clear metadata; fix it // by sending the full block again. - client->SetBlockNotSent(p); + client->SetBlockNotSent(getNodeBlockPos(p)); } } } From 691eb2d06d646ff96af9aaed0bfe823f64f0acda Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 18 Sep 2015 15:02:02 +0200 Subject: [PATCH 398/670] Document current node metadata format Document the node metadata changes of the commit (serialisation version >=23): 704782c95b8a4194a9383da55d93f37fd0f7278f "WIP node metadata, node timers" --- doc/world_format.txt | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/doc/world_format.txt b/doc/world_format.txt index 105fbb63e..9255fa8c0 100644 --- a/doc/world_format.txt +++ b/doc/world_format.txt @@ -250,7 +250,7 @@ NOTE: Zlib data is in such a format that Python's zlib at least can directly decompress. u8 version -- map format version number, this one is version 22 +- map format version number, see serialisation.h for the latest number u8 flags - Flag bitmasks: @@ -296,13 +296,26 @@ if content_width == 2: zlib-compressed node metadata list - content: +if map format version <= 22: u16 version (=1) u16 count of metadata foreach count: u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) u16 type_id u16 content_size - u8[content_size] (content of metadata) + u8[content_size] content of metadata. Format depends on type_id, see below. +if map format version >= 23: + u8 version (=1) -- Note the type is u8, while for map format version <= 22 it's u16 + u16 count of metadata + foreach count: + u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) + u32 num_vars + foreach num_vars: + u16 key_len + u8[name_len] key + u32 val_len + u8[val_len] value + serialized inventory - Node timers if map format version == 23: @@ -378,8 +391,9 @@ The name-id-mapping -------------------- The mapping maps node content ids to node names. -Node metadata format ---------------------- +Node metadata format for map format versions <= 22 +--------------------------------------------------- +The node metadata are serialized depending on the type_id field. 1: Generic metadata serialized inventory From 795db97fe3a6af8db039b7a7aed6f419e3e44f1b Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 18 Sep 2015 20:44:15 +0100 Subject: [PATCH 399/670] Blob ore: Fix partial blobs --- src/mg_ore.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp index 28be816f5..16d97685a 100644 --- a/src/mg_ore.cpp +++ b/src/mg_ore.cpp @@ -358,9 +358,9 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, float noiseval = noise->result[index]; - float xdist = x1 - csize / 2; - float ydist = y1 - csize / 2; - float zdist = z1 - csize / 2; + float xdist = (s32)x1 - (s32)csize / 2; + float ydist = (s32)y1 - (s32)csize / 2; + float zdist = (s32)z1 - (s32)csize / 2; noiseval -= (sqrt(xdist * xdist + ydist * ydist + zdist * zdist) / csize); From fe994946b7fabdb6f3cc7d11ec6ee1a27f7f5c20 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 19 Sep 2015 00:16:23 +0100 Subject: [PATCH 400/670] Mgv5/6/7: Re-add #include profiler.h as commented-out option --- src/mapgen_v5.cpp | 1 + src/mapgen_v6.cpp | 1 + src/mapgen_v7.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 5b842a99e..dbbd72936 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 9e34aac2d..5e9219816 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 9f612de81..92f3f49c4 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" From 9c635f28ac2b103bf7196e47947bf64673c13393 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Wed, 5 Aug 2015 22:29:47 +0200 Subject: [PATCH 401/670] Little optimization on getAdded/Removed activeobjects per player loop. Use std::queue instead of std::set, we don't need such a heavy container. Don't convert position to int to convert it back to float in the next function. --- src/environment.cpp | 36 +++++++++++++++++------------------- src/environment.h | 8 ++++---- src/server.cpp | 38 +++++++++++++++----------------------- 3 files changed, 36 insertions(+), 46 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 6877c2460..79540bccf 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1318,12 +1318,11 @@ u16 ServerEnvironment::addActiveObject(ServerActiveObject *object) Finds out what new objects have been added to inside a radius around a position */ -void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, +void ServerEnvironment::getAddedActiveObjects(Player *player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &added_objects) + std::queue &added_objects) { - v3f pos_f = intToFloat(pos, BS); f32 radius_f = radius * BS; f32 player_radius_f = player_radius * BS; @@ -1339,18 +1338,19 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, */ for(std::map::iterator i = m_active_objects.begin(); - i != m_active_objects.end(); ++i) - { + i != m_active_objects.end(); ++i) { u16 id = i->first; + // Get object ServerActiveObject *object = i->second; if(object == NULL) continue; + // Discard if removed or deactivating if(object->m_removed || object->m_pending_deactivation) continue; - f32 distance_f = object->getBasePosition().getDistanceFrom(pos_f); + f32 distance_f = object->getBasePosition().getDistanceFrom(player->getPosition()); if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { // Discard if too far if (distance_f > player_radius_f && player_radius_f != 0) @@ -1364,7 +1364,7 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, if(n != current_objects.end()) continue; // Add to added_objects - added_objects.insert(id); + added_objects.push(id); } } @@ -1372,12 +1372,11 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, Finds out what objects have been removed from inside a radius around a position */ -void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, +void ServerEnvironment::getRemovedActiveObjects(Player *player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &removed_objects) + std::queue &removed_objects) { - v3f pos_f = intToFloat(pos, BS); f32 radius_f = radius * BS; f32 player_radius_f = player_radius * BS; @@ -1399,20 +1398,19 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, u16 id = *i; ServerActiveObject *object = getActiveObject(id); - if(object == NULL){ - infostream<<"ServerEnvironment::getRemovedActiveObjects():" - <<" object in current_objects is NULL"<m_removed || object->m_pending_deactivation) - { - removed_objects.insert(id); + if (object->m_removed || object->m_pending_deactivation) { + removed_objects.push(id); continue; } - f32 distance_f = object->getBasePosition().getDistanceFrom(pos_f); + f32 distance_f = object->getBasePosition().getDistanceFrom(player->getPosition()); if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { if (distance_f <= player_radius_f || player_radius_f == 0) continue; @@ -1420,7 +1418,7 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, continue; // Object is no longer visible - removed_objects.insert(id); + removed_objects.push(id); } } diff --git a/src/environment.h b/src/environment.h index 22840a9fc..41295abf2 100644 --- a/src/environment.h +++ b/src/environment.h @@ -265,19 +265,19 @@ public: Find out what new objects have been added to inside a radius around a position */ - void getAddedActiveObjects(v3s16 pos, s16 radius, + void getAddedActiveObjects(Player *player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &added_objects); + std::queue &added_objects); /* Find out what new objects have been removed from inside a radius around a position */ - void getRemovedActiveObjects(v3s16 pos, s16 radius, + void getRemovedActiveObjects(Player* player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &removed_objects); + std::queue &removed_objects); /* Get the next message emitted by some active object. diff --git a/src/server.cpp b/src/server.cpp index 9a5739892..9b1b142eb 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -680,10 +680,9 @@ void Server::AsyncRunStep(bool initial_step) radius *= MAP_BLOCKSIZE; player_radius *= MAP_BLOCKSIZE; - for(std::map::iterator + for (std::map::iterator i = clients.begin(); - i != clients.end(); ++i) - { + i != clients.end(); ++i) { RemoteClient *client = i->second; // If definitions and textures have not been sent, don't @@ -692,27 +691,23 @@ void Server::AsyncRunStep(bool initial_step) continue; Player *player = m_env->getPlayer(client->peer_id); - if(player==NULL) - { + if(player == NULL) { // This can happen if the client timeouts somehow /*infostream<<"WARNING: "<<__FUNCTION_NAME<<": Client " <peer_id <<" has no associated player"<getPosition(), BS); - std::set removed_objects; - std::set added_objects; - m_env->getRemovedActiveObjects(pos, radius, player_radius, + std::queue removed_objects; + std::queue added_objects; + m_env->getRemovedActiveObjects(player, radius, player_radius, client->m_known_objects, removed_objects); - m_env->getAddedActiveObjects(pos, radius, player_radius, + m_env->getAddedActiveObjects(player, radius, player_radius, client->m_known_objects, added_objects); // Ignore if nothing happened - if(removed_objects.empty() && added_objects.empty()) - { - //infostream<<"active objects: none changed"<::iterator - i = removed_objects.begin(); - i != removed_objects.end(); ++i) - { + while (!removed_objects.empty()) { // Get object - u16 id = *i; + u16 id = removed_objects.front(); ServerActiveObject* obj = m_env->getActiveObject(id); // Add to data buffer for sending @@ -740,17 +732,15 @@ void Server::AsyncRunStep(bool initial_step) if(obj && obj->m_known_by_count > 0) obj->m_known_by_count--; + removed_objects.pop(); } // Handle added objects writeU16((u8*)buf, added_objects.size()); data_buffer.append(buf, 2); - for(std::set::iterator - i = added_objects.begin(); - i != added_objects.end(); ++i) - { + while (!added_objects.empty()) { // Get object - u16 id = *i; + u16 id = added_objects.front(); ServerActiveObject* obj = m_env->getActiveObject(id); // Get object type @@ -778,6 +768,8 @@ void Server::AsyncRunStep(bool initial_step) if(obj) obj->m_known_by_count++; + + added_objects.pop(); } u32 pktSize = SendActiveObjectRemoveAdd(client->peer_id, data_buffer); From 452df1c723722183ebf3a332f7bcc355be5b2998 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 18 Sep 2015 13:45:42 +0200 Subject: [PATCH 402/670] Various style cleanups + unused code removal -> Don't pass pointer to whole IGameDef to NodeMetadata constructors and deserializers, but only to IItemDefManager, which is needed -> Remove the unused content_mapnode_get_new_name() method -> Fix style for MapBlock::deSerialize and MapBlock::deSerialize_pre22, improving accuracy of error messages a bit -> Fix style at other serialisation methods too -> Improve accuracy of some comments --- src/content_mapnode.cpp | 66 ---------------- src/content_mapnode.h | 4 - src/content_nodemeta.cpp | 8 +- src/content_nodemeta.h | 4 +- src/mapblock.cpp | 122 ++++++++++++------------------ src/mapgen.cpp | 1 - src/mapgen_v6.cpp | 1 - src/nodemetadata.cpp | 27 ++++--- src/nodemetadata.h | 6 +- src/rollback_interface.cpp | 2 +- src/script/lua_api/l_nodemeta.cpp | 3 +- 11 files changed, 75 insertions(+), 169 deletions(-) diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 3a4a4652a..a6bf0a82d 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -167,69 +167,3 @@ void content_mapnode_get_name_id_mapping(NameIdMapping *nimap) nimap->set(CONTENT_AIR, "air"); } -class NewNameGetter -{ -public: - NewNameGetter() - { - old_to_new["CONTENT_STONE"] = "default:stone"; - old_to_new["CONTENT_WATER"] = "default:water_flowing"; - old_to_new["CONTENT_TORCH"] = "default:torch"; - old_to_new["CONTENT_WATERSOURCE"] = "default:water_source"; - old_to_new["CONTENT_SIGN_WALL"] = "default:sign_wall"; - old_to_new["CONTENT_CHEST"] = "default:chest"; - old_to_new["CONTENT_FURNACE"] = "default:furnace"; - old_to_new["CONTENT_LOCKABLE_CHEST"] = "default:locked_chest"; - old_to_new["CONTENT_FENCE"] = "default:wooden_fence"; - old_to_new["CONTENT_RAIL"] = "default:rail"; - old_to_new["CONTENT_LADDER"] = "default:ladder"; - old_to_new["CONTENT_LAVA"] = "default:lava_flowing"; - old_to_new["CONTENT_LAVASOURCE"] = "default:lava_source"; - old_to_new["CONTENT_GRASS"] = "default:dirt_with_grass"; - old_to_new["CONTENT_TREE"] = "default:tree"; - old_to_new["CONTENT_LEAVES"] = "default:leaves"; - old_to_new["CONTENT_GRASS_FOOTSTEPS"] = "default:dirt_with_grass_footsteps"; - old_to_new["CONTENT_MESE"] = "default:mese"; - old_to_new["CONTENT_MUD"] = "default:dirt"; - old_to_new["CONTENT_CLOUD"] = "default:cloud"; - old_to_new["CONTENT_COALSTONE"] = "default:coalstone"; - old_to_new["CONTENT_WOOD"] = "default:wood"; - old_to_new["CONTENT_SAND"] = "default:sand"; - old_to_new["CONTENT_COBBLE"] = "default:cobble"; - old_to_new["CONTENT_STEEL"] = "default:steel"; - old_to_new["CONTENT_GLASS"] = "default:glass"; - old_to_new["CONTENT_MOSSYCOBBLE"] = "default:mossycobble"; - old_to_new["CONTENT_GRAVEL"] = "default:gravel"; - old_to_new["CONTENT_SANDSTONE"] = "default:sandstone"; - old_to_new["CONTENT_CACTUS"] = "default:cactus"; - old_to_new["CONTENT_BRICK"] = "default:brick"; - old_to_new["CONTENT_CLAY"] = "default:clay"; - old_to_new["CONTENT_PAPYRUS"] = "default:papyrus"; - old_to_new["CONTENT_BOOKSHELF"] = "default:bookshelf"; - old_to_new["CONTENT_JUNGLETREE"] = "default:jungletree"; - old_to_new["CONTENT_JUNGLEGRASS"] = "default:junglegrass"; - old_to_new["CONTENT_NC"] = "default:nyancat"; - old_to_new["CONTENT_NC_RB"] = "default:nyancat_rainbow"; - old_to_new["CONTENT_APPLE"] = "default:apple"; - old_to_new["CONTENT_SAPLING"] = "default:sapling"; - // Just in case - old_to_new["CONTENT_IGNORE"] = "ignore"; - old_to_new["CONTENT_AIR"] = "air"; - } - std::string get(const std::string &old) - { - StringMap::const_iterator it = old_to_new.find(old); - if (it == old_to_new.end()) - return ""; - return it->second; - } -private: - StringMap old_to_new; -}; - -NewNameGetter newnamegetter; - -std::string content_mapnode_get_new_name(const std::string &oldname) -{ - return newnamegetter.get(oldname); -} diff --git a/src/content_mapnode.h b/src/content_mapnode.h index 5d68afe59..9fa4e6d13 100644 --- a/src/content_mapnode.h +++ b/src/content_mapnode.h @@ -34,8 +34,4 @@ MapNode mapnode_translate_to_internal(MapNode n_from, u8 version); class NameIdMapping; void content_mapnode_get_name_id_mapping(NameIdMapping *nimap); -// Convert "CONTENT_STONE"-style names to dynamic ids -std::string content_mapnode_get_new_name(const std::string &oldname); -class INodeDefManager; - #endif diff --git a/src/content_nodemeta.cpp b/src/content_nodemeta.cpp index f504924f9..dd5f8e6b5 100644 --- a/src/content_nodemeta.cpp +++ b/src/content_nodemeta.cpp @@ -79,7 +79,7 @@ static bool content_nodemeta_deserialize_legacy_body( inv->getList("0")->setName("main"); } assert(inv->getList("main") && !inv->getList("0")); - + meta->setString("formspec","size[8,9]" "list[current_name;main;0,0;8,4;]" "list[current_player;main;0,5;8,4;]"); @@ -96,7 +96,7 @@ static bool content_nodemeta_deserialize_legacy_body( inv->getList("0")->setName("main"); } assert(inv->getList("main") && !inv->getList("0")); - + meta->setString("formspec","size[8,9]" "list[current_name;main;0,0;8,4;]" "list[current_player;main;0,5;8,4;]"); @@ -145,7 +145,7 @@ static bool content_nodemeta_deserialize_legacy_meta( void content_nodemeta_deserialize_legacy(std::istream &is, NodeMetadataList *meta, NodeTimerList *timers, - IGameDef *gamedef) + IItemDefManager *item_def_mgr) { meta->clear(); timers->clear(); @@ -181,7 +181,7 @@ void content_nodemeta_deserialize_legacy(std::istream &is, continue; } - NodeMetadata *data = new NodeMetadata(gamedef); + NodeMetadata *data = new NodeMetadata(item_def_mgr); bool need_timer = content_nodemeta_deserialize_legacy_meta(is, data); meta->set(p, data); diff --git a/src/content_nodemeta.h b/src/content_nodemeta.h index 0b08bc6a1..ebc01d9a8 100644 --- a/src/content_nodemeta.h +++ b/src/content_nodemeta.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class NodeMetadataList; class NodeTimerList; -class IGameDef; +class IItemDefManager; /* Legacy nodemeta definitions @@ -32,7 +32,7 @@ class IGameDef; void content_nodemeta_deserialize_legacy(std::istream &is, NodeMetadataList *meta, NodeTimerList *timers, - IGameDef *gamedef); + IItemDefManager *item_def_mgr); void content_nodemeta_serialize_legacy(std::ostream &os, NodeMetadataList *meta); diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 11c4c125b..942457407 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -696,19 +696,17 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk) TRACESTREAM(<<"MapBlock::deSerialize "<= 23) - m_node_metadata.deSerialize(iss, m_gamedef); + if (version >= 23) + m_node_metadata.deSerialize(iss, m_gamedef->idef()); else content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); - } - catch(SerializationError &e) - { + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); + } catch(SerializationError &e) { errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata at (" < databuf_nodelist(nodecount * ser_length); // These have no compression - if(version <= 3 || version == 5 || version == 6) - { + if (version <= 3 || version == 5 || version == 6) { char tmp; is.read(&tmp, 1); - if(is.gcount() != 1) - throw SerializationError - ("MapBlock::deSerialize: no enough input data"); + if (is.gcount() != 1) + throw SerializationError(std::string(__FUNCTION_NAME) + + ": no enough input data"); is_underground = tmp; - is.read((char*)*databuf_nodelist, nodecount * ser_length); - if((u32)is.gcount() != nodecount * ser_length) - throw SerializationError - ("MapBlock::deSerialize: no enough input data"); - } - else if(version <= 10) - { + is.read((char *)*databuf_nodelist, nodecount * ser_length); + if ((u32)is.gcount() != nodecount * ser_length) + throw SerializationError(std::string(__FUNCTION_NAME) + + ": no enough input data"); + } else if (version <= 10) { u8 t8; - is.read((char*)&t8, 1); + is.read((char *)&t8, 1); is_underground = t8; { @@ -818,11 +813,10 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i= 10) - { + if (version >= 10) { // Uncompress and set param2 data std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i= 14) - { + if (version >= 14) { // Ignore errors - try{ - if(version <= 15) - { + try { + if (version <= 15) { std::string data = deSerializeString(is); std::istringstream iss(data, std::ios_base::binary); content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); - } - else - { + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); + } else { //std::string data = deSerializeLongString(is); std::ostringstream oss(std::ios_base::binary); decompressZlib(is, oss); std::istringstream iss(oss.str(), std::ios_base::binary); content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); } - } - catch(SerializationError &e) - { + } catch(SerializationError &e) { errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata"<= 9){ + if (version >= 9) { u16 count = readU16(is); // Not supported and length not known if count is not 0 if(count != 0){ @@ -941,11 +919,11 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) /* Versions up from 15 have static objects. */ - if(version >= 15) + if (version >= 15) m_static_objects.deSerialize(is); // Timestamp - if(version >= 17){ + if (version >= 17) { setTimestamp(readU32(is)); m_disk_timestamp = m_timestamp; } else { @@ -955,7 +933,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) // Dynamically re-set ids based on node names NameIdMapping nimap; // If supported, read node definition id mapping - if(version >= 21){ + if (version >= 21) { nimap.deSerialize(is); // Else set the legacy mapping } else { diff --git a/src/mapgen.cpp b/src/mapgen.cpp index f8e9477c5..31d394fa4 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -29,7 +29,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "emerge.h" -#include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" #include "porting.h" #include "profiler.h" diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 5e9219816..8492adfd9 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc., //#include "serverobject.h" #include "content_sao.h" #include "nodedef.h" -#include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" //#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index 2a9131be0..d63dac696 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -30,9 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc., NodeMetadata */ -NodeMetadata::NodeMetadata(IGameDef *gamedef): +NodeMetadata::NodeMetadata(IItemDefManager *item_def_mgr): m_stringvars(), - m_inventory(new Inventory(gamedef->idef())) + m_inventory(new Inventory(item_def_mgr)) { } @@ -101,34 +101,34 @@ void NodeMetadataList::serialize(std::ostream &os) const v3s16 p = i->first; NodeMetadata *data = i->second; - u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X; + u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X; writeU16(os, p16); data->serialize(os); } } -void NodeMetadataList::deSerialize(std::istream &is, IGameDef *gamedef) +void NodeMetadataList::deSerialize(std::istream &is, IItemDefManager *item_def_mgr) { clear(); u8 version = readU8(is); - if(version == 0){ + if (version == 0) { // Nothing return; } - if(version != 1){ - infostream<<__FUNCTION_NAME<<": version "<deSerialize(is); m_data[p] = data; } diff --git a/src/nodemetadata.h b/src/nodemetadata.h index 8e84e5af3..8d1298212 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -35,12 +35,12 @@ with this program; if not, write to the Free Software Foundation, Inc., */ class Inventory; -class IGameDef; +class IItemDefManager; class NodeMetadata { public: - NodeMetadata(IGameDef *gamedef); + NodeMetadata(IItemDefManager *item_def_mgr); ~NodeMetadata(); void serialize(std::ostream &os) const; @@ -80,7 +80,7 @@ public: ~NodeMetadataList(); void serialize(std::ostream &os) const; - void deSerialize(std::istream &is, IGameDef *gamedef); + void deSerialize(std::istream &is, IItemDefManager *item_def_mgr); // Add all keys in this list to the vector keys std::vector getAllKeys(); diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index b3f457029..bffe0a82c 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -155,7 +155,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam } else { NodeMetadata *meta = map->getNodeMetadata(p); if (!meta) { - meta = new NodeMetadata(gamedef); + meta = new NodeMetadata(gamedef->idef()); if (!map->setNodeMetadata(p, meta)) { delete meta; infostream << "RollbackAction::applyRevert(): " diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 6cdbe5c68..d8de9a412 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common/c_content.h" #include "environment.h" #include "map.h" +#include "gamedef.h" #include "nodemetadata.h" @@ -43,7 +44,7 @@ NodeMetadata* NodeMetaRef::getmeta(NodeMetaRef *ref, bool auto_create) { NodeMetadata *meta = ref->m_env->getMap().getNodeMetadata(ref->m_p); if(meta == NULL && auto_create) { - meta = new NodeMetadata(ref->m_env->getGameDef()); + meta = new NodeMetadata(ref->m_env->getGameDef()->idef()); if(!ref->m_env->getMap().setNodeMetadata(ref->m_p, meta)) { delete meta; return NULL; From 4f03f8d119283c16034836d6e8d617961a8150c9 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 21 Sep 2015 18:10:05 +0200 Subject: [PATCH 403/670] lua_api.txt: fix typo Thanks to @kaadmy (NeD) for pointing this out. --- doc/lua_api.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index af48c64f6..f0a8bec3c 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2434,7 +2434,7 @@ Can be gotten via `minetest.get_meta(pos)`. * `from_table(nil or {})` * See "Node Metadata" -### `NoteTimerRef` +### `NodeTimerRef` Node Timers: a high resolution persistent per-node timer. Can be gotten via `minetest.get_node_timer(pos)`. From d130c36e140f949bd2385a8398018f49e1b9032a Mon Sep 17 00:00:00 2001 From: Kahrl Date: Mon, 21 Sep 2015 19:26:54 +0200 Subject: [PATCH 404/670] Fix another typo in doc/world_format.txt --- doc/world_format.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/world_format.txt b/doc/world_format.txt index 9255fa8c0..5be1f3913 100644 --- a/doc/world_format.txt +++ b/doc/world_format.txt @@ -312,7 +312,7 @@ if map format version >= 23: u32 num_vars foreach num_vars: u16 key_len - u8[name_len] key + u8[key_len] key u32 val_len u8[val_len] value serialized inventory From 1adc7bf5c60830cc8dcbab34c682f7fddde55558 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 21 Sep 2015 20:03:35 +0200 Subject: [PATCH 405/670] Replace "self program" with "this program" in fstk boilerplates ... and remove trailing whitespace. --- builtin/fstk/buttonbar.lua | 54 +++++++++++++++++++------------------- builtin/fstk/dialog.lua | 8 +++--- builtin/fstk/tabview.lua | 34 ++++++++++++------------ builtin/fstk/ui.lua | 6 ++--- 4 files changed, 51 insertions(+), 51 deletions(-) diff --git a/builtin/fstk/buttonbar.lua b/builtin/fstk/buttonbar.lua index 9a9ec999b..1ad175624 100644 --- a/builtin/fstk/buttonbar.lua +++ b/builtin/fstk/buttonbar.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by --the Free Software Foundation; either version 2.1 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--This program is distributed in the hope that it will be useful, --but WITHOUT ANY WARRANTY; without even the implied warranty of --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --GNU Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -24,11 +24,11 @@ local function buttonbar_formspec(self) local formspec = string.format("box[%f,%f;%f,%f;%s]", self.pos.x,self.pos.y ,self.size.x,self.size.y,self.bgcolor) - + for i=self.startbutton,#self.buttons,1 do local btn_name = self.buttons[i].name local btn_pos = {} - + if self.orientation == "horizontal" then btn_pos.x = self.pos.x + --base pos (i - self.startbutton) * self.btn_size + --button offset @@ -36,7 +36,7 @@ local function buttonbar_formspec(self) else btn_pos.x = self.pos.x + (self.btn_size * 0.05) end - + if self.orientation == "vertical" then btn_pos.y = self.pos.y + --base pos (i - self.startbutton) * self.btn_size + --button offset @@ -44,18 +44,18 @@ local function buttonbar_formspec(self) else btn_pos.y = self.pos.y + (self.btn_size * 0.05) end - + if (self.orientation == "vertical" and (btn_pos.y + self.btn_size <= self.pos.y + self.size.y)) or (self.orientation == "horizontal" and (btn_pos.x + self.btn_size <= self.pos.x + self.size.x)) then - + local borders="true" - + if self.buttons[i].image ~= nil then borders="false" end - + formspec = formspec .. string.format("image_button[%f,%f;%f,%f;%s;%s;%s;true;%s]tooltip[%s;%s]", btn_pos.x, btn_pos.y, self.btn_size, self.btn_size, @@ -75,7 +75,7 @@ local function buttonbar_formspec(self) btn_dec_pos.y = self.pos.y + (self.btn_size * 0.05) local btn_inc_pos = {} local btn_size = {} - + if self.orientation == "horizontal" then btn_size.x = 0.5 btn_size.y = self.btn_size @@ -87,25 +87,25 @@ local function buttonbar_formspec(self) btn_inc_pos.x = self.pos.x + (self.btn_size * 0.05) btn_inc_pos.y = self.pos.y + self.size.y - 0.5 end - + local text_dec = "<" local text_inc = ">" if self.orientation == "vertical" then text_dec = "^" text_inc = "v" end - + formspec = formspec .. string.format("image_button[%f,%f;%f,%f;;btnbar_dec_%s;%s;true;true]", btn_dec_pos.x, btn_dec_pos.y, btn_size.x, btn_size.y, self.name, text_dec) - + formspec = formspec .. string.format("image_button[%f,%f;%f,%f;;btnbar_inc_%s;%s;true;true]", btn_inc_pos.x, btn_inc_pos.y, btn_size.x, btn_size.y, self.name, text_inc) end - + return formspec end @@ -113,16 +113,16 @@ local function buttonbar_buttonhandler(self, fields) if fields["btnbar_inc_" .. self.name] ~= nil and self.startbutton < #self.buttons then - + self.startbutton = self.startbutton + 1 return true end - + if fields["btnbar_dec_" .. self.name] ~= nil and self.startbutton > 1 then self.startbutton = self.startbutton - 1 return true end - + for i=1,#self.buttons,1 do if fields[self.buttons[i].name] ~= nil then return self.userbuttonhandler(fields) @@ -134,35 +134,35 @@ local buttonbar_metatable = { handle_buttons = buttonbar_buttonhandler, handle_events = function(self, event) end, get_formspec = buttonbar_formspec, - + hide = function(self) self.hidden = true end, show = function(self) self.hidden = false end, delete = function(self) ui.delete(self) end, - + add_button = function(self, name, caption, image, tooltip) if caption == nil then caption = "" end if image == nil then image = "" end if tooltip == nil then tooltip = "" end - + table.insert(self.buttons,{ name=name, caption=caption, image=image, tooltip=tooltip}) if self.orientation == "horizontal" then if ( (self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2) > self.size.x ) then - + self.btn_initial_offset = self.btn_size * 0.05 + 0.5 self.have_move_buttons = true end else if ((self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2) > self.size.y ) then - + self.btn_initial_offset = self.btn_size * 0.05 + 0.5 self.have_move_buttons = true end end end, - + set_bgparams = function(self, bgcolor) if (type(bgcolor) == "string") then self.bgcolor = bgcolor @@ -189,20 +189,20 @@ function buttonbar_create(name, cbf_buttonhandler, pos, orientation, size) self.startbutton = 1 self.have_move_buttons = false self.hidden = false - + if self.orientation == "horizontal" then self.btn_size = self.size.y else self.btn_size = self.size.x end - + if (self.btn_initial_offset == nil) then self.btn_initial_offset = self.btn_size * 0.05 end self.userbuttonhandler = cbf_buttonhandler self.buttons = {} - + setmetatable(self,buttonbar_metatable) ui.add(self) diff --git a/builtin/fstk/dialog.lua b/builtin/fstk/dialog.lua index 214b0388f..df887f413 100644 --- a/builtin/fstk/dialog.lua +++ b/builtin/fstk/dialog.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by --the Free Software Foundation; either version 2.1 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--this program is distributed in the hope that it will be useful, --but WITHOUT ANY WARRANTY; without even the implied warranty of --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --GNU Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. local function dialog_event_handler(self,event) @@ -61,7 +61,7 @@ function dialog_create(name,get_formspec,buttonhandler,eventhandler) self.formspec = get_formspec self.buttonhandler = buttonhandler self.user_eventhandler = eventhandler - + setmetatable(self,dialog_metatable) ui.add(self) diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua index 47603fb1b..c65f6dd7f 100644 --- a/builtin/fstk/tabview.lua +++ b/builtin/fstk/tabview.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by --the Free Software Foundation; either version 2.1 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--This program is distributed in the hope that it will be useful, --but WITHOUT ANY WARRANTY; without even the implied warranty of --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --GNU Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -61,7 +61,7 @@ local function get_formspec(self) local formspec = "" if not self.hidden and (self.parent == nil or not self.parent.hidden) then - + if self.parent == nil then local tsize = self.tablist[self.last_tab_index].tabsize or {width=self.width, height=self.height} @@ -87,11 +87,11 @@ local function handle_buttons(self,fields) if self.hidden then return false end - + if self:handle_tab_buttons(fields) then return true end - + if self.glb_btn_handler ~= nil and self.glb_btn_handler(self,fields) then return true @@ -112,16 +112,16 @@ end -------------------------------------------------------------------------------- local function handle_events(self,event) - + if self.hidden then return false end - + if self.glb_evt_handler ~= nil and self.glb_evt_handler(self,event) then return true end - + if self.tablist[self.last_tab_index].evt_handler ~= nil then return self.tablist[self.last_tab_index].evt_handler( @@ -131,7 +131,7 @@ local function handle_events(self,event) self.tablist[self.last_tab_index].tabdata ) end - + return false end @@ -160,16 +160,16 @@ local function switch_to_tab(self, index) self.tablist[self.last_tab_index].on_change("LEAVE", self.current_tab, self.tablist[index].name) end - + --update tabview data self.last_tab_index = index local old_tab = self.current_tab self.current_tab = self.tablist[index].name - + if (self.autosave_tab) then core.setting_set(self.name .. "_LAST",self.current_tab) end - + -- call for tab to enter if self.tablist[index].on_change ~= nil then self.tablist[index].on_change("ENTER", @@ -197,14 +197,14 @@ local function set_tab_by_name(self, name) return true end end - + return false end -------------------------------------------------------------------------------- local function hide_tabview(self) self.hidden=true - + --call on_change as we're not gonna show self tab any longer if self.tablist[self.last_tab_index].on_change ~= nil then self.tablist[self.last_tab_index].on_change("LEAVE", @@ -215,7 +215,7 @@ end -------------------------------------------------------------------------------- local function show_tabview(self) self.hidden=false - + -- call for tab to enter if self.tablist[self.last_tab_index].on_change ~= nil then self.tablist[self.last_tab_index].on_change("ENTER", @@ -265,7 +265,7 @@ function tabview_create(name, size, tabheaderpos) self.current_tab = nil self.last_tab_index = 1 self.tablist = {} - + self.autosave_tab = false ui.add(self) diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index de8ae4d2c..8128c5035 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by --the Free Software Foundation; either version 2.1 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--This program is distributed in the hope that it will be useful, --but WITHOUT ANY WARRANTY; without even the implied warranty of --MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --GNU Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ui = {} From a56aedb4eae7d21864ab8dc56a82f644c4639f7a Mon Sep 17 00:00:00 2001 From: paramat Date: Mon, 21 Sep 2015 01:21:28 +0100 Subject: [PATCH 406/670] Mapnode: Add rotateAlongYAxisFull supporting 24 facedirs --- src/mapnode.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++- src/mapnode.h | 1 + src/mg_schematic.cpp | 2 +- 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/mapnode.cpp b/src/mapnode.cpp index 732237833..64c0ea03f 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -159,7 +159,8 @@ v3s16 MapNode::getWallMountedDir(INodeDefManager *nodemgr) const } } -void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) { +void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) +{ ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2; if (cpt2 == CPT2_FACEDIR) { @@ -180,6 +181,59 @@ void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) { } } +void MapNode::rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot) +{ + ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2; + + if (cpt2 == CPT2_FACEDIR) { + static const u16 rotate_facedir[24 * 4] = { + // Table value = rotated facedir + // Columns: 0, 90, 180, 270 degrees rotation around vertical axis + // Rotation is anticlockwise as seen from above (+Y) + + 0, 1, 2, 3, // Initial facedir 0 to 3 + 1, 2, 3, 0, + 2, 3, 0, 1, + 3, 0, 1, 2, + + 4, 13, 10, 19, // 4 to 7 + 5, 14, 11, 16, + 6, 15, 8, 17, + 7, 12, 9, 18, + + 8, 17, 6, 15, // 8 to 11 + 9, 18, 7, 12, + 10, 19, 4, 13, + 11, 16, 5, 14, + + 12, 9, 18, 7, // 12 to 15 + 13, 10, 19, 4, + 14, 11, 16, 5, + 15, 8, 17, 6, + + 16, 5, 14, 11, // 16 to 19 + 17, 6, 15, 8, + 18, 7, 12, 9, + 19, 4, 13, 10, + + 20, 23, 22, 21, // 20 to 23 + 21, 20, 23, 22, + 22, 21, 20, 23, + 23, 22, 21, 20 + }; + u16 index = param2 * 4 + rot; + param2 = rotate_facedir[index]; + } else if (cpt2 == CPT2_WALLMOUNTED) { + u8 wmountface = (param2 & 7); + if (wmountface <= 1) + return; + + Rotation oldrot = wallmounted_to_rot[wmountface - 2]; + param2 &= ~7; + param2 |= rot_to_wallmounted[(oldrot - rot) & 3]; + } +} + static std::vector transformNodeBox(const MapNode &n, const NodeBox &nodebox, INodeDefManager *nodemgr) { diff --git a/src/mapnode.h b/src/mapnode.h index 7cc25c60c..271517391 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -236,6 +236,7 @@ struct MapNode v3s16 getWallMountedDir(INodeDefManager *nodemgr) const; void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot); + void rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot); /* Gets list of node boxes (used for rendering (NDT_NODEBOX)) diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index a5ffb20b8..ca915b7b6 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -167,7 +167,7 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_pla vm->m_data[vi].param1 = 0; if (rot) - vm->m_data[vi].rotateAlongYAxis(m_ndef, rot); + vm->m_data[vi].rotateAlongYAxisFull(m_ndef, rot); } } y_map++; From 596484da4fcd301e597a851a9a54b6dc276a286a Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Wed, 23 Sep 2015 18:53:54 +0200 Subject: [PATCH 407/670] Save and remove player by pointer Why doing things simple ? Use pointer instead of strings to save players and remove them. Saving players by name does a lookup to find pointer we already have ! Idem with removePlayer Also remove unused removePlayer(peer_id), it's never called --- src/content_sao.cpp | 4 ++-- src/environment.cpp | 28 ++++------------------------ src/environment.h | 6 +++--- 3 files changed, 9 insertions(+), 29 deletions(-) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index add1726fc..fe46f3acb 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -821,8 +821,8 @@ void PlayerSAO::removingFromEnvironment() { m_player->setPlayerSAO(NULL); m_player->peer_id = 0; - m_env->savePlayer(m_player->getName()); - m_env->removePlayer(m_player->getName()); + m_env->savePlayer((RemotePlayer*)m_player); + m_env->removePlayer(m_player); } } diff --git a/src/environment.cpp b/src/environment.cpp index 79540bccf..a29b0aab1 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -85,28 +85,11 @@ void Environment::addPlayer(Player *player) m_players.push_back(player); } -void Environment::removePlayer(u16 peer_id) -{ - DSTACK(__FUNCTION_NAME); - - for(std::vector::iterator i = m_players.begin(); - i != m_players.end();) - { - Player *player = *i; - if(player->peer_id == peer_id) { - delete player; - i = m_players.erase(i); - } else { - ++i; - } - } -} - -void Environment::removePlayer(const char *name) +void Environment::removePlayer(Player* player) { for (std::vector::iterator it = m_players.begin(); it != m_players.end(); ++it) { - if (strcmp((*it)->getName(), name) == 0) { + if ((*it) == player) { delete *it; m_players.erase(it); return; @@ -453,15 +436,12 @@ void ServerEnvironment::saveLoadedPlayers() } } -void ServerEnvironment::savePlayer(const std::string &playername) +void ServerEnvironment::savePlayer(RemotePlayer *player) { std::string players_path = m_path_world + DIR_DELIM "players"; fs::CreateDir(players_path); - RemotePlayer *player = static_cast(getPlayer(playername.c_str())); - if (player) { - player->save(players_path); - } + player->save(players_path); } Player *ServerEnvironment::loadPlayer(const std::string &playername) diff --git a/src/environment.h b/src/environment.h index 41295abf2..17d7ff19d 100644 --- a/src/environment.h +++ b/src/environment.h @@ -52,6 +52,7 @@ class ServerMap; class ClientMap; class GameScripting; class Player; +class RemotePlayer; class Environment { @@ -71,8 +72,7 @@ public: virtual Map & getMap() = 0; virtual void addPlayer(Player *player); - void removePlayer(u16 peer_id); - void removePlayer(const char *name); + void removePlayer(Player *player); Player * getPlayer(u16 peer_id); Player * getPlayer(const char *name); Player * getRandomConnectedPlayer(); @@ -226,7 +226,7 @@ public: const std::string &str_reason, bool reconnect); // Save players void saveLoadedPlayers(); - void savePlayer(const std::string &playername); + void savePlayer(RemotePlayer *player); Player *loadPlayer(const std::string &playername); /* From f062bbd7a182233f96c61287d0397534811627d9 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Wed, 23 Sep 2015 00:31:45 -0400 Subject: [PATCH 408/670] Add /emergeblocks command and core.emerge_area() Lua API --- builtin/common/misc_helpers.lua | 30 ++++++++++++++ builtin/game/chatcommands.lua | 70 +++++++++++++++++++-------------- builtin/game/misc.lua | 19 +++++++++ doc/lua_api.txt | 5 +++ src/emerge.cpp | 40 ++++++++++++++----- src/emerge.h | 8 +++- src/map.cpp | 11 ++---- src/script/lua_api/l_env.cpp | 25 ++++++++++++ src/script/lua_api/l_env.h | 3 ++ 9 files changed, 162 insertions(+), 49 deletions(-) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index bf672e6da..08a230431 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -554,6 +554,36 @@ assert(core.string_to_pos("10.0, 5, -2").x == 10) assert(core.string_to_pos("( 10.0, 5, -2)").z == -2) assert(core.string_to_pos("asd, 5, -2)") == nil) +-------------------------------------------------------------------------------- +function core.string_to_area(value) + local p1, p2 = unpack(value:split(") (")) + if p1 == nil or p2 == nil then + return nil + end + + p1 = core.string_to_pos(p1 .. ")") + p2 = core.string_to_pos("(" .. p2) + if p1 == nil or p2 == nil then + return nil + end + + return p1, p2 +end + +local function test_string_to_area() + local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2, 4, -12.53)") + assert(p1.x == 10.0 and p1.y == 5 and p1.z == -2) + assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53) + + p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53") + assert(p1 == nil and p2 == nil) + + p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53") + assert(p1 == nil and p2 == nil) +end + +test_string_to_area() + -------------------------------------------------------------------------------- function table.copy(t, seen) local n = {} diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index 5d317de4b..883aaef4b 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -51,6 +51,27 @@ core.register_on_chat_message(function(name, message) return true -- Handled chat message end) +-- Parses a "range" string in the format of "here (number)" or +-- "(x1, y1, z1) (x2, y2, z2)", returning two position vectors +local function parse_range_str(player_name, str) + local p1, p2 + local args = str:split(" ") + + if args[1] == "here" then + p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2])) + if p1 == nil then + return false, "Unable to get player " .. player_name .. " position" + end + else + p1, p2 = core.string_to_area(str) + if p1 == nil then + return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" + end + end + + return p1, p2 +end + -- -- Chat commands -- @@ -415,40 +436,31 @@ core.register_chatcommand("set", { end, }) +core.register_chatcommand("emergeblocks", { + params = "(here [radius]) | ( )", + description = "starts loading (or generating, if inexistent) map blocks " + .. "contained in area pos1 to pos2", + privs = {server=true}, + func = function(name, param) + local p1, p2 = parse_range_str(name, param) + if p1 == false then + return false, p2 + end + + core.emerge_area(p1, p2) + return true, "Started emerge of area ranging from " .. + core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + end, +}) + core.register_chatcommand("deleteblocks", { params = "(here [radius]) | ( )", description = "delete map blocks contained in area pos1 to pos2", privs = {server=true}, func = function(name, param) - local p1 = {} - local p2 = {} - local args = param:split(" ") - if args[1] == "here" then - local player = core.get_player_by_name(name) - if player == nil then - core.log("error", "player is nil") - return false, "Unable to get current position; player is nil" - end - p1 = player:getpos() - p2 = p1 - - if #args >= 2 then - local radius = tonumber(args[2]) or 0 - p1 = vector.add(p1, radius) - p2 = vector.subtract(p2, radius) - end - else - local pos1, pos2 = unpack(param:split(") (")) - if pos1 == nil or pos2 == nil then - return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" - end - - p1 = core.string_to_pos(pos1 .. ")") - p2 = core.string_to_pos("(" .. pos2) - - if p1 == nil or p2 == nil then - return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" - end + local p1, p2 = parse_range_str(name, param) + if p1 == false then + return false, p2 end if core.delete_area(p1, p2) then diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index e3b7d82bc..dee419767 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -109,6 +109,25 @@ function core.get_connected_players() return temp_table end +-- Returns two position vectors representing a box of `radius` in each +-- direction centered around the player corresponding to `player_name` +function core.get_player_radius_area(player_name, radius) + local player = core.get_player_by_name(player_name) + if player == nil then + return nil + end + + local p1 = player:getpos() + local p2 = p1 + + if radius then + p1 = vector.subtract(p1, radius) + p2 = vector.add(p2, radius) + end + + return p1, p2 +end + function core.hash_node_position(pos) return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768 end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f0a8bec3c..fac779c60 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1708,6 +1708,8 @@ Helper functions * Convert position to a printable string * `minetest.string_to_pos(string)`: returns a position * Same but in reverse. Returns `nil` if the string can't be parsed to a position. +* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions + * Converts a string representing an area box into two positions * `minetest.formspec_escape(string)`: returns a string * escapes the characters "[", "]", "\", "," and ";", which can not be used in formspecs * `minetest.is_yes(arg)` @@ -2020,6 +2022,9 @@ and `minetest.auth_reload` call the authetification handler. * `pos1` and `pos2` are optional and default to mapchunk minp and maxp. * `minetest.clear_objects()` * clear all objects in the environments +* `minetest.emerge_area(pos1, pos2)` + * queues all mapblocks in the area from pos1 to pos2, inclusive, for emerge + * i.e. asynchronously loads blocks from disk, or if inexistent, generates them * `minetest.delete_area(pos1, pos2)` * delete all mapblocks in the area from pos1 to pos2, inclusive * `minetest.line_of_sight(pos1, pos2, stepsize)`: returns `boolean, pos` diff --git a/src/emerge.cpp b/src/emerge.cpp index 084470783..e6bd52659 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -235,11 +235,13 @@ void EmergeManager::stopThreads() } -bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate) +bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, + bool allow_generate, bool force_queue_block) { std::map::const_iterator iter; BlockEmergeData *bedata; - u16 count; + u16 count_global = 0; + u16 count_peer = 0; u8 flags = 0; int idx = 0; @@ -249,14 +251,17 @@ bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate { MutexAutoLock queuelock(queuemutex); - count = blocks_enqueued.size(); - if (count >= qlimit_total) - return false; + count_global = blocks_enqueued.size(); + count_peer = peer_queue_count[peer_id]; - count = peer_queue_count[peer_id]; - u16 qlimit_peer = allow_generate ? qlimit_generate : qlimit_diskonly; - if (count >= qlimit_peer) - return false; + if (!force_queue_block) { + if (count_global >= qlimit_total) + return false; + + u16 qlimit_peer = allow_generate ? qlimit_generate : qlimit_diskonly; + if (count_peer >= qlimit_peer) + return false; + } iter = blocks_enqueued.find(p); if (iter != blocks_enqueued.end()) { @@ -270,7 +275,7 @@ bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate bedata->peer_requested = peer_id; blocks_enqueued.insert(std::make_pair(p, bedata)); - peer_queue_count[peer_id] = count + 1; + peer_queue_count[peer_id] = count_peer + 1; // insert into the EmergeThread queue with the least items int lowestitems = emergethread[0]->blockqueue.size(); @@ -289,6 +294,21 @@ bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate return true; } +v3s16 EmergeManager::getContainingChunk(v3s16 blockpos) +{ + return getContainingChunk(blockpos, params.chunksize); +} + + +v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize) +{ + s16 coff = -chunksize / 2; + v3s16 chunk_offset(coff, coff, coff); + + return getContainerPos(blockpos - chunk_offset, chunksize) + * chunksize + chunk_offset; +} + int EmergeManager::getGroundLevelAtPoint(v2s16 p) { diff --git a/src/emerge.h b/src/emerge.h index 2ed21bb06..47648a17a 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -109,9 +109,13 @@ public: static void getMapgenNames(std::list &mgnames); void startThreads(); void stopThreads(); - bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate); + bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate, + bool force_queue_block=false); - //mapgen helper methods + v3s16 getContainingChunk(v3s16 blockpos); + static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); + + // mapgen helper methods Biome *getBiomeAtPoint(v3s16 p); int getGroundLevelAtPoint(v2s16 p); bool isBlockUnderground(v3s16 blockpos); diff --git a/src/map.cpp b/src/map.cpp index 76a558d43..fd796734e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2259,14 +2259,9 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info; EMERGE_DBG_OUT("initBlockMake(): " PP(blockpos) " - " PP(blockpos)); - s16 chunksize = m_emerge->params.chunksize; - s16 coffset = -chunksize / 2; - v3s16 chunk_offset(coffset, coffset, coffset); - v3s16 blockpos_div = getContainerPos(blockpos - chunk_offset, chunksize); - v3s16 blockpos_min = blockpos_div * chunksize; - v3s16 blockpos_max = blockpos_div * chunksize + v3s16(1,1,1)*(chunksize-1); - blockpos_min += chunk_offset; - blockpos_max += chunk_offset; + s16 csize = m_emerge->params.chunksize; + v3s16 blockpos_min = EmergeManager::getContainingChunk(blockpos, csize); + v3s16 blockpos_max = blockpos_min + v3s16(1, 1, 1) * (csize - 1); v3s16 extra_borders(1,1,1); diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 4e0164d90..04b47e6d0 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/pointedthing.h" #include "content_sao.h" #include "treegen.h" +#include "emerge.h" #include "pathfinder.h" #define GET_ENV_PTR ServerEnvironment* env = \ @@ -751,6 +752,29 @@ int ModApiEnvMod::l_line_of_sight(lua_State *L) return 1; } + +// emerge_area(p1, p2) +// emerge mapblocks in area p1..p2 +int ModApiEnvMod::l_emerge_area(lua_State *L) +{ + GET_ENV_PTR; + + EmergeManager *emerge = getServer(L)->getEmergeManager(); + + v3s16 bpmin = getNodeBlockPos(read_v3s16(L, 1)); + v3s16 bpmax = getNodeBlockPos(read_v3s16(L, 2)); + sortBoxVerticies(bpmin, bpmax); + + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) + for (s16 x = bpmin.X; x <= bpmax.X; x++) { + v3s16 chunkpos(x, y, z); + emerge->enqueueBlockEmerge(PEER_ID_INEXISTENT, chunkpos, false, true); + } + + return 0; +} + // delete_area(p1, p2) // delete mapblocks in area p1..p2 int ModApiEnvMod::l_delete_area(lua_State *L) @@ -954,6 +978,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top) API_FCT(find_node_near); API_FCT(find_nodes_in_area); API_FCT(find_nodes_in_area_under_air); + API_FCT(emerge_area); API_FCT(delete_area); API_FCT(get_perlin); API_FCT(get_perlin_map); diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h index 0d4ca788e..2e9fab777 100644 --- a/src/script/lua_api/l_env.h +++ b/src/script/lua_api/l_env.h @@ -125,6 +125,9 @@ private: // nodenames: eg. {"ignore", "group:tree"} or "default:dirt" static int l_find_nodes_in_area_under_air(lua_State *L); + // emerge_area(p1, p2) + static int l_emerge_area(lua_State *L); + // delete_area(p1, p2) -> true/false static int l_delete_area(lua_State *L); From 524a7656e3e5cd671b05c13e2ad69cb84bad0423 Mon Sep 17 00:00:00 2001 From: netinetwalker Date: Sat, 26 Sep 2015 00:26:52 +0200 Subject: [PATCH 409/670] redis: throw error if block request failed Fixes #3196. Before, we didn't throw an error, and the engine thought the block isn't occupied. But in fact it might be that redis is still loading, and the block does exist in the database. The result was a cheesy map. --- src/database-redis.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/database-redis.cpp b/src/database-redis.cpp index cc4e5bade..d7f537977 100644 --- a/src/database-redis.cpp +++ b/src/database-redis.cpp @@ -118,12 +118,21 @@ std::string Database_Redis::loadBlock(const v3s16 &pos) freeReplyObject(reply); return str; } - case REDIS_REPLY_ERROR: - errorstream << "WARNING: loadBlock: loading block " << PP(pos) - << " failed: " << reply->str << std::endl; + case REDIS_REPLY_ERROR: { + std::string errstr = reply->str; + freeReplyObject(reply); + errorstream << "loadBlock: loading block " << PP(pos) + << " failed: " << errstr << std::endl; + throw FileNotGoodException(std::string( + "Redis command 'HGET %s %s' errored: ") + errstr); } + } + errorstream << "loadBlock: loading block " << PP(pos) + << " returned invalid reply type " << reply->type + << ": " << reply->str << std::endl; freeReplyObject(reply); - return ""; + throw FileNotGoodException(std::string( + "Redis command 'HGET %s %s' gave invalid reply.")); } bool Database_Redis::deleteBlock(const v3s16 &pos) From 89e8f3a9182f5ec15b0c43389a516b10a54741d9 Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 20 Sep 2015 15:19:52 +0200 Subject: [PATCH 410/670] Update .gitignore to ignore symlinks to non-static Minetest directories and sort into an editor section [ci skip] --- .gitignore | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 77b6a2b00..cd6ee3e32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,46 @@ -## Generic ignorable patterns and files +## Editors and Development environments *~ -.*.swp -.*-swp -*bak* -tags -*.vim +*.swp +*.bak* *.orig -*.rej +# Vim +*.vim +# Kate +.*.kate-swp +.swp.* +# KDevelop4 +.kdev4/ +*.kdev4 +# Eclipse (CDT and LDT) +.project +.cproject +.settings/ +.buildpath +.metadata +# GNU Global +tags +!tags/ +gtags.files ## Files related to minetest development cycle /*.patch +# GNU Patch reject file +*.rej -## Non-static Minetest directories +## Non-static Minetest directories or symlinks to these /bin/ /games/* !/games/minimal/ -/cache/ +/cache /textures/* !/textures/base/ -/sounds/ +/screenshots +/sounds /mods/* !/mods/minetest/ /mods/minetest/* !/mods/minetest/mods_here.txt -/worlds/ +/worlds /world/ ## Configuration/log files @@ -50,9 +67,7 @@ src/cmake_config_githash.h src/lua/build/ locale/ .directory -.kdev4/ *.cbp -*.kdev4 *.layout *.o *.a @@ -70,4 +85,3 @@ build/android/path.cfg build/android/and_env build/android/AndroidManifest.xml timestamp - From 776760aba730f1db565d124b4c04efae1c152d9e Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 20 Sep 2015 15:19:52 +0200 Subject: [PATCH 411/670] Clarify radii and distance types in documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because not all circles are round: * circles using an euclidean metric are what we usually call "round" * circles using a maximum metric look like euclidean rectangles with equal adjacent sides (squares) * circles using a manhattan metric look like an euclidean right angled rhombus (squares, but 45° rotated to the former one) [ci skip] --- doc/lua_api.txt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index fac779c60..5b6e55ef3 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -393,13 +393,13 @@ Examples of sound parameter tables: { pos = {x=1,y=2,z=3}, gain = 1.0, -- default - max_hear_distance = 32, -- default + max_hear_distance = 32, -- default, uses an euclidean metric } -- Play connected to an object, looped { object = , gain = 1.0, -- default - max_hear_distance = 32, -- default + max_hear_distance = 32, -- default, uses an euclidean metric loop = true, -- only sounds connected to objects can be looped } @@ -1664,7 +1664,7 @@ numerical form, the raw integer value of an ARGB8 quad: or string form, a ColorString (defined above): `colorspec = "green"` -Vector helpers +Spatial Vectors -------------- * `vector.new([x[, y, z]])`: returns a vector. @@ -1682,8 +1682,8 @@ For the following functions `x` can be either a vector or a number: * `vector.add(v, x)`: returns a vector * `vector.subtract(v, x)`: returns a vector -* `vector.multiply(v, x)`: returns a vector -* `vector.divide(v, x)`: returns a vector +* `vector.multiply(v, x)`: returns a scaled vector or Schur product +* `vector.divide(v, x)`: returns a scaled vector or Schur quotient Helper functions ----------------- @@ -1971,11 +1971,13 @@ and `minetest.auth_reload` call the authetification handler. * Returns `ObjectRef`, or `nil` if failed * `minetest.get_player_by_name(name)`: Get an `ObjectRef` to a player * `minetest.get_objects_inside_radius(pos, radius)` + * `radius`: using an euclidean metric * `minetest.set_timeofday(val)` * `val` is between `0` and `1`; `0` for midnight, `0.5` for midday * `minetest.get_timeofday()` * `minetest.get_gametime()`: returns the time, in seconds, since the world was created * `minetest.find_node_near(pos, radius, nodenames)`: returns pos or `nil` + * `radius`: using a maximum metric * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `minetest.find_nodes_in_area(minp, maxp, nodenames)`: returns a list of positions * returns as second value a table with the count of the individual nodes found @@ -2039,7 +2041,7 @@ and `minetest.auth_reload` call the authetification handler. * returns a table of 3D points representing a path from `pos1` to `pos2` or `nil` * `pos1`: start position * `pos2`: end position - * `searchdistance`: number of blocks to search in each direction + * `searchdistance`: number of blocks to search in each direction using a maximum metric * `max_jump`: maximum height difference to consider walkable * `max_drop`: maximum height difference to consider droppable * `algorithm`: One of `"A*_noprefetch"` (default), `"A*"`, `"Dijkstra"` From 8787d2e7e9671f3b5930ca9c41c6e0867b8a5a54 Mon Sep 17 00:00:00 2001 From: Christof Kaufmann Date: Tue, 18 Aug 2015 12:05:24 +0200 Subject: [PATCH 412/670] Fix falling through nodes on world load (fixes #2784) On world load the collision code can not see node boxes, since the nodes have not been loaded. Thus it collided only at the next full node. However, standing on a slab on world load leaded to sinking into it until the world finished loading. Then one maybe fell further, if the node below was not walkable. Now, with this commit, when no node around the player has been loaded it simply does not move the player. --- src/collision.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/collision.cpp b/src/collision.cpp index adb6970f5..5d52202d9 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -245,6 +245,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, s16 max_y = MYMAX(oldpos_i.Y, newpos_i.Y) + (box_0.MaxEdge.Y / BS) + 1; s16 max_z = MYMAX(oldpos_i.Z, newpos_i.Z) + (box_0.MaxEdge.Z / BS) + 1; + bool any_position_valid = false; + for(s16 x = min_x; x <= max_x; x++) for(s16 y = min_y; y <= max_y; y++) for(s16 z = min_z; z <= max_z; z++) @@ -257,6 +259,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, if (is_position_valid) { // Object collides into walkable nodes + any_position_valid = true; const ContentFeatures &f = gamedef->getNodeDefManager()->get(n); if(f.walkable == false) continue; @@ -289,6 +292,12 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, is_object.push_back(false); } } + + // Do not move if world has not loaded yet, since custom node boxes + // are not available for collision detection. + if (!any_position_valid) + return result; + } // tt2 if(collideWithObjects) @@ -298,7 +307,6 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, /* add object boxes to cboxes */ - std::vector objects; #ifndef SERVER ClientEnvironment *c_env = dynamic_cast(env); From 88a44122abdef9c23c5ab984742f12e4fbd41188 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 24 Aug 2015 19:05:41 +0300 Subject: [PATCH 413/670] FindJson: use PATH_SUFFIXES jsoncpp to find incdir For example, on Fedora systems jsoncpp headers is installed in `/usr/include/jsoncpp`. --- cmake/Modules/FindJson.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake index 8e355b93f..1558b0fcf 100644 --- a/cmake/Modules/FindJson.cmake +++ b/cmake/Modules/FindJson.cmake @@ -8,7 +8,7 @@ option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause seg if(ENABLE_SYSTEM_JSONCPP) find_library(JSON_LIBRARY NAMES jsoncpp) - find_path(JSON_INCLUDE_DIR json/features.h) + find_path(JSON_INCLUDE_DIR json/features.h PATH_SUFFIXES jsoncpp) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) From 4338f100f84100f5779d4e12fe23d359f94ef718 Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 26 Sep 2015 23:29:08 +0200 Subject: [PATCH 414/670] Fix redis erroring on non found blocks Thanks to @netinetwalker for spotting the error, proposing a fix, and testing it. Error due to @est31's merging changes to PR #3202 to add more error reporting for invalid reply types, commit: 524a7656e3e5cd671b05c13e2ad69cb84bad0423 "redis: throw error if block request failed" Now we branch out on the valid reply type "not found". --- src/database-redis.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/database-redis.cpp b/src/database-redis.cpp index d7f537977..9e47b516f 100644 --- a/src/database-redis.cpp +++ b/src/database-redis.cpp @@ -126,6 +126,11 @@ std::string Database_Redis::loadBlock(const v3s16 &pos) throw FileNotGoodException(std::string( "Redis command 'HGET %s %s' errored: ") + errstr); } + case REDIS_REPLY_NIL: { + // block not found in database + freeReplyObject(reply); + return ""; + } } errorstream << "loadBlock: loading block " << PP(pos) << " returned invalid reply type " << reply->type From e7282816fffc433861e7e83b0bf1de701d3ea2d1 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 27 Sep 2015 00:18:05 +0200 Subject: [PATCH 415/670] Abort at uncatched exceptions Change a remaining assert(0) call to FATAL_ERROR(msg). There was a regression since commit ced6d20295a8263757d57c02a07ffcb66688a163 "For usages of assert() that are meant to persist in Release builds (when NDEBUG is defined), replace those usages with persistent alternatives" where when an "uncatched" exception is thrown inside a "side thread", the program doesn't abort anymore. This led to the problem @netinetwalker experienced where the emergethread got an unhandled exception for loading a mapblock while redis was loading, (see #3196) and then jmped outside its loop to work down its queue. This resulted in the server not doing any emerges anymore. --- src/debug.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/debug.h b/src/debug.h index 9684aa2df..2ccbe58ba 100644 --- a/src/debug.h +++ b/src/debug.h @@ -42,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif // Whether to catch all std::exceptions. -// Assert will be called on such an event. +// When "catching", the program will abort with an error message. // In debug mode, leave these for the debugger and don't catch them. #ifdef NDEBUG #define CATCH_UNHANDLED_EXCEPTIONS 1 @@ -145,11 +145,11 @@ private: #if CATCH_UNHANDLED_EXCEPTIONS == 1 #define BEGIN_DEBUG_EXCEPTION_HANDLER try { - #define END_DEBUG_EXCEPTION_HANDLER(logstream) \ - } catch (std::exception &e) { \ - logstream << "ERROR: An unhandled exception occurred: " \ - << e.what() << std::endl; \ - assert(0); \ + #define END_DEBUG_EXCEPTION_HANDLER(logstream) \ + } catch (std::exception &e) { \ + logstream << "An unhandled exception occurred: " \ + << e.what() << std::endl; \ + FATAL_ERROR(e.what()); \ } #else // Dummy ones From ffe291cb78fc7135034fe6456b2d7dfc3761dc52 Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 26 Sep 2015 00:28:48 +0100 Subject: [PATCH 416/670] Decorations: Remove error message 'chunksize not divisable by sidelen' Sidelen larger than 16 is essential for low density decorations With sidelen > 16 chunksize may not be divisable by sidelen if chunksize is changed, in this situation setting sidelen = chunksize is desirable and should not create error messages. --- src/mg_decoration.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index f11a71518..4f543a7dd 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -90,11 +90,9 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) int carea_size = nmax.X - nmin.X + 1; // Divide area into parts - if (carea_size % sidelen) { - errorstream << "Decoration::placeDeco: chunk size is not divisible by " - "sidelen; setting sidelen to " << carea_size << std::endl; + // If chunksize is changed it may no longer be divisable by sidelen + if (carea_size % sidelen) sidelen = carea_size; - } s16 divlen = carea_size / sidelen; int area = sidelen * sidelen; From 0cde03254a6564eaec21603e9add4f14e6c2fe52 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Tue, 29 Sep 2015 01:55:12 +0200 Subject: [PATCH 417/670] Don't serialize StaticObjectList with > 65535 objects Because the count is serialized as u16, this would cause overflow. If minetest later deserialized a mapblock with an incorrect static object count, it would be unable to find the NameIdMapping (which comes after the StaticObjectList) and abort with an error such as "Invalid block data in database: unsupported NameIdMapping version" (issue #2610). --- src/staticobject.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/staticobject.cpp b/src/staticobject.cpp index 2e7d45a47..e226f0b2e 100644 --- a/src/staticobject.cpp +++ b/src/staticobject.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "staticobject.h" #include "util/serialize.h" +#include "log.h" void StaticObject::serialize(std::ostream &os) { @@ -44,9 +45,20 @@ void StaticObjectList::serialize(std::ostream &os) // version u8 version = 0; writeU8(os, version); + // count - u16 count = m_stored.size() + m_active.size(); + size_t count = m_stored.size() + m_active.size(); + // Make sure it fits into u16, else it would get truncated and cause e.g. + // issue #2610 (Invalid block data in database: unsupported NameIdMapping version). + if (count > (u16)-1) { + errorstream << "StaticObjectList::serialize(): " + << "too many objects (" << count << ") in list, " + << "not writing them to disk." << std::endl; + writeU16(os, 0); // count = 0 + return; + } writeU16(os, count); + for(std::vector::iterator i = m_stored.begin(); i != m_stored.end(); ++i) { From 2a7d01b833da7b93125ad31e787f3e2145a22ec5 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 29 Sep 2015 17:26:07 +0200 Subject: [PATCH 418/670] Some map border related fixes 1. Check for entity addition success in spawn_item implementation 2. Check for success in item_drop callback, so that the player doesn't lose the item if they are outside bounds and try to drop it. 3. When existing player joins game, check that their position is inside map bounds. If not, set their position to the return value of findSpawnPos(). 4. Make findSpawnPos() respect the border 2 fixes a lua crash if a player drops an item outside map bounds. 3 fixes an assertion crash if a player leaves when being outside map bounds, and then rejoins. --- builtin/game/item.lua | 8 ++++++-- builtin/game/item_entity.lua | 9 ++++++--- src/server.cpp | 24 +++++++++++++++++------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/builtin/game/item.lua b/builtin/game/item.lua index 6628a4081..0f10af8ee 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -349,12 +349,16 @@ function core.item_drop(itemstack, dropper, pos) v.y = v.y*2 + 2 v.z = v.z*2 obj:setvelocity(v) + return itemstack end else - core.add_item(pos, itemstack) + if core.add_item(pos, itemstack) then + return itemstack + end end - return itemstack + -- If we reach this, adding the object to the + -- environment failed end function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index 6425a10aa..190473ceb 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -4,11 +4,14 @@ function core.spawn_item(pos, item) -- Take item in any format local stack = ItemStack(item) local obj = core.add_entity(pos, "__builtin:item") - obj:get_luaentity():set_item(stack:to_string()) + -- Don't use obj if it couldn't be added to the map. + if obj then + obj:get_luaentity():set_item(stack:to_string()) + end return obj end --- If item_entity_ttl is not set, enity will have default life time +-- If item_entity_ttl is not set, enity will have default life time -- Setting it to -1 disables the feature local time_to_live = tonumber(core.setting_get("item_entity_ttl")) @@ -81,7 +84,7 @@ core.register_entity(":__builtin:item", { if data and type(data) == "table" then self.itemstring = data.itemstring self.always_collect = data.always_collect - if data.age then + if data.age then self.age = data.age + dtime_s else self.age = dtime_s diff --git a/src/server.cpp b/src/server.cpp index 9b1b142eb..fbdaa5918 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3263,10 +3263,6 @@ v3f Server::findSpawnPos() return nodeposf * BS; } - // Default position is static_spawnpoint - // We will return it if we don't found a good place - v3s16 nodepos(nodeposf.X, nodeposf.Y, nodeposf.Z); - s16 water_level = map.getWaterLevel(); bool is_good = false; @@ -3286,7 +3282,7 @@ v3f Server::findSpawnPos() if (groundheight > water_level + 6) // Don't go to high places continue; - nodepos = v3s16(nodepos2d.X, groundheight, nodepos2d.Y); + v3s16 nodepos(nodepos2d.X, groundheight, nodepos2d.Y); s32 air_count = 0; for (s32 i = 0; i < 10; i++) { @@ -3295,7 +3291,11 @@ v3f Server::findSpawnPos() content_t c = map.getNodeNoEx(nodepos).getContent(); if (c == CONTENT_AIR || c == CONTENT_IGNORE) { air_count++; - if (air_count >= 2){ + if (air_count >= 2) { + nodeposf = intToFloat(nodepos, BS); + // Don't spawn the player outside map boundaries + if (objectpos_over_limit(nodeposf)) + continue; is_good = true; break; } @@ -3304,7 +3304,7 @@ v3f Server::findSpawnPos() } } - return intToFloat(nodepos, BS); + return nodeposf; } PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version) @@ -3353,6 +3353,16 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version // Add player to environment m_env->addPlayer(player); + } else { + // If the player exists, ensure that they respawn inside legal bounds + // This fixes an assert crash when the player can't be added + // to the environment + if (objectpos_over_limit(player->getPosition())) { + actionstream << "Respawn position for player \"" + << name << "\" outside limits, resetting" << std::endl; + v3f pos = findSpawnPos(); + player->setPosition(pos); + } } // Create a new player active object From 0bf1984d2c9fb3a9dc73303551c18906c3c9482b Mon Sep 17 00:00:00 2001 From: est31 Date: Wed, 30 Sep 2015 00:38:05 +0200 Subject: [PATCH 419/670] Fix some SRP issues -> Remove memory allocation bugs -> Merge changes from upstream, enabling customizeable memory allocation --- src/client.cpp | 6 +- src/util/auth.cpp | 5 +- src/util/srp.cpp | 193 ++++++++++++++++++++++++++++------------------ src/util/srp.h | 31 +++++++- 4 files changed, 153 insertions(+), 82 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 4a9398f70..b2e21743c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1059,8 +1059,10 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism) m_password.length(), NULL, NULL); char *bytes_A = 0; size_t len_A = 0; - srp_user_start_authentication((struct SRPUser *) m_auth_data, - NULL, NULL, 0, (unsigned char **) &bytes_A, &len_A); + SRP_Result res = srp_user_start_authentication( + (struct SRPUser *) m_auth_data, NULL, NULL, 0, + (unsigned char **) &bytes_A, &len_A); + FATAL_ERROR_IF(res != SRP_OK, "Creating local SRP user failed."); NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_A, 0); resp_pkt << std::string(bytes_A, len_A) << based_on; diff --git a/src/util/auth.cpp b/src/util/auth.cpp index df8940e87..0c17a9237 100644 --- a/src/util/auth.cpp +++ b/src/util/auth.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "sha1.h" #include "srp.h" #include "string.h" +#include "debug.h" // Get an sha-1 hash of the player's name combined with // the password entered. That's what the server uses as @@ -50,10 +51,11 @@ void getSRPVerifier(const std::string &name, char **bytes_v, size_t *len_v) { std::string n_name = lowercase(name); - srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048, + SRP_Result res = srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048, n_name.c_str(), (const unsigned char *)password.c_str(), password.size(), (unsigned char **)salt, salt_len, (unsigned char **)bytes_v, len_v, NULL, NULL); + FATAL_ERROR_IF(res != SRP_OK, "Couldn't create salted SRP verifier"); } // Get a db-ready SRP verifier @@ -67,6 +69,7 @@ inline static std::string getSRPVerifier(const std::string &name, size_t len_v; getSRPVerifier(name, password, salt, &salt_len, &bytes_v, &len_v); + assert(*salt); // usually, srp_create_salted_verification_key promises us to return SRP_ERR when *salt == NULL std::string ret_val = encodeSRPVerifier(std::string(bytes_v, len_v), std::string(*salt, salt_len)); free(bytes_v); diff --git a/src/util/srp.cpp b/src/util/srp.cpp index 94426db92..b4af58d62 100644 --- a/src/util/srp.cpp +++ b/src/util/srp.cpp @@ -69,6 +69,19 @@ static int g_initialized = 0; static unsigned int g_rand_idx; static unsigned char g_rand_buff[RAND_BUFF_MAX]; +void *(*srp_alloc) (size_t) = &malloc; +void *(*srp_realloc) (void *, size_t) = &realloc; +void (*srp_free) (void *) = &free; + +void srp_set_memory_functions( + void *(*new_srp_alloc) (size_t), + void *(*new_srp_realloc) (void *, size_t), + void (*new_srp_free) (void *)) { + srp_alloc = new_srp_alloc; + srp_realloc = new_srp_realloc; + srp_free = new_srp_free; +} + typedef struct { mpz_t N; @@ -171,13 +184,13 @@ static void delete_ng(NGConstant *ng) if (ng) { mpz_clear(ng->N); mpz_clear(ng->g); - free(ng); + srp_free(ng); } } static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_hex ) { - NGConstant *ng = (NGConstant *) malloc(sizeof(NGConstant)); + NGConstant *ng = (NGConstant *) srp_alloc(sizeof(NGConstant)); mpz_init(ng->N); mpz_init(ng->g); @@ -367,18 +380,18 @@ static int H_nn(mpz_t result, SRP_HashAlgorithm alg, const mpz_t N, const mpz_t size_t len_n1 = mpz_num_bytes(n1); size_t len_n2 = mpz_num_bytes(n2); size_t nbytes = len_N + len_N; - unsigned char *bin = (unsigned char *) malloc(nbytes); + unsigned char *bin = (unsigned char *) srp_alloc(nbytes); if (!bin) return 0; if (len_n1 > len_N || len_n2 > len_N) { - free(bin); + srp_free(bin); return 0; } memset(bin, 0, nbytes); mpz_to_bin(n1, bin + (len_N - len_n1)); mpz_to_bin(n2, bin + (len_N + len_N - len_n2)); hash( alg, bin, nbytes, buff ); - free(bin); + srp_free(bin); mpz_from_bin(buff, hash_length(alg), result); return 1; } @@ -387,13 +400,13 @@ static int H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n, siz { unsigned char buff[SHA512_DIGEST_LENGTH]; size_t nbytes = len_n + len_bytes; - unsigned char *bin = (unsigned char *) malloc(nbytes); + unsigned char *bin = (unsigned char *) srp_alloc(nbytes); if (!bin) return 0; memcpy(bin, n, len_n); memcpy(bin + len_n, bytes, len_bytes); hash(alg, bin, nbytes, buff); - free(bin); + srp_free(bin); mpz_from_bin(buff, hash_length(alg), result); return 1; } @@ -418,23 +431,23 @@ static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char static void update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n) { size_t len = mpz_num_bytes(n); - unsigned char* n_bytes = (unsigned char *) malloc(len); + unsigned char* n_bytes = (unsigned char *) srp_alloc(len); if (!n_bytes) return; mpz_to_bin(n, n_bytes); hash_update(alg, ctx, n_bytes, len); - free(n_bytes); + srp_free(n_bytes); } static void hash_num( SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest ) { int nbytes = mpz_num_bytes(n); - unsigned char *bin = (unsigned char *) malloc(nbytes); + unsigned char *bin = (unsigned char *) srp_alloc(nbytes); if(!bin) return; mpz_to_bin(n, bin); hash(alg, bin, nbytes, dest); - free(bin); + srp_free(bin); } static void calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *dest, @@ -510,7 +523,7 @@ static void srp_pcgrandom_seed(srp_pcgrandom *r, unsigned long long int state, } -static int fill_buff() +static SRP_Result fill_buff() { g_rand_idx = 0; @@ -526,7 +539,7 @@ static int fill_buff() CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE*) g_rand_buff); CryptReleaseContext(wctx, 0); - return 1; + return SRP_OK; #else fp = fopen("/dev/urandom", "r"); @@ -535,41 +548,48 @@ static int fill_buff() fread(g_rand_buff, sizeof(g_rand_buff), 1, fp); fclose(fp); } else { - srp_pcgrandom *r = (srp_pcgrandom *) malloc(sizeof(srp_pcgrandom)); + srp_pcgrandom *r = (srp_pcgrandom *) srp_alloc(sizeof(srp_pcgrandom)); + if (!r) + return SRP_ERR; srp_pcgrandom_seed(r, time(NULL) ^ clock(), 0xda3e39cb94b95bdbULL); size_t i = 0; for (i = 0; i < RAND_BUFF_MAX; i++) { g_rand_buff[i] = srp_pcgrandom_next(r); } + srp_free(r); } #endif - return 1; + return SRP_OK; } -static void mpz_fill_random(mpz_t num) +static SRP_Result mpz_fill_random(mpz_t num) { // was call: BN_rand(num, 256, -1, 0); if (RAND_BUFF_MAX - g_rand_idx < 32) - fill_buff(); + if (fill_buff() != SRP_OK) + return SRP_ERR; mpz_from_bin((const unsigned char *) (&g_rand_buff[g_rand_idx]), 32, num); g_rand_idx += 32; + return SRP_OK; } -static void init_random() +static SRP_Result init_random() { if (g_initialized) - return; - g_initialized = fill_buff(); + return SRP_OK; + SRP_Result ret = fill_buff(); + g_initialized = (ret == SRP_OK); + return ret; } #define srp_dbg_num(num, text) ; /*void srp_dbg_num(mpz_t num, char * prevtext) { int len_num = mpz_num_bytes(num); - char *bytes_num = (char*) malloc(len_num); + char *bytes_num = (char*) srp_alloc(len_num); mpz_to_bin(num, (unsigned char *) bytes_num); srp_dbg_data(bytes_num, len_num, prevtext); - free(bytes_num); + srp_free(bytes_num); }*/ @@ -579,35 +599,42 @@ static void init_random() * ***********************************************************************************************************/ -void srp_create_salted_verification_key( SRP_HashAlgorithm alg, +SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg, SRP_NGType ng_type, const char *username_for_verifier, const unsigned char *password, size_t len_password, unsigned char **bytes_s, size_t *len_s, unsigned char **bytes_v, size_t *len_v, const char *n_hex, const char *g_hex ) { + SRP_Result ret = SRP_OK; + mpz_t v; mpz_init(v); mpz_t x; mpz_init(x); NGConstant *ng = new_ng(ng_type, n_hex, g_hex); - if(!ng) - goto cleanup_and_exit; + if (!ng) + goto error_and_exit; - init_random(); /* Only happens once */ + if (init_random() != SRP_OK) /* Only happens once */ + goto error_and_exit; if (*bytes_s == NULL) { - *len_s = 16; - if (RAND_BUFF_MAX - g_rand_idx < 16) - fill_buff(); - *bytes_s = (unsigned char*)malloc(sizeof(char) * 16); - memcpy(*bytes_s, &g_rand_buff + g_rand_idx, sizeof(char) * 16); - g_rand_idx += 16; + size_t size_to_fill = 16; + *len_s = size_to_fill; + if (RAND_BUFF_MAX - g_rand_idx < size_to_fill) + if (fill_buff() != SRP_OK) + goto error_and_exit; + *bytes_s = (unsigned char*)srp_alloc(size_to_fill); + if (!*bytes_s) + goto error_and_exit; + memcpy(*bytes_s, &g_rand_buff + g_rand_idx, size_to_fill); + g_rand_idx += size_to_fill; } if (!calculate_x(x, alg, *bytes_s, *len_s, username_for_verifier, password, len_password)) - goto cleanup_and_exit; + goto error_and_exit; srp_dbg_num(x, "Server calculated x: "); @@ -615,10 +642,10 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg, *len_v = mpz_num_bytes(v); - *bytes_v = (unsigned char*)malloc(*len_v); + *bytes_v = (unsigned char*)srp_alloc(*len_v); if (!bytes_v) - goto cleanup_and_exit; + goto error_and_exit; mpz_to_bin(v, *bytes_v); @@ -626,6 +653,10 @@ cleanup_and_exit: delete_ng( ng ); mpz_clear(v); mpz_clear(x); + return ret; +error_and_exit: + ret = SRP_ERR; + goto cleanup_and_exit; } @@ -663,19 +694,23 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, if (!ng) goto cleanup_and_exit; - ver = (struct SRPVerifier *) malloc( sizeof(struct SRPVerifier) ); + ver = (struct SRPVerifier *) srp_alloc( sizeof(struct SRPVerifier) ); if (!ver) goto cleanup_and_exit; - init_random(); /* Only happens once */ + if (init_random() != SRP_OK) { /* Only happens once */ + srp_free(ver); + ver = 0; + goto cleanup_and_exit; + } - ver->username = (char *) malloc(ulen); + ver->username = (char *) srp_alloc(ulen); ver->hash_alg = alg; ver->ng = ng; if (!ver->username) { - free(ver); + srp_free(ver); ver = 0; goto cleanup_and_exit; } @@ -690,11 +725,15 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, if (bytes_b) { mpz_from_bin(bytes_b, len_b, b); } else { - mpz_fill_random(b); + if (mpz_fill_random(b) != SRP_OK) { + srp_free(ver); + ver = 0; + goto cleanup_and_exit; + } } if (!H_nn(k, alg, ng->N, ng->N, ng->g)) { - free(ver); + srp_free(ver); ver = 0; goto cleanup_and_exit; } @@ -705,7 +744,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, mpz_addm(B, tmp1, tmp2, ng->N, tmp3); if (!H_nn(u, alg, ng->N, A, B)) { - free(ver); + srp_free(ver); ver = 0; goto cleanup_and_exit; } @@ -723,11 +762,11 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, calculate_H_AMK(alg, ver->H_AMK, A, ver->M, ver->session_key); *len_B = mpz_num_bytes(B); - *bytes_B = (unsigned char*)malloc(*len_B); + *bytes_B = (unsigned char*)srp_alloc(*len_B); if (!*bytes_B) { - free(ver->username); - free(ver); + srp_free(ver->username); + srp_free(ver); ver = 0; *len_B = 0; goto cleanup_and_exit; @@ -737,7 +776,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, ver->bytes_B = *bytes_B; } else { - free(ver); + srp_free(ver); ver = 0; } @@ -762,10 +801,10 @@ void srp_verifier_delete(struct SRPVerifier *ver) { if (ver) { delete_ng(ver->ng); - free(ver->username); - free(ver->bytes_B); + srp_free(ver->username); + srp_free(ver->bytes_B); memset(ver, 0, sizeof(*ver)); - free(ver); + srp_free(ver); } } @@ -814,14 +853,15 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, const unsigned char *bytes_password, size_t len_password, const char *n_hex, const char *g_hex) { - struct SRPUser *usr = (struct SRPUser *) malloc(sizeof(struct SRPUser)); + struct SRPUser *usr = (struct SRPUser *) srp_alloc(sizeof(struct SRPUser)); size_t ulen = strlen(username) + 1; size_t uvlen = strlen(username_for_verifier) + 1; if (!usr) goto err_exit; - init_random(); /* Only happens once */ + if (init_random() != SRP_OK) /* Only happens once */ + goto err_exit; usr->hash_alg = alg; usr->ng = new_ng(ng_type, n_hex, g_hex); @@ -833,12 +873,12 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, if (!usr->ng) goto err_exit; - usr->username = (char*)malloc(ulen); - usr->username_verifier = (char*)malloc(uvlen); - usr->password = (unsigned char*)malloc(len_password); + usr->username = (char*)srp_alloc(ulen); + usr->username_verifier = (char*)srp_alloc(uvlen); + usr->password = (unsigned char*)srp_alloc(len_password); usr->password_len = len_password; - if (!usr->username || !usr->password) + if (!usr->username || !usr->password || !usr->username_verifier) goto err_exit; memcpy(usr->username, username, ulen); @@ -858,15 +898,13 @@ err_exit: mpz_clear(usr->S); if (usr->ng) delete_ng(usr->ng); - if (usr->username) - free(usr->username); - if (usr->username_verifier) - free(usr->username_verifier); + srp_free(usr->username); + srp_free(usr->username_verifier); if (usr->password) { memset(usr->password, 0, usr->password_len); - free(usr->password); + srp_free(usr->password); } - free(usr); + srp_free(usr); } return 0; @@ -885,15 +923,15 @@ void srp_user_delete(struct SRPUser *usr) memset(usr->password, 0, usr->password_len); - free(usr->username); - free(usr->username_verifier); - free(usr->password); + srp_free(usr->username); + srp_free(usr->username_verifier); + srp_free(usr->password); if (usr->bytes_A) - free(usr->bytes_A); + srp_free(usr->bytes_A); memset(usr, 0, sizeof(*usr)); - free(usr); + srp_free(usr); } } @@ -926,33 +964,38 @@ size_t srp_user_get_session_key_length(struct SRPUser *usr) /* Output: username, bytes_A, len_A */ -void srp_user_start_authentication(struct SRPUser *usr, char **username, +SRP_Result srp_user_start_authentication(struct SRPUser *usr, char **username, const unsigned char *bytes_a, size_t len_a, unsigned char **bytes_A, size_t *len_A) { if (bytes_a) { mpz_from_bin(bytes_a, len_a, usr->a); } else { - mpz_fill_random(usr->a); + if (mpz_fill_random(usr->a) != SRP_OK) + goto error_and_exit; } mpz_powm(usr->A, usr->ng->g, usr->a, usr->ng->N); *len_A = mpz_num_bytes(usr->A); - *bytes_A = (unsigned char*)malloc(*len_A); + *bytes_A = (unsigned char*)srp_alloc(*len_A); - if (!*bytes_A) { - *len_A = 0; - *bytes_A = 0; - *username = 0; - return; - } + if (!*bytes_A) + goto error_and_exit; mpz_to_bin(usr->A, *bytes_A); usr->bytes_A = *bytes_A; if (username) *username = usr->username; + + return SRP_OK; + +error_and_exit: + *len_A = 0; + *bytes_A = 0; + *username = 0; + return SRP_ERR; } diff --git a/src/util/srp.h b/src/util/srp.h index 15a2b8a68..c876e70e6 100644 --- a/src/util/srp.h +++ b/src/util/srp.h @@ -78,6 +78,22 @@ typedef enum SRP_SHA512*/ } SRP_HashAlgorithm; +typedef enum +{ + SRP_OK, + SRP_ERR, +} SRP_Result; + +/* Sets the memory functions used by srp. + * Note: this doesn't set the memory functions used by gmp, + * but it is supported to have different functions for srp and gmp. + * Don't call this after you have already allocated srp structures. + */ +void srp_set_memory_functions( + void *(*new_srp_alloc) (size_t), + void *(*new_srp_realloc) (void *, size_t), + void (*new_srp_free) (void *)); + /* Out: bytes_v, len_v * * The caller is responsible for freeing the memory allocated for bytes_v @@ -86,8 +102,11 @@ typedef enum * If provided, they must contain ASCII text of the hexidecimal notation. * * If bytes_s == NULL, it is filled with random data. The caller is responsible for freeing. + * + * Returns SRP_OK on success, and SRP_ERR on error. + * bytes_s might be in this case invalid, don't free it. */ -void srp_create_salted_verification_key( SRP_HashAlgorithm alg, +SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg, SRP_NGType ng_type, const char *username_for_verifier, const unsigned char *password, size_t len_password, unsigned char **bytes_s, size_t *len_s, @@ -101,6 +120,8 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg, * The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type * * If bytes_b == NULL, random data is used for b. + * + * Returns pointer to SRPVerifier on success, and NULL on error. */ struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, const char *username, @@ -114,7 +135,7 @@ struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, void srp_verifier_delete( struct SRPVerifier* ver ); - +// srp_verifier_verify_session must have been called before int srp_verifier_is_authenticated( struct SRPVerifier* ver ); @@ -128,7 +149,9 @@ const unsigned char* srp_verifier_get_session_key( struct SRPVerifier* ver, size_t srp_verifier_get_session_key_length(struct SRPVerifier* ver); -/* user_M must be exactly srp_verifier_get_session_key_length() bytes in size */ +/* Verifies session, on success, it writes bytes_HAMK. + * user_M must be exactly srp_verifier_get_session_key_length() bytes in size + */ void srp_verifier_verify_session( struct SRPVerifier* ver, const unsigned char* user_M, unsigned char** bytes_HAMK ); @@ -154,7 +177,7 @@ size_t srp_user_get_session_key_length(struct SRPUser* usr); /* Output: username, bytes_A, len_A. If you don't want it get written, set username to NULL. * If bytes_a == NULL, random data is used for a. */ -void srp_user_start_authentication(struct SRPUser* usr, char** username, +SRP_Result srp_user_start_authentication(struct SRPUser* usr, char** username, const unsigned char* bytes_a, size_t len_a, unsigned char** bytes_A, size_t* len_A); From 8aaae7db05917dbbedebbd1b5616db976dfc2e8e Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 2 Oct 2015 01:07:57 +0100 Subject: [PATCH 420/670] Mapnode: Replace rotateAlongYAxis with improved version Get facedir by using lowest 5 bits of param2 and limiting to 23 More robust, frees up higher param2 bits for other uses Change lookup table and table index to u8 --- src/mapnode.cpp | 30 +++++------------------------- src/mapnode.h | 1 - src/mg_schematic.cpp | 2 +- 3 files changed, 6 insertions(+), 27 deletions(-) diff --git a/src/mapnode.cpp b/src/mapnode.cpp index 64c0ea03f..671e949f1 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -164,29 +164,7 @@ void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2; if (cpt2 == CPT2_FACEDIR) { - if (param2 >= 4) - return; - - u8 newrot = param2 & 3; - param2 &= ~3; - param2 |= (newrot + rot) & 3; - } else if (cpt2 == CPT2_WALLMOUNTED) { - u8 wmountface = (param2 & 7); - if (wmountface <= 1) - return; - - Rotation oldrot = wallmounted_to_rot[wmountface - 2]; - param2 &= ~7; - param2 |= rot_to_wallmounted[(oldrot - rot) & 3]; - } -} - -void MapNode::rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot) -{ - ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2; - - if (cpt2 == CPT2_FACEDIR) { - static const u16 rotate_facedir[24 * 4] = { + static const u8 rotate_facedir[24 * 4] = { // Table value = rotated facedir // Columns: 0, 90, 180, 270 degrees rotation around vertical axis // Rotation is anticlockwise as seen from above (+Y) @@ -221,8 +199,10 @@ void MapNode::rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot) 22, 21, 20, 23, 23, 22, 21, 20 }; - u16 index = param2 * 4 + rot; - param2 = rotate_facedir[index]; + u8 facedir = (param2 & 31) % 24; + u8 index = facedir * 4 + rot; + param2 &= ~31; + param2 |= rotate_facedir[index]; } else if (cpt2 == CPT2_WALLMOUNTED) { u8 wmountface = (param2 & 7); if (wmountface <= 1) diff --git a/src/mapnode.h b/src/mapnode.h index 271517391..7cc25c60c 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -236,7 +236,6 @@ struct MapNode v3s16 getWallMountedDir(INodeDefManager *nodemgr) const; void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot); - void rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot); /* Gets list of node boxes (used for rendering (NDT_NODEBOX)) diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp index ca915b7b6..a5ffb20b8 100644 --- a/src/mg_schematic.cpp +++ b/src/mg_schematic.cpp @@ -167,7 +167,7 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_pla vm->m_data[vi].param1 = 0; if (rot) - vm->m_data[vi].rotateAlongYAxisFull(m_ndef, rot); + vm->m_data[vi].rotateAlongYAxis(m_ndef, rot); } } y_map++; From 21944a0d3c5284f6bf1e61286ddbcc2ab2f1e2aa Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 26 Sep 2015 09:06:13 +0200 Subject: [PATCH 421/670] Add environment variable MINETEST_WORLD_PATH Also add PATH_DELIM for Windows compatibility. --- src/filesys.h | 2 ++ src/subgame.cpp | 46 ++++++++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/filesys.h b/src/filesys.h index 19fcbb673..cc6f43ec4 100644 --- a/src/filesys.h +++ b/src/filesys.h @@ -28,10 +28,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #define DIR_DELIM "\\" #define DIR_DELIM_CHAR '\\' #define FILESYS_CASE_INSENSITIVE 1 +#define PATH_DELIM ";" #else // POSIX #define DIR_DELIM "/" #define DIR_DELIM_CHAR '/' #define FILESYS_CASE_INSENSITIVE 0 +#define PATH_DELIM ":" #endif namespace fs diff --git a/src/subgame.cpp b/src/subgame.cpp index a3fdce15a..20f5116e2 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -63,15 +63,10 @@ struct GameFindPath {} }; -Strfnd getSubgamePathEnv() { - std::string sp; +std::string getSubgamePathEnv() +{ char *subgame_path = getenv("MINETEST_SUBGAME_PATH"); - - if(subgame_path) { - sp = std::string(subgame_path); - } - - return Strfnd(sp); + return subgame_path ? std::string(subgame_path) : ""; } SubgameSpec findSubgame(const std::string &id) @@ -82,10 +77,10 @@ SubgameSpec findSubgame(const std::string &id) std::string user = porting::path_user; std::vector find_paths; - Strfnd search_paths = getSubgamePathEnv(); + Strfnd search_paths(getSubgamePathEnv()); - while(!search_paths.atend()) { - std::string path = search_paths.next(":"); + while (!search_paths.atend()) { + std::string path = search_paths.next(PATH_DELIM); find_paths.push_back(GameFindPath( path + DIR_DELIM + id, false)); find_paths.push_back(GameFindPath( @@ -156,13 +151,12 @@ std::set getAvailableGameIds() gamespaths.insert(porting::path_share + DIR_DELIM + "games"); gamespaths.insert(porting::path_user + DIR_DELIM + "games"); - Strfnd search_paths = getSubgamePathEnv(); + Strfnd search_paths(getSubgamePathEnv()); - while(!search_paths.atend()) { - gamespaths.insert(search_paths.next(":")); - } + while (!search_paths.atend()) + gamespaths.insert(search_paths.next(PATH_DELIM)); - for(std::set::const_iterator i = gamespaths.begin(); + for (std::set::const_iterator i = gamespaths.begin(); i != gamespaths.end(); ++i){ std::vector dirlist = fs::GetDirListing(*i); for(u32 j=0; j getAvailableWorlds() { std::vector worlds; std::set worldspaths; + + Strfnd search_paths(getWorldPathEnv()); + + while (!search_paths.atend()) + worldspaths.insert(search_paths.next(PATH_DELIM)); + worldspaths.insert(porting::path_user + DIR_DELIM + "worlds"); - infostream<<"Searching worlds..."<::const_iterator i = worldspaths.begin(); - i != worldspaths.end(); ++i){ - infostream<<" In "<<(*i)<<": "<::const_iterator i = worldspaths.begin(); + i != worldspaths.end(); ++i) { + infostream << " In " << (*i) << ": " < dirvector = fs::GetDirListing(*i); for(u32 j=0; j Date: Tue, 29 Sep 2015 12:38:08 -0500 Subject: [PATCH 422/670] Add get_biome_id(biome_name) callback It returns the index used in mg->biomemap for a given biome name. The biomemap is useless without this unless you re-register all existing biomes, which could cause problems for anyone else trying to use biomemap. With this, you can quickly create a lookup table of ids and names. --- doc/lua_api.txt | 3 +++ src/script/lua_api/l_mapgen.cpp | 25 +++++++++++++++++++++++++ src/script/lua_api/l_mapgen.h | 4 ++++ 3 files changed, 32 insertions(+) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 5b6e55ef3..7b0f1e2aa 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1999,6 +1999,9 @@ and `minetest.auth_reload` call the authetification handler. * `get_gen_notify()`: returns a flagstring and a table with the deco_ids * `minetest.get_mapgen_object(objectname)` * Return requested mapgen object if available (see "Mapgen objects") +* `minetest.get_biome_id(biome_name)` + * Returns the biome id, as used in the biomemap Mapgen object, for a + given biome_name string. * `minetest.get_mapgen_params()` Returns mapgen parameters, a table containing `mgname`, `seed`, `chunksize`, `water_level`, and `flags`. * `minetest.set_mapgen_params(MapgenParams)` diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index dcb611f47..784ceabcc 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -450,6 +450,30 @@ size_t get_biome_list(lua_State *L, int index, /////////////////////////////////////////////////////////////////////////////// +// get_biome_id(biomename) +// returns the biome id used in biomemap +int ModApiMapgen::l_get_biome_id(lua_State *L) +{ + const char *biome_str = lua_tostring(L, 1); + if (!biome_str) + return 0; + + BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + + if (!bmgr) + return 0; + + Biome *biome = (Biome *) bmgr->getByName(biome_str); + + if (!biome || biome->index == OBJDEF_INVALID_INDEX) + return 0; + + lua_pushinteger(L, biome->index); + + return 1; +} + + // get_mapgen_object(objectname) // returns the requested object used during map generation int ModApiMapgen::l_get_mapgen_object(lua_State *L) @@ -1257,6 +1281,7 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) void ModApiMapgen::Initialize(lua_State *L, int top) { + API_FCT(get_biome_id); API_FCT(get_mapgen_object); API_FCT(get_mapgen_params); diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h index 7440d1285..4768f934d 100644 --- a/src/script/lua_api/l_mapgen.h +++ b/src/script/lua_api/l_mapgen.h @@ -24,6 +24,10 @@ with this program; if not, write to the Free Software Foundation, Inc., class ModApiMapgen : public ModApiBase { private: + // get_biome_id(biomename) + // returns the biome id used in biomemap + static int l_get_biome_id(lua_State *L); + // get_mapgen_object(objectname) // returns the requested object used during map generation static int l_get_mapgen_object(lua_State *L); From 20405edb06f44308aae760dc2f4dad5c61e0d30f Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Sat, 3 Oct 2015 13:19:58 -0400 Subject: [PATCH 423/670] Fix MinGW 32-bit build --- src/threading/semaphore.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/threading/semaphore.cpp b/src/threading/semaphore.cpp index 00332eaa0..77ceff509 100644 --- a/src/threading/semaphore.cpp +++ b/src/threading/semaphore.cpp @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UNUSED(expr) do { (void)(expr); } while (0) #ifdef _WIN32 + #include #define MAX_SEMAPHORE_COUNT LONG_MAX - 1 #else #include From b12bdcce348323247811b9a0299e2e9294991d13 Mon Sep 17 00:00:00 2001 From: Fernando Carmona Varo Date: Fri, 2 Oct 2015 21:18:40 +0200 Subject: [PATCH 424/670] Added minetest.wallmounted_to_dir --- builtin/game/item.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/builtin/game/item.lua b/builtin/game/item.lua index 0f10af8ee..df5bb070d 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -139,6 +139,19 @@ function core.dir_to_wallmounted(dir) end end +function core.wallmounted_to_dir(wallmounted) + -- table of dirs in wallmounted order + return ({[0] = {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}}) + + --indexed into by the wallmounted in question + [wallmounted] +end + function core.get_node_drops(nodename, toolname) local drop = ItemStack({name=nodename}):get_definition().drop if drop == nil then From f0cd5da687ca216b4bdd9abe7bc8038a679d3763 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 4 Oct 2015 02:50:04 -0400 Subject: [PATCH 425/670] Define and use limit constants for Irrlicht fixed-width types --- src/irrlichttypes.h | 15 +++++++++++++++ src/map.cpp | 2 +- src/mapgen.cpp | 2 +- src/mapgen_v5.cpp | 8 ++++---- src/mapgen_v6.cpp | 2 +- src/mapgen_v7.cpp | 8 ++++---- src/script/lua_api/l_mapgen.cpp | 2 +- src/script/lua_api/l_object.cpp | 2 +- src/server.cpp | 2 +- src/staticobject.cpp | 2 +- src/unittest/test_utilities.cpp | 2 +- 11 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/irrlichttypes.h b/src/irrlichttypes.h index bead64407..dedebd45b 100644 --- a/src/irrlichttypes.h +++ b/src/irrlichttypes.h @@ -48,4 +48,19 @@ using namespace irr; #endif #endif +#define S8_MIN (-0x7F - 1) +#define S16_MIN (-0x7FFF - 1) +#define S32_MIN (-0x7FFFFFFF - 1) +#define S64_MIN (-0x7FFFFFFFFFFFFFFF - 1) + +#define S8_MAX 0x7F +#define S16_MAX 0x7FFF +#define S32_MAX 0x7FFFFFFF +#define S64_MAX 0x7FFFFFFFFFFFFFFF + +#define U8_MAX 0xFF +#define U16_MAX 0xFFFF +#define U32_MAX 0xFFFFFFFF +#define U64_MAX 0xFFFFFFFFFFFFFFFF + #endif diff --git a/src/map.cpp b/src/map.cpp index fd796734e..e3cafd673 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1434,7 +1434,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks, beginSave(); // If there is no practical limit, we spare creation of mapblock_queue - if (max_loaded_blocks == (u32)-1) { + if (max_loaded_blocks == U32_MAX) { for (std::map::iterator si = m_sectors.begin(); si != m_sectors.end(); ++si) { MapSector *sector = si->second; diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 31d394fa4..a94b071c5 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -441,7 +441,7 @@ void MapgenParams::save(Settings &settings) const settings.setU64("seed", seed); settings.setS16("water_level", water_level); settings.setS16("chunksize", chunksize); - settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, (u32)-1); + settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, U32_MAX); settings.setNoiseParams("mg_biome_np_heat", np_biome_heat); settings.setNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend); settings.setNoiseParams("mg_biome_np_humidity", np_biome_humidity); diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index dbbd72936..d534249a5 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -160,7 +160,7 @@ void MapgenV5Params::readParams(const Settings *settings) void MapgenV5Params::writeParams(Settings *settings) const { - settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, (u32)-1); + settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, U32_MAX); settings->setNoiseParams("mgv5_np_filler_depth", np_filler_depth); settings->setNoiseParams("mgv5_np_factor", np_factor); @@ -429,7 +429,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) // If there is air or water above enable top/filler placement, otherwise force // nplaced to stone level by setting a number exceeding any possible filler depth. - u16 nplaced = (air_above || water_above) ? 0 : (u16)-1; + u16 nplaced = (air_above || water_above) ? 0 : U16_MAX; for (s16 y = node_max.Y; y >= node_min.Y; y--) { content_t c = vm->m_data[vi].getContent(); @@ -466,7 +466,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) // This is done by aborting the cycle of top/filler placement // immediately by forcing nplaced to stone level. if (c_below == CONTENT_AIR || c_below == c_water_source) - nplaced = (u16)-1; + nplaced = U16_MAX; if (nplaced < depth_top) { vm->m_data[vi] = MapNode(biome->c_top); @@ -491,7 +491,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) air_above = true; water_above = false; } else { // Possible various nodes overgenerated from neighbouring mapchunks - nplaced = (u16)-1; // Disable top/filler placement + nplaced = U16_MAX; // Disable top/filler placement air_above = false; water_above = false; } diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 8492adfd9..5a04a2d17 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -175,7 +175,7 @@ void MapgenV6Params::readParams(const Settings *settings) void MapgenV6Params::writeParams(Settings *settings) const { - settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, (u32)-1); + settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, U32_MAX); settings->setFloat("mgv6_freq_desert", freq_desert); settings->setFloat("mgv6_freq_beach", freq_beach); diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 92f3f49c4..7ed4bc516 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -181,7 +181,7 @@ void MapgenV7Params::readParams(const Settings *settings) void MapgenV7Params::writeParams(Settings *settings) const { - settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, (u32)-1); + settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, U32_MAX); settings->setNoiseParams("mgv7_np_terrain_base", np_terrain_base); settings->setNoiseParams("mgv7_np_terrain_alt", np_terrain_alt); @@ -636,7 +636,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) // If there is air or water above enable top/filler placement, otherwise force // nplaced to stone level by setting a number exceeding any possible filler depth. - u16 nplaced = (air_above || water_above) ? 0 : (u16)-1; + u16 nplaced = (air_above || water_above) ? 0 : U16_MAX; for (s16 y = node_max.Y; y >= node_min.Y; y--) { content_t c = vm->m_data[vi].getContent(); @@ -673,7 +673,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) // This is done by aborting the cycle of top/filler placement // immediately by forcing nplaced to stone level. if (c_below == CONTENT_AIR || c_below == c_water_source) - nplaced = (u16)-1; + nplaced = U16_MAX; if (nplaced < depth_top) { vm->m_data[vi] = MapNode(biome->c_top); @@ -698,7 +698,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) air_above = true; water_above = false; } else { // Possible various nodes overgenerated from neighbouring mapchunks - nplaced = (u16)-1; // Disable top/filler placement + nplaced = U16_MAX; // Disable top/filler placement air_above = false; water_above = false; } diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 784ceabcc..44af7892f 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -604,7 +604,7 @@ int ModApiMapgen::l_get_mapgen_params(lua_State *L) lua_pushinteger(L, params->chunksize); lua_setfield(L, -2, "chunksize"); - std::string flagstr = writeFlagString(params->flags, flagdesc_mapgen, (u32)-1); + std::string flagstr = writeFlagString(params->flags, flagdesc_mapgen, U32_MAX); lua_pushstring(L, flagstr.c_str()); lua_setfield(L, -2, "flags"); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 3ac8eeefb..2bd5299dc 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1187,7 +1187,7 @@ int ObjectRef::l_hud_add(lua_State *L) } u32 id = getServer(L)->hudAdd(player, elem); - if (id == (u32)-1) { + if (id == U32_MAX) { delete elem; return 0; } diff --git a/src/server.cpp b/src/server.cpp index fbdaa5918..b0f69f1c3 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -589,7 +589,7 @@ void Server::AsyncRunStep(bool initial_step) ScopeProfiler sp(g_profiler, "Server: map timer and unload"); m_env->getMap().timerUpdate(map_timer_and_unload_dtime, g_settings->getFloat("server_unload_unused_data_timeout"), - (u32)-1); + U32_MAX); } /* diff --git a/src/staticobject.cpp b/src/staticobject.cpp index e226f0b2e..d656b6221 100644 --- a/src/staticobject.cpp +++ b/src/staticobject.cpp @@ -50,7 +50,7 @@ void StaticObjectList::serialize(std::ostream &os) size_t count = m_stored.size() + m_active.size(); // Make sure it fits into u16, else it would get truncated and cause e.g. // issue #2610 (Invalid block data in database: unsupported NameIdMapping version). - if (count > (u16)-1) { + if (count > U16_MAX) { errorstream << "StaticObjectList::serialize(): " << "too many objects (" << count << ") in list, " << "not writing them to disk." << std::endl; diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index df90d37bd..3c000e760 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -282,7 +282,7 @@ void TestUtilities::testIsPowerOfTwo() UASSERT(is_power_of_two((1 << exponent)) == true); UASSERT(is_power_of_two((1 << exponent) + 1) == false); } - UASSERT(is_power_of_two((u32)-1) == false); + UASSERT(is_power_of_two(U32_MAX) == false); } void TestUtilities::testMyround() From 7b01b94c6bde1989e48208befff8595c141183e6 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 4 Oct 2015 02:53:52 -0400 Subject: [PATCH 426/670] Remove redundant code in player interact handler --- src/network/serverpackethandler.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index d89e30c8d..3ee2dd931 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1467,21 +1467,22 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) NOTE: This can be used in the future to check if somebody is cheating, by checking the timing. */ + MapNode n(CONTENT_IGNORE); bool pos_ok; - n = m_env->getMap().getNodeNoEx(p_under, &pos_ok); - if (pos_ok) - n = m_env->getMap().getNodeNoEx(p_under, &pos_ok); + n = m_env->getMap().getNodeNoEx(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); + m_emerge->enqueueBlockEmerge(pkt->getPeerId(), + getNodeBlockPos(p_above), false); } if (n.getContent() != CONTENT_IGNORE) m_script->node_on_punch(p_under, n, playersao, pointed); + // Cheat prevention playersao->noCheatDigStart(p_under); } @@ -1538,9 +1539,10 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) MapNode n = m_env->getMap().getNodeNoEx(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); + << " Adding block to emerge queue." + << std::endl; + m_emerge->enqueueBlockEmerge(pkt->getPeerId(), + getNodeBlockPos(p_above), false); } /* Cheat prevention */ From 1f9c5a4a7b15ab49e717d81162fe58e4202c0814 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 4 Oct 2015 15:32:17 -0400 Subject: [PATCH 427/670] doc: Update node callback documentation --- doc/lua_api.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 7b0f1e2aa..446b51959 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3219,14 +3219,17 @@ Definition tables }, on_construct = func(pos), --[[ - ^ Node constructor; always called after adding node + ^ Node constructor; called after adding node ^ Can set up metadata and stuff like that + ^ Not called for bulk node placement (i.e. schematics and VoxelManip) ^ default: nil ]] on_destruct = func(pos), --[[ - ^ Node destructor; always called before removing node + ^ Node destructor; called before removing node + ^ Not called for bulk node placement (i.e. schematics and VoxelManip) ^ default: nil ]] after_destruct = func(pos, oldnode), --[[ - ^ Node destructor; always called after removing node + ^ Node destructor; called after removing node + ^ Not called for bulk node placement (i.e. schematics and VoxelManip) ^ default: nil ]] after_place_node = func(pos, placer, itemstack, pointed_thing) --[[ From 0850d3bb930ac5e2cfd71a58fd49725e4c2a4c96 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 4 Oct 2015 02:54:25 -0400 Subject: [PATCH 428/670] Add emerge completion callback mechanism Major refactor of emerge.cpp and Map::init/finishBlockMake --- src/emerge.cpp | 746 +++++++++++++++++------------- src/emerge.h | 111 +++-- src/map.cpp | 265 +++-------- src/map.h | 8 +- src/mapgen.cpp | 21 +- src/script/lua_api/l_mainmenu.cpp | 45 +- 6 files changed, 624 insertions(+), 572 deletions(-) diff --git a/src/emerge.cpp b/src/emerge.cpp index e6bd52659..15f264c1a 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -20,77 +20,95 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "emerge.h" -#include "server.h" + #include #include -#include "threading/event.h" -#include "map.h" -#include "environment.h" + #include "util/container.h" #include "util/thread.h" -#include "constants.h" -#include "voxel.h" +#include "threading/event.h" + #include "config.h" -#include "mapblock.h" -#include "serverobject.h" -#include "settings.h" -#include "scripting_game.h" -#include "profiler.h" +#include "constants.h" +#include "environment.h" #include "log.h" -#include "nodedef.h" -#include "mg_biome.h" -#include "mg_ore.h" -#include "mg_decoration.h" -#include "mg_schematic.h" +#include "map.h" +#include "mapblock.h" #include "mapgen_v5.h" #include "mapgen_v6.h" #include "mapgen_v7.h" #include "mapgen_singlenode.h" +#include "mg_biome.h" +#include "mg_ore.h" +#include "mg_decoration.h" +#include "mg_schematic.h" +#include "nodedef.h" +#include "profiler.h" +#include "scripting_game.h" +#include "server.h" +#include "serverobject.h" +#include "settings.h" +#include "voxel.h" + struct MapgenDesc { const char *name; MapgenFactory *factory; }; -MapgenDesc reg_mapgens[] = { +class EmergeThread : public Thread { +public: + bool enable_mapgen_debug_info; + int id; + + EmergeThread(Server *server, int ethreadid); + ~EmergeThread(); + + void *run(); + void signal(); + + // Requires queue mutex held + bool pushBlock(v3s16 pos); + + void cancelPendingItems(); + + static void runCompletionCallbacks( + v3s16 pos, EmergeAction action, + const EmergeCallbackList &callbacks); + +private: + Server *m_server; + ServerMap *m_map; + EmergeManager *m_emerge; + Mapgen *m_mapgen; + + Event m_queue_event; + std::queue m_block_queue; + + bool popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata); + + EmergeAction getBlockOrStartGen( + v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *data); + MapBlock *finishGen(v3s16 pos, BlockMakeData *bmdata, + std::map *modified_blocks); + + friend class EmergeManager; +}; + +//// +//// Built-in mapgens +//// + +MapgenDesc g_reg_mapgens[] = { {"v5", new MapgenFactoryV5}, {"v6", new MapgenFactoryV6}, {"v7", new MapgenFactoryV7}, {"singlenode", new MapgenFactorySinglenode}, }; -class EmergeThread : public Thread -{ -public: - Server *m_server; - ServerMap *map; - EmergeManager *emerge; - Mapgen *mapgen; - bool enable_mapgen_debug_info; - int id; - - Event qevent; - std::queue blockqueue; - - EmergeThread(Server *server, int ethreadid): - m_server(server), - map(NULL), - emerge(NULL), - mapgen(NULL), - enable_mapgen_debug_info(false), - id(ethreadid) - { - name = "Emerge-" + itos(id); - } - - void *run(); - bool popBlockEmerge(v3s16 *pos, u8 *flags); - bool getBlockOrStartGen(v3s16 p, MapBlock **b, - BlockMakeData *data, bool allow_generate); -}; - - -/////////////////////////////// Emerge Manager //////////////////////////////// +//// +//// EmergeManager +//// EmergeManager::EmergeManager(IGameDef *gamedef) { @@ -104,11 +122,11 @@ EmergeManager::EmergeManager(IGameDef *gamedef) // Note that accesses to this variable are not synchronized. // This is because the *only* thread ever starting or stopping // EmergeThreads should be the ServerThread. - this->threads_active = false; + this->m_threads_active = false; - mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); + enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); - // if unspecified, leave a proc for the main thread and one for + // If unspecified, leave a proc for the main thread and one for // some other misc thread s16 nthreads = 0; if (!g_settings->getS16NoEx("num_emerge_threads", nthreads)) @@ -116,22 +134,22 @@ EmergeManager::EmergeManager(IGameDef *gamedef) if (nthreads < 1) nthreads = 1; - qlimit_total = g_settings->getU16("emergequeue_limit_total"); - if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", qlimit_diskonly)) - qlimit_diskonly = nthreads * 5 + 1; - if (!g_settings->getU16NoEx("emergequeue_limit_generate", qlimit_generate)) - qlimit_generate = nthreads + 1; + m_qlimit_total = g_settings->getU16("emergequeue_limit_total"); + 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)) + m_qlimit_generate = nthreads + 1; // don't trust user input for something very important like this - if (qlimit_total < 1) - qlimit_total = 1; - if (qlimit_diskonly < 1) - qlimit_diskonly = 1; - if (qlimit_generate < 1) - qlimit_generate = 1; + if (m_qlimit_total < 1) + m_qlimit_total = 1; + if (m_qlimit_diskonly < 1) + m_qlimit_diskonly = 1; + if (m_qlimit_generate < 1) + m_qlimit_generate = 1; for (s16 i = 0; i < nthreads; i++) - emergethread.push_back(new EmergeThread((Server *) gamedef, i)); + m_threads.push_back(new EmergeThread((Server *)gamedef, i)); infostream << "EmergeManager: using " << nthreads << " threads" << std::endl; } @@ -139,27 +157,25 @@ EmergeManager::EmergeManager(IGameDef *gamedef) EmergeManager::~EmergeManager() { - for (u32 i = 0; i != emergethread.size(); i++) { - if (threads_active) { - emergethread[i]->stop(); - emergethread[i]->qevent.signal(); - emergethread[i]->wait(); + for (u32 i = 0; i != m_threads.size(); i++) { + EmergeThread *thread = m_threads[i]; + + if (m_threads_active) { + thread->stop(); + thread->signal(); + thread->wait(); } - delete emergethread[i]; - delete mapgen[i]; + + delete thread; + delete m_mapgens[i]; } - emergethread.clear(); - mapgen.clear(); delete biomemgr; delete oremgr; delete decomgr; delete schemmgr; - if (params.sparams) { - delete params.sparams; - params.sparams = NULL; - } + delete params.sparams; } @@ -171,33 +187,37 @@ void EmergeManager::loadMapgenParams() void EmergeManager::initMapgens() { - if (mapgen.size()) + if (m_mapgens.size()) return; + MapgenFactory *mgfactory = getMapgenFactory(params.mg_name); + if (!mgfactory) { + errorstream << "EmergeManager: mapgen " << params.mg_name << + " not registered; falling back to " << DEFAULT_MAPGEN << std::endl; + + params.mg_name = DEFAULT_MAPGEN; + + mgfactory = getMapgenFactory(params.mg_name); + FATAL_ERROR_IF(mgfactory == NULL, "Couldn't use any mapgen!"); + } + if (!params.sparams) { - params.sparams = createMapgenParams(params.mg_name); - if (!params.sparams) { - params.mg_name = DEFAULT_MAPGEN; - params.sparams = createMapgenParams(params.mg_name); - assert(params.sparams); - } + params.sparams = mgfactory->createMapgenParams(); params.sparams->readParams(g_settings); } - // Create the mapgens - for (u32 i = 0; i != emergethread.size(); i++) { - Mapgen *mg = createMapgen(params.mg_name, i, ¶ms); - assert(mg); - mapgen.push_back(mg); + for (u32 i = 0; i != m_threads.size(); i++) { + Mapgen *mg = mgfactory->createMapgen(i, ¶ms, this); + m_mapgens.push_back(mg); } } Mapgen *EmergeManager::getCurrentMapgen() { - for (u32 i = 0; i != emergethread.size(); i++) { - if (emergethread[i]->isSameThread()) - return emergethread[i]->mapgen; + for (u32 i = 0; i != m_threads.size(); i++) { + if (m_threads[i]->isSameThread()) + return m_threads[i]->m_mapgen; } return NULL; @@ -206,94 +226,81 @@ Mapgen *EmergeManager::getCurrentMapgen() void EmergeManager::startThreads() { - if (threads_active) + if (m_threads_active) return; - for (u32 i = 0; i != emergethread.size(); i++) - emergethread[i]->start(); + for (u32 i = 0; i != m_threads.size(); i++) + m_threads[i]->start(); - threads_active = true; + m_threads_active = true; } void EmergeManager::stopThreads() { - if (!threads_active) + if (!m_threads_active) return; // Request thread stop in parallel - for (u32 i = 0; i != emergethread.size(); i++) { - emergethread[i]->stop(); - emergethread[i]->qevent.signal(); + for (u32 i = 0; i != m_threads.size(); i++) { + m_threads[i]->stop(); + m_threads[i]->signal(); } // Then do the waiting for each - for (u32 i = 0; i != emergethread.size(); i++) - emergethread[i]->wait(); + for (u32 i = 0; i != m_threads.size(); i++) + m_threads[i]->wait(); - threads_active = false; + m_threads_active = false; } -bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, - bool allow_generate, bool force_queue_block) +bool EmergeManager::enqueueBlockEmerge( + u16 peer_id, + v3s16 blockpos, + bool allow_generate, + bool ignore_queue_limits) { - std::map::const_iterator iter; - BlockEmergeData *bedata; - u16 count_global = 0; - u16 count_peer = 0; - u8 flags = 0; - int idx = 0; - + u16 flags = 0; if (allow_generate) - flags |= BLOCK_EMERGE_ALLOWGEN; + flags |= BLOCK_EMERGE_ALLOW_GEN; + if (ignore_queue_limits) + flags |= BLOCK_EMERGE_FORCE_QUEUE; + + return enqueueBlockEmergeEx(blockpos, peer_id, flags, NULL, NULL); +} + + +bool EmergeManager::enqueueBlockEmergeEx( + v3s16 blockpos, + u16 peer_id, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param) +{ + EmergeThread *thread = NULL; { - MutexAutoLock queuelock(queuemutex); + MutexAutoLock queuelock(m_queue_mutex); - count_global = blocks_enqueued.size(); - count_peer = peer_queue_count[peer_id]; + if (!pushBlockEmergeData(blockpos, peer_id, flags, + callback, callback_param)) + return false; - if (!force_queue_block) { - if (count_global >= qlimit_total) - return false; - - u16 qlimit_peer = allow_generate ? qlimit_generate : qlimit_diskonly; - if (count_peer >= qlimit_peer) - return false; - } - - iter = blocks_enqueued.find(p); - if (iter != blocks_enqueued.end()) { - bedata = iter->second; - bedata->flags |= flags; - return true; - } - - bedata = new BlockEmergeData; - bedata->flags = flags; - bedata->peer_requested = peer_id; - blocks_enqueued.insert(std::make_pair(p, bedata)); - - peer_queue_count[peer_id] = count_peer + 1; - - // insert into the EmergeThread queue with the least items - int lowestitems = emergethread[0]->blockqueue.size(); - for (u32 i = 1; i != emergethread.size(); i++) { - int nitems = emergethread[i]->blockqueue.size(); - if (nitems < lowestitems) { - idx = i; - lowestitems = nitems; - } - } - - emergethread[idx]->blockqueue.push(p); + thread = getOptimalThread(); + thread->pushBlock(blockpos); } - emergethread[idx]->qevent.signal(); + + thread->signal(); return true; } + +// +// Mapgen-related helper functions +// + v3s16 EmergeManager::getContainingChunk(v3s16 blockpos) { return getContainingChunk(blockpos, params.chunksize); @@ -312,129 +319,297 @@ v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize) int EmergeManager::getGroundLevelAtPoint(v2s16 p) { - if (mapgen.size() == 0 || !mapgen[0]) { + if (m_mapgens.size() == 0 || !m_mapgens[0]) { errorstream << "EmergeManager: getGroundLevelAtPoint() called" - " before mapgen initialized" << std::endl; + " before mapgen init" << std::endl; return 0; } - return mapgen[0]->getGroundLevelAtPoint(p); + return m_mapgens[0]->getGroundLevelAtPoint(p); } bool EmergeManager::isBlockUnderground(v3s16 blockpos) { - /* +#if 0 v2s16 p = v2s16((blockpos.X * MAP_BLOCKSIZE) + MAP_BLOCKSIZE / 2, (blockpos.Y * MAP_BLOCKSIZE) + MAP_BLOCKSIZE / 2); int ground_level = getGroundLevelAtPoint(p); return blockpos.Y * (MAP_BLOCKSIZE + 1) <= min(water_level, ground_level); - */ +#endif - //yuck, but then again, should i bother being accurate? - //the height of the nodes in a single block is quite variable + // Use a simple heuristic; the above method is wildly inaccurate anyway. return blockpos.Y * (MAP_BLOCKSIZE + 1) <= params.water_level; } -void EmergeManager::getMapgenNames(std::list &mgnames) +void EmergeManager::getMapgenNames(std::vector *mgnames) { - for (u32 i = 0; i != ARRLEN(reg_mapgens); i++) - mgnames.push_back(reg_mapgens[i].name); + for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) + mgnames->push_back(g_reg_mapgens[i].name); } -Mapgen *EmergeManager::createMapgen(const std::string &mgname, int mgid, - MapgenParams *mgparams) +MapgenFactory *EmergeManager::getMapgenFactory(const std::string &mgname) { - u32 i; - for (i = 0; i != ARRLEN(reg_mapgens) && mgname != reg_mapgens[i].name; i++); - if (i == ARRLEN(reg_mapgens)) { - errorstream << "EmergeManager; mapgen " << mgname << - " not registered" << std::endl; - return NULL; + for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) { + if (mgname == g_reg_mapgens[i].name) + return g_reg_mapgens[i].factory; } - MapgenFactory *mgfactory = reg_mapgens[i].factory; - return mgfactory->createMapgen(mgid, mgparams, this); + return NULL; } -MapgenSpecificParams *EmergeManager::createMapgenParams(const std::string &mgname) +bool EmergeManager::pushBlockEmergeData( + v3s16 pos, + u16 peer_requested, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param) { - u32 i; - for (i = 0; i < ARRLEN(reg_mapgens) && mgname != reg_mapgens[i].name; i++); - if (i == ARRLEN(reg_mapgens)) { - errorstream << "EmergeManager: Mapgen " << mgname << - " not registered" << std::endl; - return NULL; + u16 &count_peer = m_peer_queue_count[peer_requested]; + + if ((flags & BLOCK_EMERGE_FORCE_QUEUE) == 0) { + if (m_blocks_enqueued.size() >= m_qlimit_total) + return false; + + if (peer_requested != PEER_ID_INEXISTENT) { + u16 qlimit_peer = (flags & BLOCK_EMERGE_ALLOW_GEN) ? + m_qlimit_generate : m_qlimit_diskonly; + if (count_peer >= qlimit_peer) + return false; + } } - MapgenFactory *mgfactory = reg_mapgens[i].factory; - return mgfactory->createMapgenParams(); -} + std::pair::iterator, bool> findres; + findres = m_blocks_enqueued.insert(std::make_pair(pos, BlockEmergeData())); + BlockEmergeData &bedata = findres.first->second; + bool update_existing = !findres.second; -////////////////////////////// Emerge Thread ////////////////////////////////// + if (callback) + bedata.callbacks.push_back(std::make_pair(callback, callback_param)); -bool EmergeThread::popBlockEmerge(v3s16 *pos, u8 *flags) -{ - std::map::iterator iter; - MutexAutoLock queuelock(emerge->queuemutex); + if (update_existing) { + bedata.flags |= flags; + } else { + bedata.flags = flags; + bedata.peer_requested = peer_requested; - if (blockqueue.empty()) - return false; - v3s16 p = blockqueue.front(); - blockqueue.pop(); - - *pos = p; - - iter = emerge->blocks_enqueued.find(p); - if (iter == emerge->blocks_enqueued.end()) - return false; //uh oh, queue and map out of sync!! - - BlockEmergeData *bedata = iter->second; - *flags = bedata->flags; - - emerge->peer_queue_count[bedata->peer_requested]--; - - delete bedata; - emerge->blocks_enqueued.erase(iter); + count_peer++; + } return true; } -bool EmergeThread::getBlockOrStartGen(v3s16 p, MapBlock **b, - BlockMakeData *data, bool allow_gen) +bool EmergeManager::popBlockEmergeData( + v3s16 pos, + BlockEmergeData *bedata) +{ + std::map::iterator it; + std::map::iterator it2; + + it = m_blocks_enqueued.find(pos); + if (it == m_blocks_enqueued.end()) + return false; + + *bedata = it->second; + + it2 = m_peer_queue_count.find(bedata->peer_requested); + if (it2 == m_peer_queue_count.end()) + return false; + + u16 &count_peer = it2->second; + assert(count_peer != 0); + count_peer--; + + m_blocks_enqueued.erase(it); + + return true; +} + + +EmergeThread *EmergeManager::getOptimalThread() +{ + size_t nthreads = m_threads.size(); + + FATAL_ERROR_IF(nthreads == 0, "No emerge threads!"); + + size_t index = 0; + size_t nitems_lowest = m_threads[0]->m_block_queue.size(); + + for (size_t i = 1; i < nthreads; i++) { + size_t nitems = m_threads[i]->m_block_queue.size(); + if (nitems < nitems_lowest) { + index = i; + nitems_lowest = nitems; + } + } + + return m_threads[index]; +} + + +//// +//// EmergeThread +//// + +EmergeThread::EmergeThread(Server *server, int ethreadid) : + enable_mapgen_debug_info(false), + id(ethreadid), + m_server(server), + m_map(NULL), + m_emerge(NULL), + m_mapgen(NULL) +{ + name = "Emerge-" + itos(ethreadid); +} + + +EmergeThread::~EmergeThread() +{ + //cancelPendingItems(); +} + + +void EmergeThread::signal() +{ + m_queue_event.signal(); +} + + +bool EmergeThread::pushBlock(v3s16 pos) +{ + m_block_queue.push(pos); + return true; +} + + +void EmergeThread::cancelPendingItems() +{ + MutexAutoLock queuelock(m_emerge->m_queue_mutex); + + while (!m_block_queue.empty()) { + BlockEmergeData bedata; + v3s16 pos; + + pos = m_block_queue.front(); + m_block_queue.pop(); + + m_emerge->popBlockEmergeData(pos, &bedata); + + runCompletionCallbacks(pos, EMERGE_CANCELLED, bedata.callbacks); + } +} + + +void EmergeThread::runCompletionCallbacks( + v3s16 pos, + EmergeAction action, + const EmergeCallbackList &callbacks) +{ + for (size_t i = 0; i != callbacks.size(); i++) { + EmergeCompletionCallback callback; + void *param; + + callback = callbacks[i].first; + param = callbacks[i].second; + + callback(pos, action, param); + } +} + + +bool EmergeThread::popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata) +{ + MutexAutoLock queuelock(m_emerge->m_queue_mutex); + + if (m_block_queue.empty()) + return false; + + *pos = m_block_queue.front(); + m_block_queue.pop(); + + m_emerge->popBlockEmergeData(*pos, bedata); + + return true; +} + + +EmergeAction EmergeThread::getBlockOrStartGen( + v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *bmdata) { - v2s16 p2d(p.X, p.Z); - //envlock: usually takes <=1ms, sometimes 90ms or ~400ms to acquire MutexAutoLock envlock(m_server->m_env_mutex); - // Load sector if it isn't loaded - if (map->getSectorNoGenerateNoEx(p2d) == NULL) - map->loadSectorMeta(p2d); + // 1). Attempt to fetch block from memory + *block = m_map->getBlockNoCreateNoEx(pos); + if (*block && !(*block)->isDummy() && (*block)->isGenerated()) + return EMERGE_FROM_MEMORY; - // Attempt to load block - MapBlock *block = map->getBlockNoCreateNoEx(p); - if (!block || block->isDummy() || !block->isGenerated()) { - EMERGE_DBG_OUT("not in memory, attempting to load from disk"); - block = map->loadBlock(p); - if (block && block->isGenerated()) - map->prepareBlock(block); + // 2). Attempt to load block from disk + *block = m_map->loadBlock(pos); + if (*block && (*block)->isGenerated()) + return EMERGE_FROM_DISK; + + // 3). Attempt to start generation + if (allow_gen && m_map->initBlockMake(pos, bmdata)) + return EMERGE_GENERATED; + + // All attempts failed; cancel this block emerge + return EMERGE_CANCELLED; +} + + +MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata, + std::map *modified_blocks) +{ + MutexAutoLock envlock(m_server->m_env_mutex); + ScopeProfiler sp(g_profiler, + "EmergeThread: after Mapgen::makeChunk", SPT_AVG); + + /* + Perform post-processing on blocks (invalidate lighting, queue liquid + transforms, etc.) to finish block make + */ + m_map->finishBlockMake(bmdata, modified_blocks); + + MapBlock *block = m_map->getBlockNoCreateNoEx(pos); + if (!block) { + errorstream << "EmergeThread::finishGen: Couldn't grab block we " + "just generated: " << PP(pos) << std::endl; + return NULL; } - // If could not load and allowed to generate, - // start generation inside this same envlock - if (allow_gen && (block == NULL || !block->isGenerated())) { - EMERGE_DBG_OUT("generating"); - *b = block; - return map->initBlockMake(data, p); + v3s16 minp = bmdata->blockpos_min * MAP_BLOCKSIZE; + v3s16 maxp = bmdata->blockpos_max * MAP_BLOCKSIZE + + v3s16(1,1,1) * (MAP_BLOCKSIZE - 1); + + // Ignore map edit events, they will not need to be sent + // to anybody because the block hasn't been sent to anybody + MapEditEventAreaIgnorer ign( + &m_server->m_ignore_map_edit_events_area, + VoxelArea(minp, maxp)); + + /* + Run Lua on_generated callbacks + */ + try { + m_server->getScriptIface()->environment_OnGenerated( + minp, maxp, m_mapgen->blockseed); + } catch (LuaError &e) { + m_server->setAsyncFatalError("Lua: " + std::string(e.what())); } - *b = block; - return false; + EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); + + /* + Activate the block + */ + m_server->m_env->activateBlock(block, 0); + + return block; } @@ -443,108 +618,68 @@ void *EmergeThread::run() DSTACK(__FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER - v3s16 last_tried_pos(-32768,-32768,-32768); // For error output - v3s16 p; - u8 flags = 0; + v3s16 pos; - map = (ServerMap *)&(m_server->m_env->getMap()); - emerge = m_server->m_emerge; - mapgen = emerge->mapgen[id]; - enable_mapgen_debug_info = emerge->mapgen_debug_info; + m_map = (ServerMap *)&(m_server->m_env->getMap()); + m_emerge = m_server->m_emerge; + m_mapgen = m_emerge->m_mapgens[id]; + enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; - while (!stopRequested()) try { - if (!popBlockEmerge(&p, &flags)) { - qevent.wait(); + while (!stopRequested()) { + std::map modified_blocks; + BlockEmergeData bedata; + BlockMakeData bmdata; + EmergeAction action; + MapBlock *block; + + if (!popBlockEmerge(&pos, &bedata)) { + m_queue_event.wait(); continue; } - last_tried_pos = p; - if (blockpos_over_limit(p)) + if (blockpos_over_limit(pos)) continue; - bool allow_generate = flags & BLOCK_EMERGE_ALLOWGEN; - EMERGE_DBG_OUT("p=" PP(p) " allow_generate=" << allow_generate); + bool allow_gen = bedata.flags & BLOCK_EMERGE_ALLOW_GEN; + EMERGE_DBG_OUT("pos=" PP(pos) " allow_gen=" << allow_gen); - /* - Try to fetch block from memory or disk. - If not found and asked to generate, initialize generator. - */ - BlockMakeData data; - MapBlock *block = NULL; - std::map modified_blocks; - - if (getBlockOrStartGen(p, &block, &data, allow_generate) && mapgen) { + action = getBlockOrStartGen(pos, allow_gen, &block, &bmdata); + if (action == EMERGE_GENERATED) { { - ScopeProfiler sp(g_profiler, "EmergeThread: Mapgen::makeChunk", SPT_AVG); + ScopeProfiler sp(g_profiler, + "EmergeThread: Mapgen::makeChunk", SPT_AVG); TimeTaker t("mapgen::make_block()"); - mapgen->makeChunk(&data); + m_mapgen->makeChunk(&bmdata); if (enable_mapgen_debug_info == false) t.stop(true); // Hide output } - { - //envlock: usually 0ms, but can take either 30 or 400ms to acquire - MutexAutoLock envlock(m_server->m_env_mutex); - ScopeProfiler sp(g_profiler, "EmergeThread: after " - "Mapgen::makeChunk (envlock)", SPT_AVG); - - map->finishBlockMake(&data, modified_blocks); - - block = map->getBlockNoCreateNoEx(p); - if (block) { - /* - Do some post-generate stuff - */ - v3s16 minp = data.blockpos_min * MAP_BLOCKSIZE; - v3s16 maxp = data.blockpos_max * MAP_BLOCKSIZE + - v3s16(1,1,1) * (MAP_BLOCKSIZE - 1); - - // Ignore map edit events, they will not need to be sent - // to anybody because the block hasn't been sent to anybody - MapEditEventAreaIgnorer - ign(&m_server->m_ignore_map_edit_events_area, - VoxelArea(minp, maxp)); - try { // takes about 90ms with -O1 on an e3-1230v2 - m_server->getScriptIface()->environment_OnGenerated( - minp, maxp, mapgen->blockseed); - } catch (LuaError &e) { - m_server->setAsyncFatalError("Lua: " + std::string(e.what())); - } - - EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); - - m_server->m_env->activateBlock(block, 0); - } - } + block = finishGen(pos, &bmdata, &modified_blocks); } - /* - Set sent status of modified blocks on clients - */ - // Add the originally fetched block to the modified list + runCompletionCallbacks(pos, action, bedata.callbacks); + if (block) - modified_blocks[p] = block; + modified_blocks[pos] = block; - if (modified_blocks.size() > 0) { + if (modified_blocks.size() > 0) m_server->SetBlocksNotSent(modified_blocks); - } } - catch (VersionMismatchException &e) { + } catch (VersionMismatchException &e) { std::ostringstream err; - err << "World data version mismatch in MapBlock " << PP(last_tried_pos) << std::endl + err << "World data version mismatch in MapBlock " << PP(pos) << std::endl << "----" << std::endl << "\"" << e.what() << "\"" << std::endl << "See debug.txt." << std::endl << "World probably saved by a newer version of " PROJECT_NAME_C "." << std::endl; m_server->setAsyncFatalError(err.str()); - } - catch (SerializationError &e) { + } catch (SerializationError &e) { std::ostringstream err; - err << "Invalid data in MapBlock " << PP(last_tried_pos) << std::endl + err << "Invalid data in MapBlock " << PP(pos) << std::endl << "----" << std::endl << "\"" << e.what() << "\"" << std::endl << "See debug.txt." << std::endl @@ -553,23 +688,6 @@ void *EmergeThread::run() m_server->setAsyncFatalError(err.str()); } - { - MutexAutoLock queuelock(emerge->queuemutex); - while (!blockqueue.empty()) - { - v3s16 p = blockqueue.front(); - blockqueue.pop(); - - std::map::iterator iter; - iter = emerge->blocks_enqueued.find(p); - if (iter == emerge->blocks_enqueued.end()) - continue; //uh oh, queue and map out of sync!! - - BlockEmergeData *bedata = iter->second; - delete bedata; - } - } - END_DEBUG_EXCEPTION_HANDLER(errorstream) return NULL; } diff --git a/src/emerge.h b/src/emerge.h index 47648a17a..5526a4c91 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -26,13 +26,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" // for MapgenParams #include "map.h" -#define BLOCK_EMERGE_ALLOWGEN (1<<0) +#define BLOCK_EMERGE_ALLOW_GEN (1 << 0) +#define BLOCK_EMERGE_FORCE_QUEUE (1 << 1) -#define EMERGE_DBG_OUT(x) \ - do { \ - if (enable_mapgen_debug_info) \ - infostream << "EmergeThread: " x << std::endl; \ - } while (0) +#define EMERGE_DBG_OUT(x) do { \ + if (enable_mapgen_debug_info) \ + infostream << "EmergeThread: " x << std::endl; \ +} while (0) class EmergeThread; class INodeDefManager; @@ -43,6 +43,7 @@ class OreManager; class DecorationManager; class SchematicManager; +// Structure containing inputs/outputs for chunk generation struct BlockMakeData { MMVManip *vmanip; u64 seed; @@ -61,64 +62,106 @@ struct BlockMakeData { ~BlockMakeData() { delete vmanip; } }; +// Result from processing an item on the emerge queue +enum EmergeAction { + EMERGE_CANCELLED, + EMERGE_ERRORED, + EMERGE_FROM_MEMORY, + EMERGE_FROM_DISK, + EMERGE_GENERATED, +}; + +// Callback +typedef void (*EmergeCompletionCallback)( + v3s16 blockpos, EmergeAction action, void *param); + +typedef std::vector< + std::pair< + EmergeCompletionCallback, + void * + > +> EmergeCallbackList; + struct BlockEmergeData { u16 peer_requested; - u8 flags; + u16 flags; + EmergeCallbackList callbacks; }; class EmergeManager { public: INodeDefManager *ndef; + bool enable_mapgen_debug_info; - std::vector mapgen; - std::vector emergethread; - - bool threads_active; - - //settings - MapgenParams params; - bool mapgen_debug_info; - u16 qlimit_total; - u16 qlimit_diskonly; - u16 qlimit_generate; - + // Generation Notify u32 gen_notify_on; std::set gen_notify_on_deco_ids; - //// Block emerge queue data structures - Mutex queuemutex; - std::map blocks_enqueued; - std::map peer_queue_count; + // Map generation parameters + MapgenParams params; - //// Managers of map generation-related components + // Managers of various map generation-related components BiomeManager *biomemgr; OreManager *oremgr; DecorationManager *decomgr; SchematicManager *schemmgr; - //// Methods + // Methods EmergeManager(IGameDef *gamedef); ~EmergeManager(); void loadMapgenParams(); - static MapgenSpecificParams *createMapgenParams(const std::string &mgname); void initMapgens(); - Mapgen *getCurrentMapgen(); - Mapgen *createMapgen(const std::string &mgname, int mgid, - MapgenParams *mgparams); - static void getMapgenNames(std::list &mgnames); + void startThreads(); void stopThreads(); - bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate, - bool force_queue_block=false); + + bool enqueueBlockEmerge( + u16 peer_id, + v3s16 blockpos, + bool allow_generate, + bool ignore_queue_limits=false); + + bool enqueueBlockEmergeEx( + v3s16 blockpos, + u16 peer_id, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param); v3s16 getContainingChunk(v3s16 blockpos); - static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); - // mapgen helper methods + Mapgen *getCurrentMapgen(); + + // Mapgen helpers methods Biome *getBiomeAtPoint(v3s16 p); int getGroundLevelAtPoint(v2s16 p); bool isBlockUnderground(v3s16 blockpos); + + static MapgenFactory *getMapgenFactory(const std::string &mgname); + static void getMapgenNames(std::vector *mgnames); + static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); + +private: + std::vector m_mapgens; + std::vector m_threads; + bool m_threads_active; + + Mutex m_queue_mutex; + std::map m_blocks_enqueued; + std::map m_peer_queue_count; + + u16 m_qlimit_total; + u16 m_qlimit_diskonly; + u16 m_qlimit_generate; + + // Requires m_queue_mutex held + EmergeThread *getOptimalThread(); + bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags, + EmergeCompletionCallback callback, void *callback_param); + bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata); + + friend class EmergeThread; }; #endif diff --git a/src/map.cpp b/src/map.cpp index e3cafd673..424683d60 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2254,70 +2254,51 @@ s16 ServerMap::getWaterLevel() return m_emerge->params.water_level; } -bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) +bool ServerMap::initBlockMake(v3s16 blockpos, BlockMakeData *data) { - bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info; - EMERGE_DBG_OUT("initBlockMake(): " PP(blockpos) " - " PP(blockpos)); - s16 csize = m_emerge->params.chunksize; - v3s16 blockpos_min = EmergeManager::getContainingChunk(blockpos, csize); - v3s16 blockpos_max = blockpos_min + v3s16(1, 1, 1) * (csize - 1); + v3s16 bpmin = EmergeManager::getContainingChunk(blockpos, csize); + v3s16 bpmax = bpmin + v3s16(1, 1, 1) * (csize - 1); - v3s16 extra_borders(1,1,1); + bool enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; + EMERGE_DBG_OUT("initBlockMake(): " PP(bpmin) " - " PP(bpmax)); + + v3s16 extra_borders(1, 1, 1); + v3s16 full_bpmin = bpmin - extra_borders; + v3s16 full_bpmax = bpmax + extra_borders; // Do nothing if not inside limits (+-1 because of neighbors) - if(blockpos_over_limit(blockpos_min - extra_borders) || - blockpos_over_limit(blockpos_max + extra_borders)) + if (blockpos_over_limit(full_bpmin) || + blockpos_over_limit(full_bpmax)) return false; data->seed = m_emerge->params.seed; - data->blockpos_min = blockpos_min; - data->blockpos_max = blockpos_max; + data->blockpos_min = bpmin; + data->blockpos_max = bpmax; data->blockpos_requested = blockpos; data->nodedef = m_gamedef->ndef(); /* Create the whole area of this and the neighboring blocks */ - { - //TimeTaker timer("initBlockMake() create area"); + for (s16 x = full_bpmin.X; x <= full_bpmax.X; x++) + for (s16 z = full_bpmin.Z; z <= full_bpmax.Z; z++) { + v2s16 sectorpos(x, z); + // Sector metadata is loaded from disk if not already loaded. + ServerMapSector *sector = createSector(sectorpos); + FATAL_ERROR_IF(sector == NULL, "createSector() failed"); - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - { - v2s16 sectorpos(x, z); - // Sector metadata is loaded from disk if not already loaded. - ServerMapSector *sector = createSector(sectorpos); - FATAL_ERROR_IF(sector == NULL, "createSector() failed"); - (void) sector; + for (s16 y = full_bpmin.Y; y <= full_bpmax.Y; y++) { + v3s16 p(x, y, z); - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x,y,z); - //MapBlock *block = createBlock(p); - // 1) get from memory, 2) load from disk - MapBlock *block = emergeBlock(p, false); - // 3) create a blank one - if(block == NULL) - { - block = createBlock(p); + MapBlock *block = emergeBlock(p, false); + if (block == NULL) { + block = createBlock(p); - /* - Block gets sunlight if this is true. - - Refer to the map generator heuristics. - */ - bool ug = m_emerge->isBlockUnderground(p); - block->setIsUnderground(ug); - } - - // Lighting will not be valid after make_chunk is called - block->setLightingExpired(true); - // Lighting will be calculated - //block->setLightingExpired(false); + // Block gets sunlight if this is true. + // Refer to the map generator heuristics. + bool ug = m_emerge->isBlockUnderground(p); + block->setIsUnderground(ug); } } } @@ -2329,21 +2310,14 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) neighboring blocks */ - // The area that contains this block and it's neighbors - v3s16 bigarea_blocks_min = blockpos_min - extra_borders; - v3s16 bigarea_blocks_max = blockpos_max + extra_borders; - data->vmanip = new MMVManip(this); - //data->vmanip->setMap(this); + data->vmanip->initialEmerge(full_bpmin, full_bpmax); - // Add the area - { - //TimeTaker timer("initBlockMake() initialEmerge"); - data->vmanip->initialEmerge(bigarea_blocks_min, bigarea_blocks_max); - } - - // Ensure none of the blocks to be generated were marked as containing CONTENT_IGNORE -/* for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) { + // Note: we may need this again at some point. +#if 0 + // Ensure none of the blocks to be generated were marked as + // containing CONTENT_IGNORE + for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) { for (s16 y = blockpos_min.Y; y <= blockpos_max.Y; y++) { for (s16 x = blockpos_min.X; x <= blockpos_max.X; x++) { core::map::Node *n; @@ -2355,124 +2329,62 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) n->setValue(flags); } } - }*/ + } +#endif // Data is ready now. return true; } void ServerMap::finishBlockMake(BlockMakeData *data, - std::map &changed_blocks) + std::map *changed_blocks) { - v3s16 blockpos_min = data->blockpos_min; - v3s16 blockpos_max = data->blockpos_max; - v3s16 blockpos_requested = data->blockpos_requested; - /*infostream<<"finishBlockMake(): ("<blockpos_min; + v3s16 bpmax = data->blockpos_max; - v3s16 extra_borders(1,1,1); + v3s16 extra_borders(1, 1, 1); + v3s16 full_bpmin = bpmin - extra_borders; + v3s16 full_bpmax = bpmax + extra_borders; - bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info; + bool enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; + EMERGE_DBG_OUT("finishBlockMake(): " PP(bpmin) " - " PP(bpmax)); - /*infostream<<"Resulting vmanip:"<vmanip.print(infostream);*/ + /* + Set lighting to non-expired state in all of them. + This is cheating, but it is not fast enough if all of them + would actually be updated. + */ + for (s16 x = full_bpmin.X; x <= full_bpmax.X; x++) + for (s16 z = full_bpmin.Z; z <= full_bpmax.Z; z++) + for (s16 y = full_bpmin.Y; y <= full_bpmax.Y; y++) { + MapBlock *block = emergeBlock(v3s16(x, y, z), false); + if (!block) + continue; - // Make sure affected blocks are loaded - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x, y, z); - // Load from disk if not already in memory - emergeBlock(p, false); + block->setLightingExpired(false); } /* Blit generated stuff to map NOTE: blitBackAll adds nearly everything to changed_blocks */ - { - // 70ms @cs=8 - //TimeTaker timer("finishBlockMake() blitBackAll"); - data->vmanip->blitBackAll(&changed_blocks); - } + data->vmanip->blitBackAll(changed_blocks); - EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" << changed_blocks.size()); + EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" + << changed_blocks->size()); /* Copy transforming liquid information */ - while(data->transforming_liquid.size() > 0) - { + while (data->transforming_liquid.size()) { m_transforming_liquid.push_back(data->transforming_liquid.front()); data->transforming_liquid.pop_front(); } - /* - Do stuff in central blocks - */ - - /* - Update lighting - */ - { -#if 0 - TimeTaker t("finishBlockMake lighting update"); - - core::map lighting_update_blocks; - - // Center blocks - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x, y, z); - MapBlock *block = getBlockNoCreateNoEx(p); - assert(block); - lighting_update_blocks.insert(block->getPos(), block); - } - - updateLighting(lighting_update_blocks, changed_blocks); -#endif - - /* - Set lighting to non-expired state in all of them. - This is cheating, but it is not fast enough if all of them - would actually be updated. - */ - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x, y, z); - MapBlock * block = getBlockNoCreateNoEx(p); - if (block != NULL) - block->setLightingExpired(false); - } - -#if 0 - if(enable_mapgen_debug_info == false) - t.stop(true); // Hide output -#endif - } - - /* - Go through changed blocks - */ - for(std::map::iterator i = changed_blocks.begin(); - i != changed_blocks.end(); ++i) - { - MapBlock *block = i->second; + for (std::map::iterator + it = changed_blocks->begin(); + it != changed_blocks->end(); ++it) { + MapBlock *block = it->second; if (!block) continue; /* @@ -2489,14 +2401,13 @@ void ServerMap::finishBlockMake(BlockMakeData *data, /* Set central blocks as generated */ - for(s16 x=blockpos_min.X; x<=blockpos_max.X; x++) - for(s16 z=blockpos_min.Z; z<=blockpos_max.Z; z++) - for(s16 y=blockpos_min.Y; y<=blockpos_max.Y; y++) - { - v3s16 p(x, y, z); - MapBlock *block = getBlockNoCreateNoEx(p); + for (s16 x = bpmin.X; x <= bpmax.X; x++) + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) { + MapBlock *block = getBlockNoCreateNoEx(v3s16(x, y, z)); if (!block) continue; + block->setGenerated(true); } @@ -2505,39 +2416,9 @@ void ServerMap::finishBlockMake(BlockMakeData *data, NOTE: Will be saved later. */ //save(MOD_STATE_WRITE_AT_UNLOAD); - - /*infostream<<"finishBlockMake() done for ("< &changed_blocks); + std::map *changed_blocks); /* Get a block from somewhere. - Memory - Create blank */ - MapBlock * createBlock(v3s16 p); + MapBlock *createBlock(v3s16 p); /* Forcefully get a block from somewhere. diff --git a/src/mapgen.cpp b/src/mapgen.cpp index a94b071c5..f5046459e 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -61,8 +61,9 @@ FlagDesc flagdesc_gennotify[] = { }; -/////////////////////////////////////////////////////////////////////////////// - +//// +//// Mapgen +//// Mapgen::Mapgen() { @@ -340,8 +341,9 @@ void Mapgen::spreadLight(v3s16 nmin, v3s16 nmax) } - -/////////////////////////////////////////////////////////////////////////////// +//// +//// GenerateNotifier +//// GenerateNotifier::GenerateNotifier() { @@ -407,7 +409,10 @@ void GenerateNotifier::getEvents( m_notify_events.clear(); } -/////////////////////////////////////////////////////////////////////////////// + +//// +//// MapgenParams +//// void MapgenParams::load(const Settings &settings) { @@ -429,9 +434,11 @@ void MapgenParams::load(const Settings &settings) settings.getNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend); delete sparams; - sparams = EmergeManager::createMapgenParams(mg_name); - if (sparams) + MapgenFactory *mgfactory = EmergeManager::getMapgenFactory(mg_name); + if (mgfactory) { + sparams = mgfactory->createMapgenParams(); sparams->readParams(&settings); + } } diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 92311d6fc..d28925d5c 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -706,16 +706,13 @@ int ModApiMainMenu::l_set_topleft_text(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_mapgen_names(lua_State *L) { + std::vector names; + EmergeManager::getMapgenNames(&names); + lua_newtable(L); - - std::list names; - EmergeManager::getMapgenNames(names); - - int i = 1; - for (std::list::const_iterator - it = names.begin(); it != names.end(); ++it) { - lua_pushstring(L, *it); - lua_rawseti(L, -2, i++); + for (size_t i = 0; i != names.size(); i++) { + lua_pushstring(L, names[i]); + lua_rawseti(L, -2, i + 1); } return 1; @@ -725,8 +722,8 @@ int ModApiMainMenu::l_get_mapgen_names(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_modpath(lua_State *L) { - std::string modpath - = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "mods" + DIR_DELIM); + std::string modpath = fs::RemoveRelativePathComponents( + porting::path_user + DIR_DELIM + "mods" + DIR_DELIM); lua_pushstring(L, modpath.c_str()); return 1; } @@ -734,8 +731,8 @@ int ModApiMainMenu::l_get_modpath(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_gamepath(lua_State *L) { - std::string gamepath - = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "games" + DIR_DELIM); + std::string gamepath = fs::RemoveRelativePathComponents( + porting::path_user + DIR_DELIM + "games" + DIR_DELIM); lua_pushstring(L, gamepath.c_str()); return 1; } @@ -743,44 +740,46 @@ int ModApiMainMenu::l_get_gamepath(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_texturepath(lua_State *L) { - std::string gamepath - = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "textures"); + std::string gamepath = fs::RemoveRelativePathComponents( + porting::path_user + DIR_DELIM + "textures"); lua_pushstring(L, gamepath.c_str()); return 1; } int ModApiMainMenu::l_get_texturepath_share(lua_State *L) { - std::string gamepath - = fs::RemoveRelativePathComponents(porting::path_share + DIR_DELIM + "textures"); + std::string gamepath = fs::RemoveRelativePathComponents( + porting::path_share + DIR_DELIM + "textures"); lua_pushstring(L, gamepath.c_str()); return 1; } /******************************************************************************/ int ModApiMainMenu::l_create_dir(lua_State *L) { - const char *path = luaL_checkstring(L, 1); + const char *path = luaL_checkstring(L, 1); if (ModApiMainMenu::isMinetestPath(path)) { - lua_pushboolean(L,fs::CreateAllDirs(path)); + lua_pushboolean(L, fs::CreateAllDirs(path)); return 1; } - lua_pushboolean(L,false); + + lua_pushboolean(L, false); return 1; } /******************************************************************************/ int ModApiMainMenu::l_delete_dir(lua_State *L) { - const char *path = luaL_checkstring(L, 1); + const char *path = luaL_checkstring(L, 1); std::string absolute_path = fs::RemoveRelativePathComponents(path); if (ModApiMainMenu::isMinetestPath(absolute_path)) { - lua_pushboolean(L,fs::RecursiveDelete(absolute_path)); + lua_pushboolean(L, fs::RecursiveDelete(absolute_path)); return 1; } - lua_pushboolean(L,false); + + lua_pushboolean(L, false); return 1; } From 9f25aba6c2c3a922ebe74c327e275e83fef1f6f6 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 4 Oct 2015 16:37:03 -0400 Subject: [PATCH 429/670] Hide mapgens from main menu not intended for end users --- doc/menu_lua_api.txt | 4 ++-- src/emerge.cpp | 18 +++++++++++------- src/emerge.h | 3 ++- src/script/lua_api/l_mainmenu.cpp | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index 7d46c6526..d1e209187 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -141,8 +141,8 @@ core.get_game(index) addon_mods_paths = {[1] = ,}, } core.get_games() -> table of all games in upper format (possible in async calls) -core.get_mapgen_names() -> table of all map generator algorithms registered in - the core (possible in async calls) +core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms + registered in the core (possible in async calls) Favorites: core.get_favorites(location) -> list of favorites (possible in async calls) diff --git a/src/emerge.cpp b/src/emerge.cpp index 15f264c1a..bb2590641 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -54,6 +54,7 @@ with this program; if not, write to the Free Software Foundation, Inc., struct MapgenDesc { const char *name; MapgenFactory *factory; + bool is_user_visible; }; class EmergeThread : public Thread { @@ -100,10 +101,10 @@ private: //// MapgenDesc g_reg_mapgens[] = { - {"v5", new MapgenFactoryV5}, - {"v6", new MapgenFactoryV6}, - {"v7", new MapgenFactoryV7}, - {"singlenode", new MapgenFactorySinglenode}, + {"v5", new MapgenFactoryV5, true}, + {"v6", new MapgenFactoryV6, true}, + {"v7", new MapgenFactoryV7, true}, + {"singlenode", new MapgenFactorySinglenode, false}, }; //// @@ -343,10 +344,13 @@ bool EmergeManager::isBlockUnderground(v3s16 blockpos) } -void EmergeManager::getMapgenNames(std::vector *mgnames) +void EmergeManager::getMapgenNames( + std::vector *mgnames, bool include_hidden) { - for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) - mgnames->push_back(g_reg_mapgens[i].name); + for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) { + if (include_hidden || g_reg_mapgens[i].is_user_visible) + mgnames->push_back(g_reg_mapgens[i].name); + } } diff --git a/src/emerge.h b/src/emerge.h index 5526a4c91..b72b2a2c3 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -139,7 +139,8 @@ public: bool isBlockUnderground(v3s16 blockpos); static MapgenFactory *getMapgenFactory(const std::string &mgname); - static void getMapgenNames(std::vector *mgnames); + static void getMapgenNames( + std::vector *mgnames, bool include_hidden); static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); private: diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index d28925d5c..8478cf48a 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -707,7 +707,7 @@ int ModApiMainMenu::l_set_topleft_text(lua_State *L) int ModApiMainMenu::l_get_mapgen_names(lua_State *L) { std::vector names; - EmergeManager::getMapgenNames(&names); + EmergeManager::getMapgenNames(&names, lua_toboolean(L, 1)); lua_newtable(L); for (size_t i = 0; i != names.size(); i++) { From 5130dbce7b294c392733e93c05e2099786523342 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sun, 4 Oct 2015 17:26:08 -0400 Subject: [PATCH 430/670] Allow setting chunksize in core.set_mapgen_params --- src/emerge.cpp | 6 ++++++ src/emerge.h | 1 + src/script/lua_api/l_mapgen.cpp | 10 +++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/emerge.cpp b/src/emerge.cpp index bb2590641..92edd2007 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -256,6 +256,12 @@ void EmergeManager::stopThreads() } +bool EmergeManager::isRunning() +{ + return m_threads_active; +} + + bool EmergeManager::enqueueBlockEmerge( u16 peer_id, v3s16 blockpos, diff --git a/src/emerge.h b/src/emerge.h index b72b2a2c3..47ff218b8 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -115,6 +115,7 @@ public: void startThreads(); void stopThreads(); + bool isRunning(); bool enqueueBlockEmerge( u16 peer_id, diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 44af7892f..cfa216a3d 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -619,7 +619,11 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L) if (!lua_istable(L, 1)) return 0; - MapgenParams *params = &getServer(L)->getEmergeManager()->params; + EmergeManager *emerge = getServer(L)->getEmergeManager(); + if (emerge->isRunning()) + throw LuaError("Cannot set parameters while mapgen is running"); + + MapgenParams *params = &emerge->params; u32 flags = 0, flagmask = 0; lua_getfield(L, 1, "mgname"); @@ -637,6 +641,10 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L) if (lua_isnumber(L, -1)) params->water_level = lua_tointeger(L, -1); + lua_getfield(L, 1, "chunksize"); + if (lua_isnumber(L, -1)) + params->chunksize = lua_tointeger(L, -1); + warn_if_field_exists(L, 1, "flagmask", "Deprecated: flags field now includes unset flags."); lua_getfield(L, 1, "flagmask"); From b0523adc5f673208b5414cf49c6640e4fc148b87 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 2 Oct 2015 23:36:28 +0200 Subject: [PATCH 431/670] Add new ContentParamType2 "CPT2_DEGROTATE" This might break some mods, but it is important for all uses of the param2 to be documented. This doesn't need a serialisation version or network protocol version change, as old clients will still work on new servers, and it is bearable to have new clients getting non rotated plants on old servers. --- doc/lua_api.txt | 4 ++ src/content_mapblock.cpp | 102 +++++++++++++++++----------------- src/nodedef.h | 2 + src/script/cpp_api/s_node.cpp | 1 + 4 files changed, 58 insertions(+), 51 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 446b51959..926282976 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -538,6 +538,10 @@ node definition: 0 = y+ 1 = z+ 2 = z- 3 = x+ 4 = x- 5 = y- facedir's two less significant bits are rotation around the axis paramtype2 == "leveled" + paramtype2 == "degrotate" + ^ The rotation of this node is stored in param2. Plants are rotated this way. + Values range 0 - 179. The value stored in param2 is multiplied by two to + get the actual rotation of the node. collision_box = { type = "fixed", fixed = { diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index cd6d126de..01a06b6cd 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -50,9 +50,9 @@ void makeCuboid(MeshCollector *collector, const aabb3f &box, v3f min = box.MinEdge; v3f max = box.MaxEdge; - - - + + + if(txc == NULL) { static const f32 txc_default[24] = { 0,0,1,1, @@ -350,7 +350,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, */ if(top_is_same_liquid) continue; - + video::S3DVertex vertices[4] = { video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,1), @@ -383,7 +383,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, content_t c_source = nodedef->getId(f.liquid_alternative_source); if(ntop.getContent() == c_flowing || ntop.getContent() == c_source) top_is_same_liquid = true; - + u16 l = 0; // If this liquid emits light and doesn't contain light, draw // it at what it emits, for an increased effect @@ -399,7 +399,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, else l = getInteriorLight(n, 0, nodedef); video::SColor c = MapBlock_LightColor(f.alpha, l, f.light_source); - + u8 range = rangelim(nodedef->get(c_flowing).liquid_range, 1, 8); // Neighbor liquid levels (key = relative position) @@ -451,7 +451,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, n2.getContent() == c_flowing) flags |= neighborflag_top_is_same_liquid; } - + neighbor_levels[neighbor_dirs[i]] = level; neighbor_contents[neighbor_dirs[i]] = content; neighbor_flags[neighbor_dirs[i]] = flags; @@ -459,7 +459,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, // Corner heights (average between four liquids) f32 corner_levels[4]; - + v3s16 halfdirs[4] = { v3s16(0,0,0), v3s16(1,0,0), @@ -539,14 +539,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data, content_t neighbor_content = neighbor_contents[dir]; const ContentFeatures &n_feat = nodedef->get(neighbor_content); - + // Don't draw face if neighbor is blocking the view if(n_feat.solidness == 2) continue; - + bool neighbor_is_same_liquid = (neighbor_content == c_source || neighbor_content == c_flowing); - + // Don't draw any faces if neighbor same is liquid and top is // same liquid if(neighbor_is_same_liquid == true @@ -558,7 +558,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, const TileSpec *current_tile = &tile_liquid; if(n_feat.solidness != 0 || n_feat.visual_solidness != 0) current_tile = &tile_liquid_bfculled; - + video::S3DVertex vertices[4] = { video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,1), @@ -566,7 +566,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex(BS/2,0,BS/2, 0,0,0, c, 1,0), video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,0), }; - + /* If our topside is liquid, set upper border of face at upper border of node @@ -584,7 +584,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[2].Pos.Y = corner_levels[side_corners[i][0]]; vertices[3].Pos.Y = corner_levels[side_corners[i][1]]; } - + /* If neighbor is liquid, lower border of face is corner liquid levels @@ -603,7 +603,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[0].Pos.Y = -0.5*BS; vertices[1].Pos.Y = -0.5*BS; } - + for(s32 j=0; j<4; j++) { if(dir == v3s16(0,0,1)) @@ -614,7 +614,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[j].Pos.rotateXZBy(90); if(dir == v3s16(1,0,-0)) vertices[j].Pos.rotateXZBy(-90); - + // Do this to not cause glitches when two liquids are // side-by-side /*if(neighbor_is_same_liquid == false){ @@ -629,11 +629,11 @@ void mapblock_mesh_generate_special(MeshMakeData *data, // Add to mesh collector collector.append(*current_tile, vertices, 4, indices, 6); } - + /* Generate top side, if appropriate */ - + if(top_is_same_liquid == false) { video::S3DVertex vertices[4] = @@ -643,7 +643,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex(BS/2,0,-BS/2, 0,0,0, c, 1,0), video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c, 0,0), }; - + // To get backface culling right, the vertices need to go // clockwise around the front of the face. And we happened to // calculate corner levels in exact reverse order. @@ -657,8 +657,8 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[i].Pos.Y += corner_levels[j]; vertices[i].Pos += intToFloat(p, BS); } - - // Default downwards-flowing texture animation goes from + + // Default downwards-flowing texture animation goes from // -Z towards +Z, thus the direction is +Z. // Rotate texture to make animation go in flow direction // Positive if liquid moves towards +Z @@ -721,7 +721,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex(BS/2,BS/2,BS/2, dir.X,dir.Y,dir.Z, c, 0,0), video::S3DVertex(-BS/2,BS/2,BS/2, dir.X,dir.Y,dir.Z, c, 1,0), }; - + // Rotations in the g_6dirs format if(j == 0) // Z+ for(u16 i=0; i<4; i++) @@ -770,7 +770,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, TileSpec tiles[6]; for (i = 0; i < 6; i++) tiles[i] = getNodeTile(n, p, dirs[i], data); - + TileSpec glass_tiles[6]; if (tiles[1].texture && tiles[2].texture && tiles[3].texture) { glass_tiles[0] = tiles[2]; @@ -781,21 +781,21 @@ void mapblock_mesh_generate_special(MeshMakeData *data, glass_tiles[5] = tiles[1]; } else { for (i = 0; i < 6; i++) - glass_tiles[i] = tiles[1]; + glass_tiles[i] = tiles[1]; } - + u8 param2 = n.getParam2(); bool H_merge = ! bool(param2 & 128); bool V_merge = ! bool(param2 & 64); param2 = param2 & 63; - + u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); v3f pos = intToFloat(p, BS); static const float a = BS / 2; static const float g = a - 0.003; static const float b = .876 * ( BS / 2 ); - + static const aabb3f frame_edges[12] = { aabb3f( b, b,-a, a, a, a), // y+ aabb3f(-a, b,-a,-b, a, a), // y+ @@ -818,16 +818,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data, aabb3f(-g,-g, g, g, g, g), // z+ aabb3f(-g,-g,-g, g, g,-g) // z- }; - + // table of node visible faces, 0 = invisible int visible_faces[6] = {0,0,0,0,0,0}; - + // table of neighbours, 1 = same type, checked with g_26dirs int nb[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - + // g_26dirs to check when only horizontal merge is allowed int nb_H_dirs[8] = {0,2,3,5,10,11,12,13}; - + content_t current = n.getContent(); content_t n2c; MapNode n2; @@ -845,14 +845,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data, n2 = data->m_vmanip.getNodeNoEx(n2p); n2c = n2.getContent(); if (n2c == current || n2c == CONTENT_IGNORE) - nb[4] = 1; + nb[4] = 1; } else if (H_merge && !V_merge) { for(i = 0; i < 8; i++) { n2p = blockpos_nodes + p + g_26dirs[nb_H_dirs[i]]; n2 = data->m_vmanip.getNodeNoEx(n2p); n2c = n2.getContent(); if (n2c == current || n2c == CONTENT_IGNORE) - nb[nb_H_dirs[i]] = 1; + nb[nb_H_dirs[i]] = 1; } } else if (H_merge && V_merge) { for(i = 0; i < 18; i++) { @@ -878,7 +878,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, visible_faces[i] = 1; } } - + if (!H_merge) { visible_faces[2] = 1; visible_faces[3] = 1; @@ -893,7 +893,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, visible_faces[i] = 1; } } - + static const u8 nb_triplet[12*3] = { 1,2, 7, 1,5, 6, 4,2,15, 4,5,14, 2,0,11, 2,3,13, 5,0,10, 5,3,12, @@ -1010,7 +1010,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, case NDT_TORCHLIKE: { v3s16 dir = n.getWallMountedDir(nodedef); - + u8 tileindex = 0; if(dir == v3s16(0,-1,0)){ tileindex = 0; // floor @@ -1070,7 +1070,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = getInteriorLight(n, 0, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); - + float d = (float)BS/16; float s = BS/2*f.visual_scale; // Wall at X+ of node @@ -1113,7 +1113,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); - + float s = BS / 2 * f.visual_scale; for (int j = 0; j < 2; j++) @@ -1125,16 +1125,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0), video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0), }; + float rotate_degree = 0; + if (f.param_type_2 == CPT2_DEGROTATE) + rotate_degree = n.param2 * 2; - if(j == 0) - { + if (j == 0) { for(u16 i = 0; i < 4; i++) - vertices[i].Pos.rotateXZBy(46 + n.param2 * 2); - } - else if(j == 1) - { + vertices[i].Pos.rotateXZBy(46 + rotate_degree); + } else if (j == 1) { for(u16 i = 0; i < 4; i++) - vertices[i].Pos.rotateXZBy(-44 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(-44 + rotate_degree); } for (int i = 0; i < 4; i++) @@ -1507,7 +1507,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, v3s16(0, 0, -1) }; TileSpec tiles[6]; - + u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); @@ -1526,7 +1526,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, aabb3f box = *i; box.MinEdge += pos; box.MaxEdge += pos; - + f32 temp; if (box.MinEdge.X > box.MaxEdge.X) { @@ -1615,7 +1615,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, break;} } } - + /* Caused by incorrect alpha blending, selection mesh needs to be created as last element to ensure it gets blended correct over nodes with alpha channel @@ -1643,15 +1643,15 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = 0; u16 l1 = 0; for (u8 i = 0; i < 7; i++) { - MapNode n1 = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dirs[i]); + MapNode n1 = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dirs[i]); l1 = getInteriorLight(n1, -4, nodedef); - if (l1 > l) + if (l1 > l) l = l1; } video::SColor c = MapBlock_LightColor(255, l, 0); data->m_highlight_mesh_color = c; std::vector boxes = n.getSelectionBoxes(nodedef); - TileSpec h_tile; + TileSpec h_tile; h_tile.material_flags |= MATERIAL_FLAG_HIGHLIGHTED; h_tile.texture = tsrc->getTextureForMesh("halo.png",&h_tile.texture_id); v3f pos = intToFloat(p, BS); diff --git a/src/nodedef.h b/src/nodedef.h index a4a7b6e41..7a84b0316 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -63,6 +63,8 @@ enum ContentParamType2 CPT2_WALLMOUNTED, // Block level like FLOWINGLIQUID CPT2_LEVELED, + // 2D rotation for things like plants + CPT2_DEGROTATE, }; enum LiquidType diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp index f90e65642..a905f843d 100644 --- a/src/script/cpp_api/s_node.cpp +++ b/src/script/cpp_api/s_node.cpp @@ -57,6 +57,7 @@ struct EnumString ScriptApiNode::es_ContentParamType2[] = {CPT2_FACEDIR, "facedir"}, {CPT2_WALLMOUNTED, "wallmounted"}, {CPT2_LEVELED, "leveled"}, + {CPT2_DEGROTATE, "degrotate"}, {0, NULL}, }; From 5bf4af9e6c655db474c1f0cbaec8237c1f11499c Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 13 Sep 2015 12:36:41 +0200 Subject: [PATCH 432/670] Translated using Weblate (Esperanto) Currently translated at 99.2% (276 of 278 strings) --- po/eo/minetest.po | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index a85d06a23..177db3857 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-10 17:14+0200\n" +"PO-Revision-Date: 2015-09-13 12:36+0200\n" "Last-Translator: Tim \n" -"Language-Team: Esperanto \n" +"Language-Team: Esperanto " +"\n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,7 +28,6 @@ msgid "An error occured:" msgstr "Eraro okazis:" #: builtin/fstk/ui.lua -#, fuzzy msgid "Main menu" msgstr "Ĉefmenuo" @@ -37,13 +36,12 @@ msgid "Ok" msgstr "Bone" #: builtin/fstk/ui.lua -#, fuzzy msgid "Reconnect" -msgstr "Konekti" +msgstr "Rekonekti" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "" +msgstr "Servilo petis rekonekton:" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." @@ -84,6 +82,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "chararacters [a-z0-9_] are allowed." msgstr "" +"Fiaskis aktivigi modifon \"$1\", ĉar ĝi enhavas malpermesajn signojn. Nur " +"literciferaj signoj [a-z0-9_] estas permesaj." #: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" @@ -401,7 +401,7 @@ msgstr "Startigi ludon" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" @@ -409,15 +409,15 @@ msgstr "3D nuboj" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "4x" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "8x" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Glatigo:" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" @@ -584,9 +584,8 @@ msgid "Texturepacks" msgstr "Teksturaroj" #: src/client.cpp -#, fuzzy msgid "Connection timed out." -msgstr "Konekteraro (ĉu eltempiĝo?)" +msgstr "Konekto eltempiĝas." #: src/client.cpp msgid "Done!" From de85688c92ae7ec2ec332f1bd3f1d3d65d0c5b7b Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 17 Sep 2015 12:43:17 +0200 Subject: [PATCH 433/670] Translated using Weblate (Chinese (Taiwan)) Currently translated at 100% (0 of 0 strings) Created new translation. --- po/zh_TW/minetest.po | 1164 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1164 insertions(+) create mode 100644 po/zh_TW/minetest.po diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po new file mode 100644 index 000000000..62847a45b --- /dev/null +++ b/po/zh_TW/minetest.po @@ -0,0 +1,1164 @@ +# Chinese translations for minetest package. +# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-12 23:20+0200\n" +"PO-Revision-Date: 2015-09-12 23:20+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua +msgid "Ok" +msgstr "" + +#: builtin/mainmenu/common.lua src/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 "Protocol version mismatch, server " +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp +#: src/keycode.cpp +msgid "Cancel" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +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 " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/tab_settings.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "No" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp +msgid "Accept" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "" +"\n" +"Install Mod: unsupported filetype \"$1\" or broken archive" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +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_mods.lua +msgid "Installed Mods:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Mod information:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Client" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +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 "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 builtin/mainmenu/tab_texturepacks.lua +msgid "None" +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 "No!!!" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Enable 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 "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Reset singleplayer world" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "GUI scale factor" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Scaling factor applied to menu elements: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touch free target" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bumpmapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Generate Normalmaps" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Parallax Occlusion" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Water" +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 "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Play" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "No information available" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Texturepacks" +msgstr "" + +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Item textures..." +msgstr "" + +#: src/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 "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 "" + +#: src/fontengine.cpp +msgid "needs_fallback_font" +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/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/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "" + +#: src/game.cpp +msgid "Change Password" +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "Change Keys" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/guiFormSpecMenu.cpp +msgid "Enter " +msgstr "" + +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Print stacks" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "" + +#: src/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Attn" +msgstr "" + +#: src/keycode.cpp +msgid "CrSel" +msgstr "" + +#: src/keycode.cpp +msgid "Erase OEF" +msgstr "" + +#: src/keycode.cpp +msgid "ExSel" +msgstr "" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/keycode.cpp +msgid "PA1" +msgstr "" + +#: src/keycode.cpp +msgid "Zoom" +msgstr "" From 56faa2faf3893ac13b556c99a45396c24cbf52f8 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 17 Sep 2015 12:44:35 +0200 Subject: [PATCH 434/670] Translated using Weblate (Chinese (Taiwan)) Currently translated at 0.0% (0 of 278 strings) --- po/zh_TW/minetest.po | 581 ++++++++++++++++++++++--------------------- 1 file changed, 304 insertions(+), 277 deletions(-) diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po index 62847a45b..55496cf52 100644 --- a/po/zh_TW/minetest.po +++ b/po/zh_TW/minetest.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-12 23:20+0200\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2015-09-17 08:14+0800\n" +"Last-Translator: Jeff Huang \n" +"Language-Team: Chinese Traditional \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,633 +18,635 @@ msgstr "" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "" +msgstr "伺服器已要求重新連線:" #: builtin/fstk/ui.lua msgid "Main menu" -msgstr "" +msgstr "主選單" #: builtin/fstk/ui.lua msgid "Reconnect" -msgstr "" +msgstr "重新連線" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "在 Lua 指令稿中發生錯誤,像是 mod:" #: builtin/fstk/ui.lua msgid "An error occured:" -msgstr "" +msgstr "發生錯誤:" #: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" -msgstr "" +msgstr "確定" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." -msgstr "" +msgstr "正在載入..." #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." -msgstr "" +msgstr "嘗試重新啟用公共伺服器清單並檢查您的網際網路連線。" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "" +msgstr "協定版本不符合,伺服器 " #: builtin/mainmenu/dlg_config_world.lua msgid "World:" -msgstr "" +msgstr "世界:" #: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" -msgstr "" +msgstr "隱藏遊戲" #: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" -msgstr "" +msgstr "隱藏 mp 內容" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" -msgstr "" +msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua msgid "Depends:" -msgstr "" +msgstr "依賴:" #: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp msgid "Save" -msgstr "" +msgstr "儲存" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp #: src/keycode.cpp msgid "Cancel" -msgstr "" +msgstr "取消" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable MP" -msgstr "" +msgstr "啟用 MP" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" -msgstr "" +msgstr "停用 MP" #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "" +msgstr "已啟用" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" -msgstr "" +msgstr "啟用全部" #: builtin/mainmenu/dlg_config_world.lua msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "chararacters [a-z0-9_] are allowed." -msgstr "" +msgstr "啟用 mod 「$1」 失敗,因為其包含了不合法的字元。只有 字元 [a-z0-9_] 才是可用的。" #: builtin/mainmenu/dlg_create_world.lua msgid "World name" -msgstr "" +msgstr "世界遊戲" #: builtin/mainmenu/dlg_create_world.lua msgid "Seed" -msgstr "" +msgstr "種子" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen" -msgstr "" +msgstr "地圖產生器" #: builtin/mainmenu/dlg_create_world.lua msgid "Game" -msgstr "" +msgstr "遊戲" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" -msgstr "" +msgstr "建立" #: builtin/mainmenu/dlg_create_world.lua msgid "You have no subgames installed." -msgstr "" +msgstr "您沒有安裝子遊戲。" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "" +msgstr "從 minetest.net 下載一個" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." -msgstr "" +msgstr "警告:最小化的開發測試僅供開發者使用。" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "從 minetest.net 下載一個子遊戲,像是 minetest_game" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "" +msgstr "名為「$1」的世界已存在" #: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" -msgstr "" +msgstr "未給予世界遊戲或是未選取遊戲" #: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr "您確定您要刪除「$1」嗎?" #: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua #: builtin/mainmenu/tab_settings.lua msgid "Yes" -msgstr "" +msgstr "是" #: builtin/mainmenu/dlg_delete_mod.lua msgid "No of course not!" -msgstr "" +msgstr "不,絕對不是!" #: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" -msgstr "" +msgstr "Mod 管理員:刪除「$1」失敗" #: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" -msgstr "" +msgstr "Mod 管理員:無效的 mod 路徑「$1」" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "" +msgstr "刪除世界「$1」? " #: builtin/mainmenu/dlg_delete_world.lua msgid "No" -msgstr "" +msgstr "否" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "" +msgstr "重新命名 Mod 包:" #: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" -msgstr "" +msgstr "接受" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: file: \"$1\"" -msgstr "" +msgstr "安裝 Mod:檔案「$1」" #: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" +"\n" +"安裝 Mod:不支援的檔案類型「$1」或是損毀的壓縮檔" #: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" -msgstr "" +msgstr "安裝 $1 到 $2 失敗" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "" +msgstr "安裝 Mod:找不到 mod 包 $1 適合的資料夾名稱" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" -msgstr "" +msgstr "安裝 Mod:找不到 $1 的真實 mod 名稱" #: builtin/mainmenu/store.lua msgid "Unsorted" -msgstr "" +msgstr "未分類" #: builtin/mainmenu/store.lua msgid "Search" -msgstr "" +msgstr "搜尋" #: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." -msgstr "" +msgstr "正在下載 $1,請稍候..." #: builtin/mainmenu/store.lua msgid "Successfully installed:" -msgstr "" +msgstr "已成功安裝:" #: builtin/mainmenu/store.lua msgid "Shortname:" -msgstr "" +msgstr "短名稱:" #: builtin/mainmenu/store.lua msgid "Rating" -msgstr "" +msgstr "評分" #: builtin/mainmenu/store.lua msgid "re-Install" -msgstr "" +msgstr "重新安裝" #: builtin/mainmenu/store.lua msgid "Install" -msgstr "" +msgstr "安裝" #: builtin/mainmenu/store.lua msgid "Close store" -msgstr "" +msgstr "關閉商店" #: builtin/mainmenu/store.lua msgid "Page $1 of $2" -msgstr "" +msgstr "$2 的第 $1 頁" #: builtin/mainmenu/tab_credits.lua msgid "Credits" -msgstr "" +msgstr "感謝" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" -msgstr "" +msgstr "核心開發者" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "" +msgstr "活躍的貢獻者" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "" +msgstr "先前的核心開發者" #: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "" +msgstr "先前的貢獻者" #: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" -msgstr "" +msgstr "已安裝的 Mod:" #: builtin/mainmenu/tab_mods.lua msgid "No mod description available" -msgstr "" +msgstr "找不到 mod 描述" #: builtin/mainmenu/tab_mods.lua msgid "Mod information:" -msgstr "" +msgstr "Mod 資訊:" #: builtin/mainmenu/tab_mods.lua msgid "Rename" -msgstr "" +msgstr "重新命名" #: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected modpack" -msgstr "" +msgstr "解除安裝已選取的 mod 包" #: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected mod" -msgstr "" +msgstr "解除安裝已選取的 mod" #: builtin/mainmenu/tab_mods.lua msgid "Select Mod File:" -msgstr "" +msgstr "選取 Mod 檔案:" #: builtin/mainmenu/tab_mods.lua msgid "Mods" -msgstr "" +msgstr "Mods" #: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" -msgstr "" +msgstr "地址/埠:" #: builtin/mainmenu/tab_multiplayer.lua msgid "Name / Password :" -msgstr "" +msgstr "名稱/密碼:" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Public Serverlist" -msgstr "" +msgstr "公共伺服器清單" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua #: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Delete" -msgstr "" +msgstr "刪除" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" -msgstr "" +msgstr "連線" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative mode" -msgstr "" +msgstr "創造模式" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" -msgstr "" +msgstr "已啟用傷害" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" -msgstr "" +msgstr "已啟用 PvP" #: builtin/mainmenu/tab_multiplayer.lua msgid "Client" -msgstr "" +msgstr "客戶端" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "New" -msgstr "" +msgstr "新" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" -msgstr "" +msgstr "設定" #: builtin/mainmenu/tab_server.lua msgid "Start Game" -msgstr "" +msgstr "開始遊戲" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Select World:" -msgstr "" +msgstr "選取世界:" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua #: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" -msgstr "" +msgstr "創造模式" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua #: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" -msgstr "" +msgstr "啟用傷害" #: builtin/mainmenu/tab_server.lua msgid "Public" -msgstr "" +msgstr "公共" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua msgid "Name/Password" -msgstr "" +msgstr "名稱/密碼" #: builtin/mainmenu/tab_server.lua msgid "Bind Address" -msgstr "" +msgstr "綁定地址" #: builtin/mainmenu/tab_server.lua msgid "Port" -msgstr "" +msgstr "埠" #: builtin/mainmenu/tab_server.lua msgid "Server Port" -msgstr "" +msgstr "伺服器埠" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" -msgstr "" +msgstr "未有已建立或已選取的世界!" #: builtin/mainmenu/tab_server.lua msgid "Server" -msgstr "" +msgstr "伺服器" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" -msgstr "" +msgstr "不透明葉子" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" -msgstr "" +msgstr "簡易葉子" #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" -msgstr "" +msgstr "華麗葉子" #: builtin/mainmenu/tab_settings.lua msgid "No Filter" -msgstr "" +msgstr "無過濾器" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" -msgstr "" +msgstr "雙線性過濾器" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" -msgstr "" +msgstr "三線性過濾器" #: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" -msgstr "" +msgstr "無 Mip 貼圖" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" -msgstr "" +msgstr "Mip 貼圖" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Mip 貼圖 + Aniso. 過濾器" #: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua msgid "None" -msgstr "" +msgstr "無" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "4x" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "8x" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr "您確定要要重置您的單人遊戲世界嗎?" #: builtin/mainmenu/tab_settings.lua msgid "No!!!" -msgstr "" +msgstr "否!!!" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" -msgstr "" +msgstr "平滑光線" #: builtin/mainmenu/tab_settings.lua msgid "Enable Particles" -msgstr "" +msgstr "啟用粒子" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" -msgstr "" +msgstr "3D 雲朵" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "" +msgstr "不透明水" #: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" -msgstr "" +msgstr "連貫的玻璃" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "" +msgstr "突顯節點" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" -msgstr "" +msgstr "紋理" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "反鋸齒:" #: builtin/mainmenu/tab_settings.lua msgid "Shaders" -msgstr "" +msgstr "著色器" #: builtin/mainmenu/tab_settings.lua msgid "Change keys" -msgstr "" +msgstr "變更按鍵" #: builtin/mainmenu/tab_settings.lua msgid "Reset singleplayer world" -msgstr "" +msgstr "重置單人遊戲世界" #: builtin/mainmenu/tab_settings.lua msgid "GUI scale factor" -msgstr "" +msgstr "圖形使用者介面縮放係數" #: builtin/mainmenu/tab_settings.lua msgid "Scaling factor applied to menu elements: " -msgstr "" +msgstr "套用在選單元素的縮放係數: " #: builtin/mainmenu/tab_settings.lua msgid "Touch free target" -msgstr "" +msgstr "碰觸自由目標" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold (px)" -msgstr "" +msgstr "碰觸限值(像素)" #: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" -msgstr "" +msgstr "映射貼圖" #: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" -msgstr "" +msgstr "生成一般地圖" #: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" -msgstr "" +msgstr "視差遮蔽" #: builtin/mainmenu/tab_settings.lua msgid "Waving Water" -msgstr "" +msgstr "波動的水" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" -msgstr "" +msgstr "葉子擺動" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" -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 msgid "Settings" -msgstr "" +msgstr "設定" #: builtin/mainmenu/tab_simple_main.lua msgid "Start Singleplayer" -msgstr "" +msgstr "開始單人遊戲" #: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "" +msgstr "設定 mod" #: builtin/mainmenu/tab_simple_main.lua msgid "Main" -msgstr "" +msgstr "主要" #: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" -msgstr "" +msgstr "玩" #: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" -msgstr "" +msgstr "單人遊戲" #: builtin/mainmenu/tab_texturepacks.lua msgid "Select texture pack:" -msgstr "" +msgstr "選取材質包:" #: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" -msgstr "" +msgstr "不提供資訊" #: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" -msgstr "" +msgstr "材質包" #: src/client.cpp msgid "Connection timed out." -msgstr "" +msgstr "連線逾時。" #: src/client.cpp msgid "Loading textures..." -msgstr "" +msgstr "正在載入材質..." #: src/client.cpp msgid "Rebuilding shaders..." -msgstr "" +msgstr "正在重新構建著色器..." #: src/client.cpp msgid "Initializing nodes..." -msgstr "" +msgstr "正在初始化節點..." #: src/client.cpp msgid "Initializing nodes" -msgstr "" +msgstr "正在初始化節點" #: src/client.cpp msgid "Item textures..." -msgstr "" +msgstr "物品材質..." #: src/client.cpp msgid "Done!" -msgstr "" +msgstr "完成!" #: src/client/clientlauncher.cpp msgid "Main Menu" -msgstr "" +msgstr "主選單" #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "" +msgstr "玩家名稱太長。" #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" -msgstr "" +msgstr "連線錯誤(逾時?)" #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "" +msgstr "未有已被選取的世界,且未提供地址。無事可做。" #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "提供的世界路徑不存在: " #: src/client/clientlauncher.cpp msgid "Could not find or load game \"" -msgstr "" +msgstr "找不到或無法載入遊戲 \"" #: src/client/clientlauncher.cpp msgid "Invalid gamespec." -msgstr "" +msgstr "無效的遊戲規格。" #: src/fontengine.cpp msgid "needs_fallback_font" -msgstr "" +msgstr "needs_fallback_font" #: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" -msgstr "" +msgstr "開始" #: src/game.cpp msgid "You died." -msgstr "" +msgstr "您已經死亡。" #: src/game.cpp msgid "Respawn" -msgstr "" +msgstr "重生" #: src/game.cpp msgid "" @@ -661,6 +663,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"預設控制:\n" +"無可見選單:\n" +"- 輕擊一次:啟動按鈕\n" +"- 輕擊兩次:放置/使用\n" +"- 滑動手指:轉動視角\n" +"檢視選單/物品欄:\n" +"- 輕擊兩次(外面):\n" +" -->關閉\n" +"- 碰觸堆疊,碰觸槽:\n" +" --> 移動堆疊\n" +"- 碰觸並拖曳,以第二隻手指輕擊\n" +" --> 放置單一物品到槽中\n" #: src/game.cpp msgid "" @@ -676,489 +690,502 @@ msgid "" "- Mouse wheel: select item\n" "- T: chat\n" msgstr "" +"預設控制:\n" +"- WASD:移動\n" +"- Space:跳躍/攀爬\n" +"- Shift:潛行/往下\n" +"- Q:丟棄物品\n" +"- I:物品欄\n" +"- 滑鼠:旋轉/觀看\n" +"- 滑鼠左鍵:挖/推擠\n" +"- 滑鼠右鍵:放置/使用\n" +"- 滑鼠滾輪:選取物品\n" +"- T:聊天\n" #: src/game.cpp msgid "Continue" -msgstr "" +msgstr "繼續" #: src/game.cpp msgid "Change Password" -msgstr "" +msgstr "變更密碼" #: src/game.cpp msgid "Sound Volume" -msgstr "" +msgstr "音量" #: src/game.cpp msgid "Change Keys" -msgstr "" +msgstr "變更按鍵" #: src/game.cpp msgid "Exit to Menu" -msgstr "" +msgstr "離開到選單" #: src/game.cpp msgid "Exit to OS" -msgstr "" +msgstr "離開到作業系統" #: src/game.cpp msgid "Shutting down..." -msgstr "" +msgstr "關閉..." #: src/game.cpp msgid "Creating server..." -msgstr "" +msgstr "正在建立伺服器..." #: src/game.cpp msgid "Creating client..." -msgstr "" +msgstr "正在建立客戶端..." #: src/game.cpp msgid "Resolving address..." -msgstr "" +msgstr "正在解析地址……" #: src/game.cpp msgid "Connecting to server..." -msgstr "" +msgstr "正在連線至伺服器..." #: src/game.cpp msgid "Item definitions..." -msgstr "" +msgstr "物品定義..." #: src/game.cpp msgid "Node definitions..." -msgstr "" +msgstr "節點定義..." #: src/game.cpp msgid "Media..." -msgstr "" +msgstr "媒體..." #: src/game.cpp msgid "KiB/s" -msgstr "" +msgstr "KiB/s" #: src/game.cpp msgid "MiB/s" -msgstr "" +msgstr "MiB/s" #: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" +"\n" +"檢視 debug.txt 以取得更多資訊。" #: src/guiFormSpecMenu.cpp msgid "Enter " -msgstr "" +msgstr "輸入 " #: src/guiFormSpecMenu.cpp msgid "ok" -msgstr "" +msgstr "確定" #: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" +msgstr "按鍵綁定。(若此選單鎖住了,從 minetest.conf 移除相關參數)" #: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" -msgstr "" +msgstr "「使用」=向下攀爬" #: src/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" -msgstr "" +msgstr "輕擊兩次「跳躍」以切換成飛行" #: src/guiKeyChangeMenu.cpp msgid "Key already in use" -msgstr "" +msgstr "此按鍵已被使用" #: src/guiKeyChangeMenu.cpp msgid "press key" -msgstr "" +msgstr "按下按鍵" #: src/guiKeyChangeMenu.cpp msgid "Forward" -msgstr "" +msgstr "前進" #: src/guiKeyChangeMenu.cpp msgid "Backward" -msgstr "" +msgstr "後退" #: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" -msgstr "" +msgstr "左" #: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" -msgstr "" +msgstr "右" #: src/guiKeyChangeMenu.cpp msgid "Use" -msgstr "" +msgstr "使用" #: src/guiKeyChangeMenu.cpp msgid "Jump" -msgstr "" +msgstr "跳躍" #: src/guiKeyChangeMenu.cpp msgid "Sneak" -msgstr "" +msgstr "潛行" #: src/guiKeyChangeMenu.cpp msgid "Drop" -msgstr "" +msgstr "丟棄" #: src/guiKeyChangeMenu.cpp msgid "Inventory" -msgstr "" +msgstr "物品欄" #: src/guiKeyChangeMenu.cpp msgid "Chat" -msgstr "" +msgstr "聊天" #: src/guiKeyChangeMenu.cpp msgid "Command" -msgstr "" +msgstr "指令" #: src/guiKeyChangeMenu.cpp msgid "Console" -msgstr "" +msgstr "終端機" #: src/guiKeyChangeMenu.cpp msgid "Toggle fly" -msgstr "" +msgstr "切換飛行" #: src/guiKeyChangeMenu.cpp msgid "Toggle fast" -msgstr "" +msgstr "切換快速" #: src/guiKeyChangeMenu.cpp msgid "Toggle Cinematic" -msgstr "" +msgstr "切換過場動畫" #: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" -msgstr "" +msgstr "切換無省略" #: src/guiKeyChangeMenu.cpp msgid "Range select" -msgstr "" +msgstr "選擇範圍" #: src/guiKeyChangeMenu.cpp msgid "Print stacks" -msgstr "" +msgstr "印出堆疊" #: src/guiPasswordChange.cpp msgid "Old Password" -msgstr "" +msgstr "舊密碼" #: src/guiPasswordChange.cpp msgid "New Password" -msgstr "" +msgstr "新密碼" #: src/guiPasswordChange.cpp msgid "Confirm Password" -msgstr "" +msgstr "確認密碼" #: src/guiPasswordChange.cpp msgid "Change" -msgstr "" +msgstr "變更" #: src/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "" +msgstr "密碼不符合!" #: src/guiVolumeChange.cpp msgid "Sound Volume: " -msgstr "" +msgstr "音量 " #: src/guiVolumeChange.cpp msgid "Exit" -msgstr "" +msgstr "離開" #: src/keycode.cpp msgid "Left Button" -msgstr "" +msgstr "左鍵" #: src/keycode.cpp msgid "Middle Button" -msgstr "" +msgstr "中鍵" #: src/keycode.cpp msgid "Right Button" -msgstr "" +msgstr "右鍵" #: src/keycode.cpp msgid "X Button 1" -msgstr "" +msgstr "X 按鈕 1" #: src/keycode.cpp msgid "Back" -msgstr "" +msgstr "Back" #: src/keycode.cpp msgid "Clear" -msgstr "" +msgstr "清除" #: src/keycode.cpp msgid "Return" -msgstr "" +msgstr "Return" #: src/keycode.cpp msgid "Tab" -msgstr "" +msgstr "Tab" #: src/keycode.cpp msgid "X Button 2" -msgstr "" +msgstr "X 按鈕 2" #: src/keycode.cpp msgid "Capital" -msgstr "" +msgstr "大寫" #: src/keycode.cpp msgid "Control" -msgstr "" +msgstr "Control" #: src/keycode.cpp msgid "Kana" -msgstr "" +msgstr "假名" #: src/keycode.cpp msgid "Menu" -msgstr "" +msgstr "選單" #: src/keycode.cpp msgid "Pause" -msgstr "" +msgstr "暫停" #: src/keycode.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: src/keycode.cpp msgid "Convert" -msgstr "" +msgstr "轉換" #: src/keycode.cpp msgid "Escape" -msgstr "" +msgstr "Escape" #: src/keycode.cpp msgid "Final" -msgstr "" +msgstr "Final" #: src/keycode.cpp msgid "Junja" -msgstr "" +msgstr "Junja" #: src/keycode.cpp msgid "Kanji" -msgstr "" +msgstr "日文漢字" #: src/keycode.cpp msgid "Nonconvert" -msgstr "" +msgstr "不轉換" #: src/keycode.cpp msgid "End" -msgstr "" +msgstr "End" #: src/keycode.cpp msgid "Home" -msgstr "" +msgstr "Home" #: src/keycode.cpp msgid "Mode Change" -msgstr "" +msgstr "模式變更" #: src/keycode.cpp msgid "Next" -msgstr "" +msgstr "下一個" #: src/keycode.cpp msgid "Prior" -msgstr "" +msgstr "上一個" #: src/keycode.cpp msgid "Space" -msgstr "" +msgstr "Space" #: src/keycode.cpp msgid "Down" -msgstr "" +msgstr "下" #: src/keycode.cpp msgid "Execute" -msgstr "" +msgstr "執行" #: src/keycode.cpp msgid "Print" -msgstr "" +msgstr "列印" #: src/keycode.cpp msgid "Select" -msgstr "" +msgstr "選擇" #: src/keycode.cpp msgid "Up" -msgstr "" +msgstr "上" #: src/keycode.cpp msgid "Help" -msgstr "" +msgstr "說明" #: src/keycode.cpp msgid "Insert" -msgstr "" +msgstr "插入" #: src/keycode.cpp msgid "Snapshot" -msgstr "" +msgstr "螢幕截圖" #: src/keycode.cpp msgid "Left Windows" -msgstr "" +msgstr "左方視窗" #: src/keycode.cpp msgid "Apps" -msgstr "" +msgstr "應用程式" #: src/keycode.cpp msgid "Numpad 0" -msgstr "" +msgstr "數字鍵 0" #: src/keycode.cpp msgid "Numpad 1" -msgstr "" +msgstr "數字鍵 1" #: src/keycode.cpp msgid "Right Windows" -msgstr "" +msgstr "右方視窗" #: src/keycode.cpp msgid "Sleep" -msgstr "" +msgstr "睡眠" #: src/keycode.cpp msgid "Numpad 2" -msgstr "" +msgstr "數字鍵 2" #: src/keycode.cpp msgid "Numpad 3" -msgstr "" +msgstr "數字鍵 3" #: src/keycode.cpp msgid "Numpad 4" -msgstr "" +msgstr "數字鍵 4" #: src/keycode.cpp msgid "Numpad 5" -msgstr "" +msgstr "數字鍵 5" #: src/keycode.cpp msgid "Numpad 6" -msgstr "" +msgstr "數字鍵 6" #: src/keycode.cpp msgid "Numpad 7" -msgstr "" +msgstr "數字鍵 7" #: src/keycode.cpp msgid "Numpad *" -msgstr "" +msgstr "數字鍵 *" #: src/keycode.cpp msgid "Numpad +" -msgstr "" +msgstr "數字鍵 +" #: src/keycode.cpp msgid "Numpad -" -msgstr "" +msgstr "數字鍵 -" #: src/keycode.cpp msgid "Numpad /" -msgstr "" +msgstr "數字鍵 /" #: src/keycode.cpp msgid "Numpad 8" -msgstr "" +msgstr "數字鍵 8" #: src/keycode.cpp msgid "Numpad 9" -msgstr "" +msgstr "數字鍵 9" #: src/keycode.cpp msgid "Num Lock" -msgstr "" +msgstr "Num Lock" #: src/keycode.cpp msgid "Scroll Lock" -msgstr "" +msgstr "Scroll Lock" #: src/keycode.cpp msgid "Left Shift" -msgstr "" +msgstr "左邊 Shift" #: src/keycode.cpp msgid "Right Shift" -msgstr "" +msgstr "右邊 Shift" #: src/keycode.cpp msgid "Left Control" -msgstr "" +msgstr "左邊 Control" #: src/keycode.cpp msgid "Left Menu" -msgstr "" +msgstr "左邊選單鍵" #: src/keycode.cpp msgid "Right Control" -msgstr "" +msgstr "右邊 Control" #: src/keycode.cpp msgid "Right Menu" -msgstr "" +msgstr "右邊選單鍵" #: src/keycode.cpp msgid "Comma" -msgstr "" +msgstr "逗號" #: src/keycode.cpp msgid "Minus" -msgstr "" +msgstr "減號" #: src/keycode.cpp msgid "Period" -msgstr "" +msgstr "句號" #: src/keycode.cpp msgid "Plus" -msgstr "" +msgstr "加號" #: src/keycode.cpp msgid "Attn" -msgstr "" +msgstr "Attn" #: src/keycode.cpp msgid "CrSel" -msgstr "" +msgstr "CrSel" #: src/keycode.cpp msgid "Erase OEF" -msgstr "" +msgstr "抹除 OEF" #: src/keycode.cpp msgid "ExSel" -msgstr "" +msgstr "ExSel" #: src/keycode.cpp msgid "OEM Clear" -msgstr "" +msgstr "OEM 清除" #: src/keycode.cpp msgid "PA1" -msgstr "" +msgstr "PA1" #: src/keycode.cpp msgid "Zoom" -msgstr "" +msgstr "縮放" From 9701372e9d1a72460b08cf7e9eceaf44da9d7457 Mon Sep 17 00:00:00 2001 From: pilino1234 Date: Thu, 17 Sep 2015 15:10:20 +0200 Subject: [PATCH 435/670] Translated using Weblate (German) Currently translated at 98.9% (275 of 278 strings) --- po/de/minetest.po | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index cd9fd7b36..4f60a4a0f 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-03 21:35+0200\n" -"Last-Translator: Tim \n" -"Language-Team: German \n" +"PO-Revision-Date: 2015-09-17 15:10+0200\n" +"Last-Translator: pilino1234 \n" +"Language-Team: German " +"\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,14 +21,13 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "Ein Fehler ist in Lua aufgetreten (z.B. aufgrund eines Mods):" +msgstr "Es ist ein Fehler in einem Lua-Skript wie einer Mod aufgetreten:" #: builtin/fstk/ui.lua msgid "An error occured:" -msgstr "Ein Fehler ist aufgetreten:" +msgstr "Es ist ein Fehler aufgetreten:" #: builtin/fstk/ui.lua -#, fuzzy msgid "Main menu" msgstr "Hauptmenü" @@ -37,9 +36,8 @@ msgid "Ok" msgstr "OK" #: builtin/fstk/ui.lua -#, fuzzy msgid "Reconnect" -msgstr "Verbinden" +msgstr "Wiederverbinden" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" @@ -47,7 +45,7 @@ msgstr "" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." -msgstr "Lädt ..." +msgstr "Lädt…" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " @@ -56,8 +54,8 @@ msgstr "" #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Bitte versuchen Sie die öffentliche Serverliste neu zu aktivieren und prüfen " -"Sie Ihre Internetverbindung." +"Bitte versuchen Sie die \"puiblic serverlist\" Einstellung zu aktivieren und " +"überprüfen Sie Ihre Internetverbindung." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp @@ -86,6 +84,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "chararacters [a-z0-9_] are allowed." msgstr "" +"Fehler beim aktivieren der Mod \"$1\": Ungültiger Name. Nur folgende Zeichen " +"sind erlaubt: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" @@ -405,7 +405,7 @@ msgstr "Spiel starten" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" @@ -413,15 +413,15 @@ msgstr "3D-Wolken" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "4x" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "8x" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Kantenglättung:" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" @@ -485,7 +485,7 @@ msgstr "Blöcke hervorheben" #: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua msgid "None" -msgstr "" +msgstr "Keine" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" From 3bef5fbde2af0eb7932c7320968dac13c410ecf1 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 17 Sep 2015 15:10:49 +0200 Subject: [PATCH 436/670] Translated using Weblate (German) Currently translated at 98.9% (275 of 278 strings) --- po/de/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 4f60a4a0f..e01e20107 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" "PO-Revision-Date: 2015-09-17 15:10+0200\n" -"Last-Translator: pilino1234 \n" +"Last-Translator: Tim \n" "Language-Team: German " "\n" "Language: de\n" @@ -93,7 +93,7 @@ msgstr "Spiel ausblenden" #: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" -msgstr "MP-Mods verstecken" +msgstr "Modpacks verstecken" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" From 69fff104b9ff901ee8261c95577e17bf09254e27 Mon Sep 17 00:00:00 2001 From: pilino1234 Date: Thu, 17 Sep 2015 15:11:25 +0200 Subject: [PATCH 437/670] Translated using Weblate (German) Currently translated at 98.9% (275 of 278 strings) --- po/de/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index e01e20107..e490d9e21 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 15:10+0200\n" -"Last-Translator: Tim \n" +"PO-Revision-Date: 2015-09-17 15:11+0200\n" +"Last-Translator: pilino1234 \n" "Language-Team: German " "\n" "Language: de\n" @@ -113,7 +113,7 @@ msgstr "Aktiviert" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "Eine Welt namens „$1“ existiert bereits" +msgstr "Eine Welt namens \"$1\" existiert bereits" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" @@ -159,7 +159,7 @@ msgstr "Keine Spiele installiert." #: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "„$1“ wirklich löschen?" +msgstr "Bist du sicher, dass du \"$1\" wirklich löschen möchtest?" #: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" From a3ca8854a89dbb25bf984d2b4cb76b8d5101419f Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 17 Sep 2015 15:12:29 +0200 Subject: [PATCH 438/670] Translated using Weblate (German) Currently translated at 98.9% (275 of 278 strings) --- po/de/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index e490d9e21..f1400eade 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 15:11+0200\n" -"Last-Translator: pilino1234 \n" +"PO-Revision-Date: 2015-09-17 15:12+0200\n" +"Last-Translator: Tim \n" "Language-Team: German " "\n" "Language: de\n" @@ -278,7 +278,7 @@ msgstr "Frühere Mitwirkende" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "Frühere Hauptentwickler" +msgstr "Ehemalige Kerntentwickler" #: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" From 1d628a5858070762d2003b42bcd0aef7790c2486 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 17 Sep 2015 12:48:02 +0200 Subject: [PATCH 439/670] Translated using Weblate (Chinese (Taiwan)) Currently translated at 100.0% (278 of 278 strings) --- po/zh_TW/minetest.po | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po index 55496cf52..676709c05 100644 --- a/po/zh_TW/minetest.po +++ b/po/zh_TW/minetest.po @@ -8,13 +8,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 08:14+0800\n" +"PO-Revision-Date: 2015-09-17 12:48+0200\n" "Last-Translator: Jeff Huang \n" -"Language-Team: Chinese Traditional \n" +"Language-Team: Chinese (Taiwan) " +"\n" "Language: zh_TW\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 2.4-dev\n" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" @@ -171,7 +174,7 @@ msgstr "Mod 管理員:無效的 mod 路徑「$1」" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "刪除世界「$1」? " +msgstr "刪除世界「$1」?" #: builtin/mainmenu/dlg_delete_world.lua msgid "No" @@ -478,7 +481,7 @@ msgstr "突顯節點" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" -msgstr "紋理" +msgstr "紋理:" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" @@ -896,7 +899,7 @@ msgstr "密碼不符合!" #: src/guiVolumeChange.cpp msgid "Sound Volume: " -msgstr "音量 " +msgstr "音量: " #: src/guiVolumeChange.cpp msgid "Exit" From 8518ec2861aba8d4fd643c3da2ba66996db6db6f Mon Sep 17 00:00:00 2001 From: pilino1234 Date: Thu, 17 Sep 2015 15:13:06 +0200 Subject: [PATCH 440/670] Translated using Weblate (German) Currently translated at 99.2% (276 of 278 strings) --- po/de/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index f1400eade..0c78c164f 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 15:12+0200\n" -"Last-Translator: Tim \n" +"PO-Revision-Date: 2015-09-17 15:13+0200\n" +"Last-Translator: pilino1234 \n" "Language-Team: German " "\n" "Language: de\n" @@ -41,7 +41,7 @@ msgstr "Wiederverbinden" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "" +msgstr "Der Server hat um eine Wiederverbindung gebeten:" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." @@ -278,7 +278,7 @@ msgstr "Frühere Mitwirkende" #: builtin/mainmenu/tab_credits.lua msgid "Previous Core Developers" -msgstr "Ehemalige Kerntentwickler" +msgstr "Ehemalige Hauptentwickler" #: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" From 9a3dce3b88820bcaab8a2ff14aa5e5f9da17e30c Mon Sep 17 00:00:00 2001 From: Olexandr Date: Thu, 17 Sep 2015 21:56:08 +0200 Subject: [PATCH 441/670] Translated using Weblate (Ukrainian) Currently translated at 46.4% (129 of 278 strings) --- po/uk/minetest.po | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/po/uk/minetest.po b/po/uk/minetest.po index 44f0e9008..4430b5db3 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -8,16 +8,17 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2013-06-27 01:22+0200\n" -"Last-Translator: Vladimir a \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-17 21:56+0200\n" +"Last-Translator: Olexandr \n" +"Language-Team: Ukrainian " +"\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 1.4-dev\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" @@ -34,7 +35,7 @@ msgstr "Головне Меню" #: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" -msgstr "" +msgstr "Гаразд" #: builtin/fstk/ui.lua #, fuzzy @@ -61,7 +62,7 @@ msgstr "" #: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp #: src/keycode.cpp msgid "Cancel" -msgstr "Відміна" +msgstr "Скасувати" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy From bcf03e0ff5ae855dc149be038e20d7ffbcd9eb20 Mon Sep 17 00:00:00 2001 From: Olexandr Date: Thu, 17 Sep 2015 22:38:55 +0200 Subject: [PATCH 442/670] Translated using Weblate (Ukrainian) Currently translated at 66.5% (185 of 278 strings) Maybe it is better to describe allowed symbols instead of writing regex? --- po/uk/minetest.po | 150 +++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 81 deletions(-) diff --git a/po/uk/minetest.po b/po/uk/minetest.po index 4430b5db3..c0b503eb1 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 21:56+0200\n" +"PO-Revision-Date: 2015-09-17 22:38+0200\n" "Last-Translator: Olexandr \n" "Language-Team: Ukrainian " "\n" @@ -26,21 +26,19 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occured:" -msgstr "" +msgstr "Трапилася помилка:" #: builtin/fstk/ui.lua -#, fuzzy msgid "Main menu" -msgstr "Головне Меню" +msgstr "Головне меню" #: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Гаразд" #: builtin/fstk/ui.lua -#, fuzzy msgid "Reconnect" -msgstr "Підключитися" +msgstr "Повторне підключення" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" @@ -65,9 +63,8 @@ msgid "Cancel" msgstr "Скасувати" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua -#, fuzzy msgid "Depends:" -msgstr "залежить від:" +msgstr "Залежить від:" #: builtin/mainmenu/dlg_config_world.lua #, fuzzy @@ -80,20 +77,20 @@ msgid "Enable MP" msgstr "Увімкнути Все" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Enable all" -msgstr "Увімкнути Все" +msgstr "Увімкнути все" #: builtin/mainmenu/dlg_config_world.lua msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "chararacters [a-z0-9_] are allowed." msgstr "" +"Не вдалося ввімкнути mod \"$1\", бо він містить заборонені символи. " +"Дозволяється використання таких символів: [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Hide Game" -msgstr "Гра" +msgstr "Приховати гру" #: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" @@ -139,7 +136,7 @@ msgstr "Гра" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen" -msgstr "" +msgstr "Генератор карти" #: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" @@ -147,11 +144,11 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Seed" -msgstr "" +msgstr "Зерно" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." -msgstr "" +msgstr "Увага: мінімальна тестова версія призначена для розробників." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -159,23 +156,23 @@ msgstr "Назва Світу" #: builtin/mainmenu/dlg_create_world.lua msgid "You have no subgames installed." -msgstr "" +msgstr "Ви не маєте встановлених ігор." #: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr "Ви впевнені, що бажаєте видалити \"$1\"?" #: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" -msgstr "" +msgstr "Modmgr: не вдалося видалити \"$1\"" #: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" -msgstr "" +msgstr "Modmgr: недійсний шлях модифікації \"$1\"" #: builtin/mainmenu/dlg_delete_mod.lua msgid "No of course not!" -msgstr "" +msgstr "Ні, звісно ні!" #: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua #: builtin/mainmenu/tab_settings.lua @@ -183,18 +180,16 @@ msgid "Yes" msgstr "Так" #: builtin/mainmenu/dlg_delete_world.lua -#, fuzzy msgid "Delete World \"$1\"?" -msgstr "Видалити світ" +msgstr "Видалити світ \"$1\"?" #: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ні" #: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp -#, fuzzy msgid "Accept" -msgstr "Підтвердити" +msgstr "Прийняти" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" @@ -205,6 +200,9 @@ msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" +"\n" +"Встановлення модифікації: тип файлу \"$1\" не підтримується або архів " +"пошкоджено" #: builtin/mainmenu/modmgr.lua #, fuzzy @@ -213,11 +211,12 @@ msgstr "Не вдалося ініціалізувати світ" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: file: \"$1\"" -msgstr "" +msgstr "Встановлення модифікації: файл \"$1\"" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" +"Встановлення модифікації: не вдається знайти дійсну назву модифікації $1" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" @@ -229,15 +228,15 @@ msgstr "" #: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." -msgstr "" +msgstr "Завантаження $1, зачекайте..." #: builtin/mainmenu/store.lua msgid "Install" -msgstr "" +msgstr "Встановити" #: builtin/mainmenu/store.lua msgid "Page $1 of $2" -msgstr "" +msgstr "Сторінка $1 із $2" #: builtin/mainmenu/store.lua msgid "Rating" @@ -245,7 +244,7 @@ msgstr "" #: builtin/mainmenu/store.lua msgid "Search" -msgstr "" +msgstr "Пошук" #: builtin/mainmenu/store.lua #, fuzzy @@ -254,7 +253,7 @@ msgstr "Назва Світу" #: builtin/mainmenu/store.lua msgid "Successfully installed:" -msgstr "" +msgstr "Успішно встановлено:" #: builtin/mainmenu/store.lua msgid "Unsorted" @@ -286,32 +285,31 @@ msgstr "" #: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" -msgstr "" +msgstr "Встановлені модифікації:" #: builtin/mainmenu/tab_mods.lua msgid "Mod information:" -msgstr "" +msgstr "Інформація модифікації:" #: builtin/mainmenu/tab_mods.lua msgid "Mods" -msgstr "" +msgstr "Модифікації" #: builtin/mainmenu/tab_mods.lua msgid "No mod description available" -msgstr "" +msgstr "Опис модифікації відсутній" #: builtin/mainmenu/tab_mods.lua msgid "Rename" -msgstr "" +msgstr "Перейменувати" #: builtin/mainmenu/tab_mods.lua -#, fuzzy msgid "Select Mod File:" -msgstr "Виберіть світ:" +msgstr "Оберіть файл модифікації:" #: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected mod" -msgstr "" +msgstr "Видалити обрану модифікацію" #: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected modpack" @@ -328,7 +326,7 @@ msgstr "" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" -msgstr "Підключитися" +msgstr "Під'єднатися" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy @@ -336,9 +334,8 @@ msgid "Creative mode" msgstr "Режим Створення" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Damage enabled" -msgstr "Увімкнено" +msgstr "Ушкодження увімкнено" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua #: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp @@ -346,9 +343,8 @@ msgid "Delete" msgstr "Видалити" #: builtin/mainmenu/tab_multiplayer.lua -#, fuzzy msgid "Name / Password :" -msgstr "Ім'я/Пароль" +msgstr "Ім'я / Пароль :" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy @@ -356,9 +352,8 @@ msgid "Public Serverlist" msgstr "Список публічних серверів:" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "PvP enabled" -msgstr "Увімкнено" +msgstr "PvP увімкнено" #: builtin/mainmenu/tab_server.lua msgid "Bind Address" @@ -376,7 +371,7 @@ msgstr "Режим Створення" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua #: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" -msgstr "Ввімкнути урон" +msgstr "Увімкнути ушкодження" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua msgid "Name/Password" @@ -388,15 +383,15 @@ msgstr "Новий" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" -msgstr "" +msgstr "Світ не створено або не обрано!" #: builtin/mainmenu/tab_server.lua msgid "Port" -msgstr "" +msgstr "Порт" #: builtin/mainmenu/tab_server.lua msgid "Public" -msgstr "Публичний" +msgstr "Публічний" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Select World:" @@ -404,16 +399,15 @@ msgstr "Виберіть світ:" #: builtin/mainmenu/tab_server.lua msgid "Server" -msgstr "" +msgstr "Сервер" #: builtin/mainmenu/tab_server.lua msgid "Server Port" msgstr "" #: builtin/mainmenu/tab_server.lua -#, fuzzy msgid "Start Game" -msgstr "Почати гру / Підключитися" +msgstr "Почати гру" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -469,7 +463,7 @@ msgstr "Гарні дерева" #: builtin/mainmenu/tab_settings.lua msgid "GUI scale factor" -msgstr "" +msgstr "Масштаб інтерфейсу" #: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" @@ -493,7 +487,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "No!!!" -msgstr "" +msgstr "Ні!!!" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" @@ -504,12 +498,10 @@ msgid "None" msgstr "" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Opaque Leaves" -msgstr "Непрозора вода" +msgstr "Непрозоре листя" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Opaque Water" msgstr "Непрозора вода" @@ -524,7 +516,7 @@ msgstr "Одиночна гра" #: builtin/mainmenu/tab_settings.lua msgid "Scaling factor applied to menu elements: " -msgstr "" +msgstr "Масштабування елементів меню: " #: builtin/mainmenu/tab_settings.lua msgid "Settings" @@ -543,12 +535,15 @@ msgid "Smooth Lighting" msgstr "Рівне освітлення" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Texturing:" -msgstr "" +msgstr "Текстурування:" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" +"Для того, щоб увімкнути шейдери, потрібно використовувати двайвер OpenGL" #: builtin/mainmenu/tab_settings.lua msgid "Touch free target" @@ -600,15 +595,15 @@ msgstr "Одиночна гра" #: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" -msgstr "" +msgstr "Інформація відсутня" #: builtin/mainmenu/tab_texturepacks.lua msgid "Select texture pack:" -msgstr "" +msgstr "Оберіть набір текстур:" #: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" -msgstr "" +msgstr "Набори текстур" #: src/client.cpp #, fuzzy @@ -617,7 +612,7 @@ msgstr "Помилка з'єднання (час вийшов?)" #: src/client.cpp msgid "Done!" -msgstr "" +msgstr "Виконано!" #: src/client.cpp msgid "Initializing nodes" @@ -632,14 +627,12 @@ msgid "Item textures..." msgstr "Текстура предметів..." #: src/client.cpp -#, fuzzy msgid "Loading textures..." -msgstr "Завантаження..." +msgstr "Завантаження текстур..." #: src/client.cpp -#, fuzzy msgid "Rebuilding shaders..." -msgstr "Отримання адреси..." +msgstr "Побудова шейдерів..." #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" @@ -647,7 +640,7 @@ msgstr "Помилка з'єднання (час вийшов?)" #: src/client/clientlauncher.cpp msgid "Could not find or load game \"" -msgstr "Неможливо знайти, або завантажити гру \"" +msgstr "Неможливо знайти або завантажити гру \"" #: src/client/clientlauncher.cpp msgid "Invalid gamespec." @@ -659,11 +652,11 @@ msgstr "Головне Меню" #: 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." -msgstr "" +msgstr "Ім'я гравця надто довге." #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " @@ -682,9 +675,8 @@ msgstr "" "Деталі у файлі debug.txt." #: src/game.cpp -#, fuzzy msgid "Change Keys" -msgstr "Змінити клавіши" +msgstr "Змінити клавіші" #: src/game.cpp msgid "Change Password" @@ -708,7 +700,6 @@ msgid "Creating server..." msgstr "Створення сервера..." #: src/game.cpp -#, fuzzy msgid "" "Default Controls:\n" "- WASD: move\n" @@ -722,7 +713,7 @@ msgid "" "- Mouse wheel: select item\n" "- T: chat\n" msgstr "" -"Управління за замовчанню:\n" +"Управління за замовчанням:\n" "- WASD: рух\n" "- Space: стрибок/лізти в гору\n" "- Shift: крастися/лізти в низ\n" @@ -980,7 +971,7 @@ msgstr "Вниз" #: src/keycode.cpp msgid "End" -msgstr "End" +msgstr "Кінець" #: src/keycode.cpp #, fuzzy @@ -997,14 +988,12 @@ msgid "ExSel" msgstr "ExSel" #: src/keycode.cpp -#, fuzzy msgid "Execute" msgstr "Виконати" #: src/keycode.cpp -#, fuzzy msgid "Final" -msgstr "Кинець" +msgstr "Кінець" #: src/keycode.cpp msgid "Help" @@ -1064,9 +1053,8 @@ msgid "Minus" msgstr "Мінус" #: src/keycode.cpp -#, fuzzy msgid "Mode Change" -msgstr "Mode" +msgstr "Змінити режим" #: src/keycode.cpp msgid "Next" @@ -1198,7 +1186,7 @@ msgstr "Scroll Lock" #: src/keycode.cpp msgid "Select" -msgstr "Select" +msgstr "Обрати" #: src/keycode.cpp msgid "Shift" From 4cd7e46c634ad9998c5298a2a2066146b4a63fcf Mon Sep 17 00:00:00 2001 From: Laura Arjona Reina Date: Sun, 20 Sep 2015 17:49:52 +0200 Subject: [PATCH 443/670] Translated using Weblate (Spanish) Currently translated at 100.0% (278 of 278 strings) --- po/es/minetest.po | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 493a43cb0..146fb7711 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-08-26 01:29+0200\n" -"Last-Translator: shadowninja \n" -"Language-Team: Spanish \n" +"PO-Revision-Date: 2015-09-20 17:49+0200\n" +"Last-Translator: Laura Arjona Reina \n" +"Language-Team: Spanish " +"\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,7 +28,6 @@ msgid "An error occured:" msgstr "Ha ocurrido un error:" #: builtin/fstk/ui.lua -#, fuzzy msgid "Main menu" msgstr "Menú principal" @@ -37,13 +36,12 @@ msgid "Ok" msgstr "Aceptar" #: builtin/fstk/ui.lua -#, fuzzy msgid "Reconnect" -msgstr "Conectar" +msgstr "Volver a conectar" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "" +msgstr "El servidor ha solicitado volver a conectar:" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." @@ -51,7 +49,7 @@ msgstr "Cargando..." #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "" +msgstr "No concuerda la versión del protocolo, servidor " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -86,6 +84,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "chararacters [a-z0-9_] are allowed." msgstr "" +"Error al habilitar el mod \"$1\" por contener caracteres no permitidos. Solo " +"se permiten los caracteres [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" @@ -408,7 +408,7 @@ msgstr "Iniciar juego" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" @@ -416,15 +416,15 @@ msgstr "Nubes 3D" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "4x" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "8x" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Suavizado:" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" @@ -488,7 +488,7 @@ msgstr "Resaltar nodos" #: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua msgid "None" -msgstr "" +msgstr "Ninguno" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" @@ -592,9 +592,8 @@ msgid "Texturepacks" msgstr "Texturas" #: src/client.cpp -#, fuzzy msgid "Connection timed out." -msgstr "Error de conexión (¿tiempo agotado?)" +msgstr "Tiempo de espera de la conexión agotado." #: src/client.cpp msgid "Done!" From 51cb2fd26980df2ed664736d1347634bc5d652ba Mon Sep 17 00:00:00 2001 From: Laura Arjona Reina Date: Sun, 20 Sep 2015 17:54:26 +0200 Subject: [PATCH 444/670] Translated using Weblate (Spanish) Currently translated at 100.0% (278 of 278 strings) --- po/es/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 146fb7711..cb9f1f48b 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-20 17:49+0200\n" +"PO-Revision-Date: 2015-09-20 17:54+0200\n" "Last-Translator: Laura Arjona Reina \n" "Language-Team: Spanish " "\n" @@ -21,7 +21,7 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "Ha ocurrido un error en una script de Lua, como en un mod:" +msgstr "Ha ocurrido un error en un script de Lua, como en un mod:" #: builtin/fstk/ui.lua msgid "An error occured:" @@ -312,7 +312,7 @@ msgstr "Desinstalar el mod seleccionado" # El nombre completo no cabe. #: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected modpack" -msgstr "Desinstalar el paquete selecc." +msgstr "Desinstalar el paquete seleccionado" #: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" From 1472b25a585137ef67c75d3ae19854344665bd5b Mon Sep 17 00:00:00 2001 From: way-hu Date: Mon, 21 Sep 2015 14:55:05 +0200 Subject: [PATCH 445/670] Translated using Weblate (Hungarian) Currently translated at 92.8% (258 of 278 strings) --- po/hu/minetest.po | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/po/hu/minetest.po b/po/hu/minetest.po index bc19aa78f..f0f907705 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -8,27 +8,26 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-09 16:11+0200\n" -"Last-Translator: Kisbenedek Márton \n" -"Language-Team: Hungarian \n" +"PO-Revision-Date: 2015-09-21 14:55+0200\n" +"Last-Translator: way-hu \n" +"Language-Team: Hungarian " +"\n" "Language: hu\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 2.4-dev\n" +"X-Generator: Weblate 2.4\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Hiba történt egy Lua scriptben (egy modban):" #: builtin/fstk/ui.lua msgid "An error occured:" msgstr "Hiba történt:" #: builtin/fstk/ui.lua -#, fuzzy msgid "Main menu" msgstr "Főmenü" @@ -37,13 +36,12 @@ msgid "Ok" msgstr "OK" #: builtin/fstk/ui.lua -#, fuzzy msgid "Reconnect" -msgstr "Csatlakozás" +msgstr "Újracsatlakozás" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "" +msgstr "A szerver újracsatlakozást kért:" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." @@ -51,7 +49,7 @@ msgstr "Betöltés..." #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "" +msgstr "Protokol verzió eltérés, szerver " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -86,6 +84,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "chararacters [a-z0-9_] are allowed." msgstr "" +"A \"$1\" mod engedélyezése nem sikerült, mert rossz karaktereket tartalmaz. " +"Csak az [0-z0-9_] karakterek engedélyezettek." #: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" @@ -96,7 +96,6 @@ msgid "Hide mp content" msgstr "Modpakk tartalom elrejtése" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Mod:" msgstr "Mod:" @@ -141,7 +140,6 @@ msgid "No worldname given or no game selected" msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Seed" msgstr "Seed" @@ -350,7 +348,6 @@ msgid "PvP enabled" msgstr "PvP engedélyezve" #: builtin/mainmenu/tab_server.lua -#, fuzzy msgid "Bind Address" msgstr "Bind Address" @@ -406,7 +403,7 @@ msgstr "Játék indítása" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" @@ -414,15 +411,15 @@ msgstr "3D felhők" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "4x" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "8x" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Élsimítás:" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" @@ -458,9 +455,8 @@ msgid "GUI scale factor" msgstr "Felhasználói felület méretaránya" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Generate Normalmaps" -msgstr "Generate Normalmaps" +msgstr "Normálfelületek generálása" #: builtin/mainmenu/tab_settings.lua #, fuzzy @@ -491,7 +487,7 @@ msgstr "Node kiemelés" #: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua msgid "None" -msgstr "" +msgstr "Semmi" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" From a5768239175b0cb72c9c5de63a2517446e687ea0 Mon Sep 17 00:00:00 2001 From: Christian Haug Date: Sun, 20 Sep 2015 17:15:21 +0200 Subject: [PATCH 446/670] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 3.5% (10 of 278 strings) --- po/nb/minetest.po | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 167e23a32..61d1c04a2 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2013-06-21 15:48+0200\n" -"Last-Translator: sfan5 \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-20 17:15+0200\n" +"Last-Translator: Christian Haug \n" +"Language-Team: Norwegian Bokmål " +"\n" "Language: nb\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 1.4-dev\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" @@ -32,7 +33,7 @@ msgstr "" #: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" -msgstr "" +msgstr "Ok" #: builtin/fstk/ui.lua msgid "Reconnect" From a77b980c94ad7782f9ae853a08fb8552b1203028 Mon Sep 17 00:00:00 2001 From: Laura Arjona Reina Date: Sun, 20 Sep 2015 18:00:45 +0200 Subject: [PATCH 447/670] Translated using Weblate (Spanish) Currently translated at 100.0% (278 of 278 strings) --- po/es/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index cb9f1f48b..7a9d11a5d 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-20 17:54+0200\n" +"PO-Revision-Date: 2015-09-20 18:00+0200\n" "Last-Translator: Laura Arjona Reina \n" "Language-Team: Spanish " "\n" @@ -372,7 +372,7 @@ msgstr "Permitir daños" # Los dos puntos son intencionados. #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua msgid "Name/Password" -msgstr "Nombre / contraseña:" +msgstr "Nombre / contraseña" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "New" @@ -380,7 +380,7 @@ msgstr "Nuevo" #: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "No world created or selected!" -msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" +msgstr "¡No se ha dado un nombre al mundo o no se ha seleccionado uno!" #: builtin/mainmenu/tab_server.lua msgid "Port" @@ -400,7 +400,7 @@ msgstr "Servidor" #: builtin/mainmenu/tab_server.lua msgid "Server Port" -msgstr "Puerto del servidor:" +msgstr "Puerto del servidor" #: builtin/mainmenu/tab_server.lua msgid "Start Game" From 66f6b4ca5994624408e67280c1895505a8eaf81e Mon Sep 17 00:00:00 2001 From: Olexandr Date: Sat, 19 Sep 2015 23:15:12 +0200 Subject: [PATCH 448/670] Translated using Weblate (Ukrainian) Currently translated at 78.0% (217 of 278 strings) --- po/uk/minetest.po | 97 +++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 57 deletions(-) diff --git a/po/uk/minetest.po b/po/uk/minetest.po index c0b503eb1..cf1c42b87 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 22:38+0200\n" +"PO-Revision-Date: 2015-09-19 23:15+0200\n" "Last-Translator: Olexandr \n" "Language-Team: Ukrainian " "\n" @@ -22,7 +22,7 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "" +msgstr "Трапилася помилка у Lua-скрипті модифікації:" #: builtin/fstk/ui.lua msgid "An error occured:" @@ -50,11 +50,13 @@ msgstr "Завантаження..." #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "" +msgstr "Неспівпадіння версій протоколу, сервер: " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" +"Спробуйте оновити список публічних серверів та перевірте своє " +"Інтернет-з'єднання." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp @@ -67,14 +69,12 @@ msgid "Depends:" msgstr "Залежить від:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Disable MP" -msgstr "Вимкнути Усе" +msgstr "Вимкнути багатокористувацьку гру" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Enable MP" -msgstr "Увімкнути Все" +msgstr "Увімкнути багатокористувацьку гру" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -94,20 +94,19 @@ msgstr "Приховати гру" #: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" -msgstr "" +msgstr "Приховати контент багатокористувацької гри" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" -msgstr "" +msgstr "Модифікація:" #: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp msgid "Save" msgstr "Зберегти" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "World:" -msgstr "Виберіть світ:" +msgstr "Світ:" #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" @@ -124,11 +123,11 @@ msgstr "Створити" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Завантажте гру, наприклад, minetest_game з minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "" +msgstr "Завантажте з minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Game" @@ -140,7 +139,7 @@ msgstr "Генератор карти" #: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" -msgstr "" +msgstr "Назву світу не задано або не обрано гру" #: builtin/mainmenu/dlg_create_world.lua msgid "Seed" @@ -205,9 +204,8 @@ msgstr "" "пошкоджено" #: builtin/mainmenu/modmgr.lua -#, fuzzy msgid "Failed to install $1 to $2" -msgstr "Не вдалося ініціалізувати світ" +msgstr "Не вдалося встановити $1 у $2" #: builtin/mainmenu/modmgr.lua msgid "Install Mod: file: \"$1\"" @@ -224,7 +222,7 @@ msgstr "" #: builtin/mainmenu/store.lua msgid "Close store" -msgstr "" +msgstr "Вийти з крамнички" #: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." @@ -240,16 +238,15 @@ msgstr "Сторінка $1 із $2" #: builtin/mainmenu/store.lua msgid "Rating" -msgstr "" +msgstr "Оцінка" #: builtin/mainmenu/store.lua msgid "Search" msgstr "Пошук" #: builtin/mainmenu/store.lua -#, fuzzy msgid "Shortname:" -msgstr "Назва Світу" +msgstr "Коротке ім'я:" #: builtin/mainmenu/store.lua msgid "Successfully installed:" @@ -316,22 +313,20 @@ msgid "Uninstall selected modpack" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua -#, fuzzy msgid "Address / Port :" -msgstr "Адреса/Порт" +msgstr "Адреса / Порт :" #: builtin/mainmenu/tab_multiplayer.lua msgid "Client" -msgstr "" +msgstr "Клієнт" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Під'єднатися" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Creative mode" -msgstr "Режим Створення" +msgstr "Режим творчості" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" @@ -347,9 +342,8 @@ msgid "Name / Password :" msgstr "Ім'я / Пароль :" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Public Serverlist" -msgstr "Список публічних серверів:" +msgstr "Список публічних серверів" #: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" @@ -431,7 +425,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Are you sure to reset your singleplayer world?" -msgstr "" +msgstr "Ви впевнені, що бажаєте скинути свій світ однокористувацької гри?" #: builtin/mainmenu/tab_settings.lua #, fuzzy @@ -457,9 +451,8 @@ msgid "Enable Particles" msgstr "Ввімкнути частки" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Fancy Leaves" -msgstr "Гарні дерева" +msgstr "Гарне листя" #: builtin/mainmenu/tab_settings.lua msgid "GUI scale factor" @@ -510,9 +503,8 @@ msgid "Parallax Occlusion" msgstr "" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Reset singleplayer world" -msgstr "Одиночна гра" +msgstr "Скинути світ однокористувацької гри" #: builtin/mainmenu/tab_settings.lua msgid "Scaling factor applied to menu elements: " @@ -528,22 +520,20 @@ msgstr "Шейдери" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" -msgstr "" +msgstr "Просте листя" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" msgstr "Рівне освітлення" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Texturing:" msgstr "Текстурування:" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" -"Для того, щоб увімкнути шейдери, потрібно використовувати двайвер OpenGL" +"Для того, щоб увімкнути шейдери, потрібно використовувати двайвер OpenGL." #: builtin/mainmenu/tab_settings.lua msgid "Touch free target" @@ -571,9 +561,8 @@ msgid "Waving Water" msgstr "" #: builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Config mods" -msgstr "Налаштувати" +msgstr "Налаштувати модифікації" #: builtin/mainmenu/tab_simple_main.lua #, fuzzy @@ -581,9 +570,8 @@ msgid "Main" msgstr "Головне Меню" #: builtin/mainmenu/tab_simple_main.lua -#, fuzzy msgid "Start Singleplayer" -msgstr "Одиночна гра" +msgstr "Почати однокористувацьку гру" #: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" @@ -606,9 +594,8 @@ msgid "Texturepacks" msgstr "Набори текстур" #: src/client.cpp -#, fuzzy msgid "Connection timed out." -msgstr "Помилка з'єднання (час вийшов?)" +msgstr "Час очікування вийшов." #: src/client.cpp msgid "Done!" @@ -616,11 +603,11 @@ msgstr "Виконано!" #: src/client.cpp msgid "Initializing nodes" -msgstr "" +msgstr "Ініціалізація вузлів" #: src/client.cpp msgid "Initializing nodes..." -msgstr "" +msgstr "Ініціалізація вузлів..." #: src/client.cpp msgid "Item textures..." @@ -660,7 +647,7 @@ msgstr "Ім'я гравця надто довге." #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "Вказаний шлях до світу не існує: " #: src/fontengine.cpp msgid "needs_fallback_font" @@ -695,7 +682,6 @@ msgid "Creating client..." msgstr "Створення клієнта..." #: src/game.cpp -#, fuzzy msgid "Creating server..." msgstr "Створення сервера..." @@ -751,7 +737,7 @@ msgstr "Вихід з гри" #: src/game.cpp msgid "Item definitions..." -msgstr "" +msgstr "Визначення предметів..." #: src/game.cpp msgid "KiB/s" @@ -944,9 +930,8 @@ msgid "Capital" msgstr "Caps Lock" #: src/keycode.cpp -#, fuzzy msgid "Clear" -msgstr "Clear" +msgstr "Очистити" #: src/keycode.cpp msgid "Comma" @@ -963,7 +948,7 @@ msgstr "Конвертувати" #: src/keycode.cpp msgid "CrSel" -msgstr "CrSel" +msgstr "" #: src/keycode.cpp msgid "Down" @@ -1010,15 +995,15 @@ msgstr "Insert" #: src/keycode.cpp msgid "Junja" -msgstr "Junja" +msgstr "" #: src/keycode.cpp msgid "Kana" -msgstr "Kana" +msgstr "" #: src/keycode.cpp msgid "Kanji" -msgstr "Kanji" +msgstr "" #: src/keycode.cpp msgid "Left Button" @@ -1126,9 +1111,8 @@ msgid "Numpad 9" msgstr "Num 9" #: src/keycode.cpp -#, fuzzy msgid "OEM Clear" -msgstr "OEM Очистити" +msgstr "Очистити OEM" #: src/keycode.cpp msgid "PA1" @@ -1139,9 +1123,8 @@ msgid "Pause" msgstr "Пауза" #: src/keycode.cpp -#, fuzzy msgid "Period" -msgstr "Період" +msgstr "Крапка" #: src/keycode.cpp msgid "Plus" From 58ec4482ce4e0ee48ca07563963d8e1b4a6c7c70 Mon Sep 17 00:00:00 2001 From: Olexandr Date: Mon, 21 Sep 2015 23:18:50 +0200 Subject: [PATCH 449/670] Translated using Weblate (Ukrainian) Currently translated at 81.6% (227 of 278 strings) --- po/uk/minetest.po | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/po/uk/minetest.po b/po/uk/minetest.po index cf1c42b87..bf64f897e 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-19 23:15+0200\n" +"PO-Revision-Date: 2015-09-21 23:18+0200\n" "Last-Translator: Olexandr \n" "Language-Team: Ukrainian " "\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" "4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 2.4-dev\n" +"X-Generator: Weblate 2.4\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" @@ -113,9 +113,8 @@ msgid "enabled" msgstr "Увімкнено" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "A world named \"$1\" already exists" -msgstr "Неможливо створити світ: Світ з таким ім'ям вже існує" +msgstr "Світ з такою назвою ( \"$1\") вже існує" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" @@ -254,15 +253,15 @@ msgstr "Успішно встановлено:" #: builtin/mainmenu/store.lua msgid "Unsorted" -msgstr "" +msgstr "Невідсортоване" #: builtin/mainmenu/store.lua msgid "re-Install" -msgstr "" +msgstr "Перевстановити" #: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "" +msgstr "Активні учасники" #: builtin/mainmenu/tab_credits.lua msgid "Core Developers" @@ -460,7 +459,7 @@ msgstr "Масштаб інтерфейсу" #: builtin/mainmenu/tab_settings.lua msgid "Generate Normalmaps" -msgstr "" +msgstr "Генерувати карти нормалей" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -488,7 +487,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua msgid "None" -msgstr "" +msgstr "Нічого" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" @@ -500,7 +499,7 @@ msgstr "Непрозора вода" #: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" -msgstr "" +msgstr "Оклюзія паралакса" #: builtin/mainmenu/tab_settings.lua msgid "Reset singleplayer world" @@ -726,6 +725,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" +"Керування за замовчуванням:\n" +"Коли меню не відображається:\n" +"- один дотик: активувати кнопку\n" +"- дотикнутися двічі: встановити/використати\n" +"- провести пальцем: роззирнутися\n" +"Коли відображається меню або інвертар:\n" +"- дотикнутися двічі (поза межами):\n" +" --> закрити\n" +"- Торкнутися купи, торкнутися комірки:\n" +" --> перемістити купу\n" +"- Торкнутися і тягнути, дотикнутися лругим пальцем\n" +" --> помістити один предмет у комірку\n" #: src/game.cpp msgid "Exit to Menu" @@ -769,7 +780,7 @@ msgstr "Народитися" #: src/game.cpp msgid "Shutting down..." -msgstr "" +msgstr "Вимкнення..." #: src/game.cpp msgid "Sound Volume" @@ -1180,7 +1191,6 @@ msgid "Sleep" msgstr "Сон" #: src/keycode.cpp -#, fuzzy msgid "Snapshot" msgstr "Знімок" From 31c2f03451b9372d0dfa1265378f3e8f88548d9e Mon Sep 17 00:00:00 2001 From: andrewgigena Date: Thu, 24 Sep 2015 15:53:00 +0200 Subject: [PATCH 450/670] Translated using Weblate (Spanish) Currently translated at 100.0% (278 of 278 strings) --- po/es/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 7a9d11a5d..18fc35e16 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-20 18:00+0200\n" -"Last-Translator: Laura Arjona Reina \n" +"PO-Revision-Date: 2015-09-24 15:52+0200\n" +"Last-Translator: andrewgigena \n" "Language-Team: Spanish " "\n" "Language: es\n" @@ -17,11 +17,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.4-dev\n" +"X-Generator: Weblate 2.5\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "Ha ocurrido un error en un script de Lua, como en un mod:" +msgstr "Ha ocurrido un error en un script de Lua, por ejemplo en un mod:" #: builtin/fstk/ui.lua msgid "An error occured:" @@ -41,7 +41,7 @@ msgstr "Volver a conectar" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "El servidor ha solicitado volver a conectar:" +msgstr "El servidor ha solicitado una reconexión:" #: builtin/mainmenu/common.lua src/game.cpp msgid "Loading..." From 8b7860ec70d05013f6a6987b2dff9884d828b796 Mon Sep 17 00:00:00 2001 From: Luca Gronmaier Date: Sat, 26 Sep 2015 18:43:29 +0200 Subject: [PATCH 451/670] Translated using Weblate (German) Currently translated at 100.0% (278 of 278 strings) --- po/de/minetest.po | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index 0c78c164f..ce7c6a822 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-17 15:13+0200\n" -"Last-Translator: pilino1234 \n" +"PO-Revision-Date: 2015-09-26 18:43+0200\n" +"Last-Translator: Luca Gronmaier \n" "Language-Team: German " "\n" "Language: de\n" @@ -17,11 +17,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.4-dev\n" +"X-Generator: Weblate 2.5\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" -msgstr "Es ist ein Fehler in einem Lua-Skript wie einer Mod aufgetreten:" +msgstr "Es ist ein Fehler in einem Lua-Skript aufgetreten, z.b in einem Mod:" #: builtin/fstk/ui.lua msgid "An error occured:" @@ -37,7 +37,7 @@ msgstr "OK" #: builtin/fstk/ui.lua msgid "Reconnect" -msgstr "Wiederverbinden" +msgstr "Erneut verbinden" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" @@ -49,13 +49,13 @@ msgstr "Lädt…" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "" +msgstr "Protokollversionskonflikt mit dem Server " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Bitte versuchen Sie die \"puiblic serverlist\" Einstellung zu aktivieren und " -"überprüfen Sie Ihre Internetverbindung." +"Versuche die Öffentliche Serverliste neu zu laden bzw. prüfe deine " +"Internetverbindung." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_rename_modpack.lua src/guiKeyChangeMenu.cpp @@ -290,7 +290,7 @@ msgstr "Modinformation:" #: builtin/mainmenu/tab_mods.lua msgid "Mods" -msgstr "Mods" +msgstr "Modifikationen" #: builtin/mainmenu/tab_mods.lua msgid "No mod description available" @@ -433,7 +433,7 @@ msgstr "Bilinearer Filter" #: builtin/mainmenu/tab_settings.lua msgid "Bumpmapping" -msgstr "Bumpmapping" +msgstr "Bumpmappen" #: builtin/mainmenu/tab_settings.lua msgid "Change keys" @@ -497,7 +497,7 @@ msgstr "Undurchs. Wasser" #: builtin/mainmenu/tab_settings.lua msgid "Parallax Occlusion" -msgstr "Parallax Occlusion" +msgstr "Parallax Oklusion" #: builtin/mainmenu/tab_settings.lua msgid "Reset singleplayer world" @@ -588,9 +588,8 @@ msgid "Texturepacks" msgstr "Texturpakete" #: src/client.cpp -#, fuzzy msgid "Connection timed out." -msgstr "Verbindungsfehler (Zeitüberschreitung?)" +msgstr "Verbindungsfehler, Zeitüberschreitung." #: src/client.cpp msgid "Done!" @@ -917,7 +916,7 @@ msgstr "Tonlautstärke: " #: src/keycode.cpp msgid "Apps" -msgstr "Apps" +msgstr "Anwendungen" #: src/keycode.cpp msgid "Attn" @@ -933,7 +932,7 @@ msgstr "Feststellen" #: src/keycode.cpp msgid "Clear" -msgstr "Clear" +msgstr "sauber" #: src/keycode.cpp msgid "Comma" @@ -945,11 +944,11 @@ msgstr "Strg" #: src/keycode.cpp msgid "Convert" -msgstr "Convert" +msgstr "Konventierung" #: src/keycode.cpp msgid "CrSel" -msgstr "CrSel" +msgstr "Cr Sel" #: src/keycode.cpp msgid "Down" @@ -961,7 +960,7 @@ msgstr "Ende" #: src/keycode.cpp msgid "Erase OEF" -msgstr "Erase OEF" +msgstr "Verdecke OEF" #: src/keycode.cpp msgid "Escape" @@ -977,7 +976,7 @@ msgstr "Ausführen" #: src/keycode.cpp msgid "Final" -msgstr "Final" +msgstr "Ziel" #: src/keycode.cpp msgid "Help" @@ -1037,7 +1036,7 @@ msgstr "Minus" #: src/keycode.cpp msgid "Mode Change" -msgstr "Mode Change" +msgstr "Modus wechseln" #: src/keycode.cpp msgid "Next" @@ -1045,7 +1044,7 @@ msgstr "Bild runter" #: src/keycode.cpp msgid "Nonconvert" -msgstr "Nonconvert" +msgstr "Keine konventierung" #: src/keycode.cpp msgid "Num Lock" @@ -1109,7 +1108,7 @@ msgstr "Ziffernblock 9" #: src/keycode.cpp msgid "OEM Clear" -msgstr "OEM Clear" +msgstr "OEM Reinigen" #: src/keycode.cpp msgid "PA1" @@ -1165,11 +1164,11 @@ msgstr "Rollen" #: src/keycode.cpp msgid "Select" -msgstr "Select" +msgstr "Auswählen" #: src/keycode.cpp msgid "Shift" -msgstr "Umsch." +msgstr "L. Umsch" #: src/keycode.cpp msgid "Sleep" From d441159fb7a1bfeb67c56a86d5fbf5eb4a75bca6 Mon Sep 17 00:00:00 2001 From: pilino1234 Date: Sat, 26 Sep 2015 18:45:55 +0200 Subject: [PATCH 452/670] Translated using Weblate (German) Currently translated at 100.0% (278 of 278 strings) --- po/de/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index ce7c6a822..f2a81de08 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-26 18:43+0200\n" -"Last-Translator: Luca Gronmaier \n" +"PO-Revision-Date: 2015-09-26 18:45+0200\n" +"Last-Translator: pilino1234 \n" "Language-Team: German " "\n" "Language: de\n" @@ -49,7 +49,7 @@ msgstr "Lädt…" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "Protokollversionskonflikt mit dem Server " +msgstr "Serverprotokollversionsfehler" #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." From 7521d15bf2ff19c0993ba46d6a83c1e4368b44cf Mon Sep 17 00:00:00 2001 From: Luca Gronmaier Date: Sat, 26 Sep 2015 18:47:01 +0200 Subject: [PATCH 453/670] Translated using Weblate (German) Currently translated at 100.0% (278 of 278 strings) --- po/de/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index f2a81de08..ffacc53d9 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-26 18:45+0200\n" -"Last-Translator: pilino1234 \n" +"PO-Revision-Date: 2015-09-26 18:47+0200\n" +"Last-Translator: Luca Gronmaier \n" "Language-Team: German " "\n" "Language: de\n" @@ -49,7 +49,7 @@ msgstr "Lädt…" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch, server " -msgstr "Serverprotokollversionsfehler" +msgstr "Serverprotokollversionsfehler " #: builtin/mainmenu/common.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -97,7 +97,7 @@ msgstr "Modpacks verstecken" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" -msgstr "Mod:" +msgstr "Modifikation:" #: builtin/mainmenu/dlg_config_world.lua src/guiKeyChangeMenu.cpp msgid "Save" @@ -113,7 +113,7 @@ msgstr "Aktiviert" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "Eine Welt namens \"$1\" existiert bereits" +msgstr "Eine Welt mit dem Namen „$1“ existiert bereits" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" From 8373df623bf147bd50e1fee63045bb94b375c392 Mon Sep 17 00:00:00 2001 From: pilino1234 Date: Fri, 2 Oct 2015 20:11:01 +0200 Subject: [PATCH 454/670] Translated using Weblate (German) Currently translated at 100.0% (278 of 278 strings) --- po/de/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index ffacc53d9..77b436a35 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-26 18:47+0200\n" -"Last-Translator: Luca Gronmaier \n" +"PO-Revision-Date: 2015-10-02 20:11+0200\n" +"Last-Translator: pilino1234 \n" "Language-Team: German " "\n" "Language: de\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.5\n" +"X-Generator: Weblate 2.5-dev\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" @@ -944,7 +944,7 @@ msgstr "Strg" #: src/keycode.cpp msgid "Convert" -msgstr "Konventierung" +msgstr "Konvertierung" #: src/keycode.cpp msgid "CrSel" From 94464fce70c729bc0499d471862ffba53410d41e Mon Sep 17 00:00:00 2001 From: OdnetninI Date: Sun, 4 Oct 2015 12:36:17 +0200 Subject: [PATCH 455/670] Translated using Weblate (Spanish) Currently translated at 99.6% (277 of 278 strings) --- po/es/minetest.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 18fc35e16..0ff61004a 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-09-12 23:20+0200\n" -"PO-Revision-Date: 2015-09-24 15:52+0200\n" -"Last-Translator: andrewgigena \n" +"PO-Revision-Date: 2015-10-04 12:36+0200\n" +"Last-Translator: OdnetninI \n" "Language-Team: Spanish " "\n" "Language: es\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.5\n" +"X-Generator: Weblate 2.5-dev\n" #: builtin/fstk/ui.lua msgid "An error occured in a Lua script, such as a mod:" @@ -654,12 +654,13 @@ msgid "needs_fallback_font" msgstr "needs_fallback_font" #: src/game.cpp +#, fuzzy msgid "" "\n" "Check debug.txt for details." msgstr "" "\n" -"Consulta debug.txt para obtener más detalles." +"Revisa el archivo debug.txt para más detalles." #: src/game.cpp msgid "Change Keys" From ce1a70c70355f2a08fc64d63b1fd3f23743d934f Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 4 Oct 2015 03:52:55 +0100 Subject: [PATCH 456/670] Mgv5: getGroundLevelAtPoint searches a larger range --- src/mapgen_v5.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index d534249a5..1e5e5dbf0 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -182,23 +182,24 @@ int MapgenV5::getGroundLevelAtPoint(v2s16 p) f *= 1.6; float h = NoisePerlin2D(&noise_height->np, p.X, p.Y, seed); - s16 search_top = water_level + 15; - s16 search_base = water_level; + s16 search_start = 128; // Only bother searching this range, actual + s16 search_end = -128; // ground level is rarely higher or lower. - s16 level = -31000; - for (s16 y = search_top; y >= search_base; y--) { + for (s16 y = search_start; y >= search_end; y--) { float n_ground = NoisePerlin3D(&noise_ground->np, p.X, y, p.Y, seed); + // If solid if (n_ground * f > y - h) { - if (y >= search_top - 7) - break; + // If either top 2 nodes of search are solid this is inside a + // mountain or floatland with no space for the player to spawn. + if (y >= search_start - 1) + return MAX_MAP_GENERATION_LIMIT; else - level = y; - break; + return y; // Ground below at least 2 nodes of space } } //printf("getGroundLevelAtPoint: %dus\n", t.stop()); - return level; + return -MAX_MAP_GENERATION_LIMIT; } From e62eac49d590ca53fa250c0367dd9850729156b3 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 14 Apr 2015 04:38:01 +0100 Subject: [PATCH 457/670] Mapgen: Add 4D fractal mapgen --- src/CMakeLists.txt | 1 + src/emerge.cpp | 2 + src/mapgen_fractal.cpp | 597 +++++++++++++++++++++++++++++++++++++++++ src/mapgen_fractal.h | 133 +++++++++ 4 files changed, 733 insertions(+) create mode 100644 src/mapgen_fractal.cpp create mode 100644 src/mapgen_fractal.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 32e25c3bd..72b52436c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -352,6 +352,7 @@ set(common_SRCS map.cpp mapblock.cpp mapgen.cpp + mapgen_fractal.cpp mapgen_singlenode.cpp mapgen_v5.cpp mapgen_v6.cpp diff --git a/src/emerge.cpp b/src/emerge.cpp index 92edd2007..3532ca29d 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "map.h" #include "mapblock.h" +#include "mapgen_fractal.h" #include "mapgen_v5.h" #include "mapgen_v6.h" #include "mapgen_v7.h" @@ -104,6 +105,7 @@ MapgenDesc g_reg_mapgens[] = { {"v5", new MapgenFactoryV5, true}, {"v6", new MapgenFactoryV6, true}, {"v7", new MapgenFactoryV7, true}, + {"fractal", new MapgenFactoryFractal, false}, {"singlenode", new MapgenFactorySinglenode, false}, }; diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp new file mode 100644 index 000000000..144fa29b2 --- /dev/null +++ b/src/mapgen_fractal.cpp @@ -0,0 +1,597 @@ +/* +Minetest +Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Additional development and fractal code by paramat + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + + +#include "mapgen.h" +#include "voxel.h" +#include "noise.h" +#include "mapblock.h" +#include "mapnode.h" +#include "map.h" +#include "content_sao.h" +#include "nodedef.h" +#include "voxelalgorithms.h" +#include "settings.h" // For g_settings +#include "emerge.h" +#include "dungeongen.h" +#include "cavegen.h" +#include "treegen.h" +#include "mg_biome.h" +#include "mg_ore.h" +#include "mg_decoration.h" +#include "mapgen_fractal.h" + + +FlagDesc flagdesc_mapgen_fractal[] = { + {"julia", MGFRACTAL_JULIA}, + {NULL, 0} +}; + +/////////////////////////////////////////////////////////////////////////////////////// + + +MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge) + : Mapgen(mapgenid, params, emerge) +{ + this->m_emerge = emerge; + this->bmgr = emerge->biomemgr; + + //// amount of elements to skip for the next index + //// for noise/height/biome maps (not vmanip) + this->ystride = csize.X; + this->zstride = csize.X * (csize.Y + 2); + + this->biomemap = new u8[csize.X * csize.Z]; + this->heightmap = new s16[csize.X * csize.Z]; + this->heatmap = NULL; + this->humidmap = NULL; + + MapgenFractalParams *sp = (MapgenFractalParams *)params->sparams; + this->spflags = sp->spflags; + this->iterations = sp->iterations; + this->scale_x = sp->scale_x; + this->scale_y = sp->scale_y; + this->scale_z = sp->scale_z; + this->offset_x = sp->offset_x; + this->offset_y = sp->offset_y; + this->offset_z = sp->offset_z; + + //// 3d terrain noise + noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); + + //// Biome noise + noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); + noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat_blend = new Noise(¶ms->np_biome_heat_blend, seed, csize.X, csize.Z); + noise_humidity_blend = new Noise(¶ms->np_biome_humidity_blend, seed, csize.X, csize.Z); + + //// Resolve nodes to be used + INodeDefManager *ndef = emerge->ndef; + + c_stone = ndef->getId("mapgen_stone"); + c_water_source = ndef->getId("mapgen_water_source"); + c_lava_source = ndef->getId("mapgen_lava_source"); + c_desert_stone = ndef->getId("mapgen_desert_stone"); + c_ice = ndef->getId("mapgen_ice"); + c_sandstone = ndef->getId("mapgen_sandstone"); + + c_cobble = ndef->getId("mapgen_cobble"); + c_stair_cobble = ndef->getId("mapgen_stair_cobble"); + c_mossycobble = ndef->getId("mapgen_mossycobble"); + c_sandstonebrick = ndef->getId("mapgen_sandstonebrick"); + c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick"); + + if (c_ice == CONTENT_IGNORE) + c_ice = CONTENT_AIR; + if (c_mossycobble == CONTENT_IGNORE) + c_mossycobble = c_cobble; + if (c_stair_cobble == CONTENT_IGNORE) + c_stair_cobble = c_cobble; + if (c_sandstonebrick == CONTENT_IGNORE) + c_sandstonebrick = c_sandstone; + if (c_stair_sandstonebrick == CONTENT_IGNORE) + c_stair_sandstonebrick = c_sandstone; +} + + +MapgenFractal::~MapgenFractal() +{ + delete noise_cave1; + delete noise_cave2; + + delete noise_heat; + delete noise_humidity; + delete noise_heat_blend; + delete noise_humidity_blend; + + delete[] heightmap; + delete[] biomemap; +} + + +MapgenFractalParams::MapgenFractalParams() +{ + spflags = 0; + + iterations = 9; + scale_x = 1024; + scale_y = 256; + scale_z = 1024; + offset_x = -1.75; + offset_y = 0; + offset_z = 0; + slice_w = 0.5; + julia_x = 0.33; + julia_y = 0.33; + julia_z = 0.33; + julia_w = 0.33; + + np_cave1 = NoiseParams(0, 12, v3f(128, 128, 128), 52534, 4, 0.5, 2.0); + np_cave2 = NoiseParams(0, 12, v3f(128, 128, 128), 10325, 4, 0.5, 2.0); +} + + +void MapgenFractalParams::readParams(const Settings *settings) +{ + settings->getFlagStrNoEx("mgfractal_spflags", spflags, flagdesc_mapgen_fractal); + + settings->getU16NoEx("mgfractal_iterations", iterations); + settings->getFloatNoEx("mgfractal_scale_x", scale_x); + settings->getFloatNoEx("mgfractal_scale_y", scale_y); + settings->getFloatNoEx("mgfractal_scale_z", scale_z); + settings->getFloatNoEx("mgfractal_offset_x", offset_x); + settings->getFloatNoEx("mgfractal_offset_y", offset_y); + settings->getFloatNoEx("mgfractal_offset_z", offset_z); + settings->getFloatNoEx("mgfractal_slice_w", slice_w); + settings->getFloatNoEx("mgfractal_julia_x", julia_x); + settings->getFloatNoEx("mgfractal_julia_y", julia_y); + settings->getFloatNoEx("mgfractal_julia_z", julia_z); + settings->getFloatNoEx("mgfractal_julia_w", julia_w); + + settings->getNoiseParams("mgfractal_np_cave1", np_cave1); + settings->getNoiseParams("mgfractal_np_cave2", np_cave2); +} + + +void MapgenFractalParams::writeParams(Settings *settings) const +{ + settings->setFlagStr("mgfractal_spflags", spflags, flagdesc_mapgen_fractal, U32_MAX); + + settings->setU16("mgfractal_iterations", iterations); + settings->setFloat("mgfractal_scale_x", scale_x); + settings->setFloat("mgfractal_scale_y", scale_y); + settings->setFloat("mgfractal_scale_z", scale_z); + settings->setFloat("mgfractal_offset_x", offset_x); + settings->setFloat("mgfractal_offset_y", offset_y); + settings->setFloat("mgfractal_offset_z", offset_z); + settings->setFloat("mgfractal_slice_w", slice_w); + settings->setFloat("mgfractal_julia_x", julia_x); + settings->setFloat("mgfractal_julia_y", julia_y); + settings->setFloat("mgfractal_julia_z", julia_z); + settings->setFloat("mgfractal_julia_w", julia_w); + + settings->setNoiseParams("mgfractal_np_cave1", np_cave1); + settings->setNoiseParams("mgfractal_np_cave2", np_cave2); +} + + +///////////////////////////////////////////////////////////////// + + +int MapgenFractal::getGroundLevelAtPoint(v2s16 p) +{ + s16 search_top = water_level + 128; + s16 search_base = water_level; + s16 level = -MAX_MAP_GENERATION_LIMIT; + for (s16 y = search_top; y >= search_base; y--) { + if (getTerrainAtPoint(p.X, y, p.Y)) + return y; + } + + return level; +} + + +void MapgenFractal::makeChunk(BlockMakeData *data) +{ + // Pre-conditions + assert(data->vmanip); + assert(data->nodedef); + assert(data->blockpos_requested.X >= data->blockpos_min.X && + data->blockpos_requested.Y >= data->blockpos_min.Y && + data->blockpos_requested.Z >= data->blockpos_min.Z); + assert(data->blockpos_requested.X <= data->blockpos_max.X && + data->blockpos_requested.Y <= data->blockpos_max.Y && + data->blockpos_requested.Z <= data->blockpos_max.Z); + + this->generating = true; + this->vm = data->vmanip; + this->ndef = data->nodedef; + //TimeTaker t("makeChunk"); + + v3s16 blockpos_min = data->blockpos_min; + v3s16 blockpos_max = data->blockpos_max; + node_min = blockpos_min * MAP_BLOCKSIZE; + node_max = (blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1); + full_node_min = (blockpos_min - 1) * MAP_BLOCKSIZE; + full_node_max = (blockpos_max + 2) * MAP_BLOCKSIZE - v3s16(1, 1, 1); + + blockseed = getBlockSeed2(full_node_min, seed); + + // Make some noise + calculateNoise(); + + // Generate base terrain, mountains, and ridges with initial heightmaps + s16 stone_surface_max_y = generateTerrain(); + + // Create heightmap + updateHeightmap(node_min, node_max); + + // Create biomemap at heightmap surface + bmgr->calcBiomes(csize.X, csize.Z, noise_heat->result, + noise_humidity->result, heightmap, biomemap); + + // Actually place the biome-specific nodes + MgStoneType stone_type = generateBiomes(noise_heat->result, noise_humidity->result); + + if (flags & MG_CAVES) + generateCaves(stone_surface_max_y); + + if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) { + DungeonParams dp; + + dp.np_rarity = nparams_dungeon_rarity; + dp.np_density = nparams_dungeon_density; + dp.np_wetness = nparams_dungeon_wetness; + dp.c_water = c_water_source; + if (stone_type == STONE) { + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; + + dp.diagonal_dirs = false; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; + } else if (stone_type == DESERT_STONE) { + dp.c_cobble = c_desert_stone; + dp.c_moss = c_desert_stone; + dp.c_stair = c_desert_stone; + + dp.diagonal_dirs = true; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 3, 2); + dp.roomsize = v3s16(2, 5, 2); + dp.notifytype = GENNOTIFY_TEMPLE; + } else if (stone_type == SANDSTONE) { + dp.c_cobble = c_sandstonebrick; + dp.c_moss = c_sandstonebrick; + dp.c_stair = c_sandstonebrick; + + dp.diagonal_dirs = false; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 2, 2); + dp.roomsize = v3s16(2, 0, 2); + dp.notifytype = GENNOTIFY_DUNGEON; + } + + DungeonGen dgen(this, &dp); + dgen.generate(blockseed, full_node_min, full_node_max); + } + + // Generate the registered decorations + m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max); + + // Generate the registered ores + m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max); + + // Sprinkle some dust on top after everything else was generated + dustTopNodes(); + + //printf("makeChunk: %dms\n", t.stop()); + + updateLiquid(&data->transforming_liquid, full_node_min, full_node_max); + + if (flags & MG_LIGHT) + calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0), + full_node_min, full_node_max); + + //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE, + // node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF); + + this->generating = false; +} + + +void MapgenFractal::calculateNoise() +{ + //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO); + int x = node_min.X; + int y = node_min.Y - 1; + int z = node_min.Z; + + if (flags & MG_CAVES) { + noise_cave1->perlinMap3D(x, y, z); + noise_cave2->perlinMap3D(x, y, z); + } + + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); + noise_heat_blend->perlinMap2D(x, z); + noise_humidity_blend->perlinMap2D(x, z); + + for (s32 i = 0; i < csize.X * csize.Z; i++) { + noise_heat->result[i] += noise_heat_blend->result[i]; + noise_humidity->result[i] += noise_humidity_blend->result[i]; + } + + heatmap = noise_heat->result; + humidmap = noise_humidity->result; + //printf("calculateNoise: %dus\n", t.stop()); +} + + +bool MapgenFractal::getTerrainAtPoint(s16 x, s16 y, s16 z) +{ + float cx, cy, cz, cw, ox, oy, oz, ow; + + if (spflags & MGFRACTAL_JULIA) { // Julia set + cx = julia_x; + cy = julia_y; + cz = julia_z; + cw = julia_w; + ox = (float)x / scale_x + offset_x; + oy = (float)y / scale_y + offset_y; + oz = (float)z / scale_z + offset_z; + ow = slice_w; + } else { // Mandelbrot set + cx = (float)x / scale_x + offset_x; + cy = (float)y / scale_y + offset_y; + cz = (float)z / scale_z + offset_z; + cw = slice_w; + ox = 0.0; + oy = 0.0; + oz = 0.0; + ow = 0.0; + } + + for (u16 iter = 0; iter < iterations; iter++) { + // 4D "Roundy" Mandelbrot set + float nx = ox * ox - oy * oy - oz * oz - ow * ow + cx; + float ny = 2.0 * (ox * oy + oz * ow) + cy; + float nz = 2.0 * (ox * oz + oy * ow) + cz; + float nw = 2.0 * (ox * ow + oy * oz) + cw; + + if (nx * nx + ny * ny + nz * nz + nw * nw > 4.0) { + return false; + } + + ox = nx; + oy = ny; + oz = nz; + ow = nw; + } + + return true; +} + + +s16 MapgenFractal::generateTerrain() +{ + MapNode n_air(CONTENT_AIR); + MapNode n_stone(c_stone); + MapNode n_water(c_water_source); + + s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 i = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, i++) { + if (vm->m_data[i].getContent() == CONTENT_IGNORE) { + if (getTerrainAtPoint(x, y, z)) { + vm->m_data[i] = n_stone; + if (y > stone_surface_max_y) + stone_surface_max_y = y; + } else if (y <= water_level) { + vm->m_data[i] = n_water; + } else { + vm->m_data[i] = n_air; + } + } + } + } + + return stone_surface_max_y; +} + + +MgStoneType MapgenFractal::generateBiomes(float *heat_map, float *humidity_map) +{ + v3s16 em = vm->m_area.getExtent(); + u32 index = 0; + MgStoneType stone_type = STONE; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 x = node_min.X; x <= node_max.X; x++, index++) { + Biome *biome = NULL; + u16 depth_top = 0; + u16 base_filler = 0; + u16 depth_water_top = 0; + u32 vi = vm->m_area.index(x, node_max.Y, z); + + // Check node at base of mapchunk above, either a node of a previously + // generated mapchunk or if not, a node of overgenerated base terrain. + content_t c_above = vm->m_data[vi + em.X].getContent(); + bool air_above = c_above == CONTENT_AIR; + bool water_above = c_above == c_water_source; + + // If there is air or water above enable top/filler placement, otherwise force + // nplaced to stone level by setting a number exceeding any possible filler depth. + u16 nplaced = (air_above || water_above) ? 0 : U16_MAX; + + + for (s16 y = node_max.Y; y >= node_min.Y; y--) { + content_t c = vm->m_data[vi].getContent(); + + // Biome is recalculated each time an upper surface is detected while + // working down a column. The selected biome then remains in effect for + // all nodes below until the next surface and biome recalculation. + // Biome is recalculated: + // 1. At the surface of stone below air or water. + // 2. At the surface of water below air. + // 3. When stone or water is detected but biome has not yet been calculated. + if ((c == c_stone && (air_above || water_above || !biome)) || + (c == c_water_source && (air_above || !biome))) { + biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); + depth_top = biome->depth_top; + base_filler = depth_top + biome->depth_filler; + depth_water_top = biome->depth_water_top; + + // Detect stone type for dungeons during every biome calculation. + // This is more efficient than detecting per-node and will not + // miss any desert stone or sandstone biomes. + if (biome->c_stone == c_desert_stone) + stone_type = DESERT_STONE; + else if (biome->c_stone == c_sandstone) + stone_type = SANDSTONE; + } + + if (c == c_stone) { + content_t c_below = vm->m_data[vi - em.X].getContent(); + + // If the node below isn't solid, make this node stone, so that + // any top/filler nodes above are structurally supported. + // This is done by aborting the cycle of top/filler placement + // immediately by forcing nplaced to stone level. + if (c_below == CONTENT_AIR || c_below == c_water_source) + nplaced = U16_MAX; + + if (nplaced < depth_top) { + vm->m_data[vi] = MapNode(biome->c_top); + nplaced++; + } else if (nplaced < base_filler) { + vm->m_data[vi] = MapNode(biome->c_filler); + nplaced++; + } else { + vm->m_data[vi] = MapNode(biome->c_stone); + } + + air_above = false; + water_above = false; + } else if (c == c_water_source) { + vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? + biome->c_water_top : biome->c_water); + nplaced = 0; // Enable top/filler placement for next surface + air_above = false; + water_above = true; + } else if (c == CONTENT_AIR) { + nplaced = 0; // Enable top/filler placement for next surface + air_above = true; + water_above = false; + } else { // Possible various nodes overgenerated from neighbouring mapchunks + nplaced = U16_MAX; // Disable top/filler placement + air_above = false; + water_above = false; + } + + vm->m_area.add_y(em, vi, -1); + } + } + + return stone_type; +} + + +void MapgenFractal::dustTopNodes() +{ + if (node_max.Y < water_level) + return; + + v3s16 em = vm->m_area.getExtent(); + u32 index = 0; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 x = node_min.X; x <= node_max.X; x++, index++) { + Biome *biome = (Biome *)bmgr->getRaw(biomemap[index]); + + if (biome->c_dust == CONTENT_IGNORE) + continue; + + u32 vi = vm->m_area.index(x, full_node_max.Y, z); + content_t c_full_max = vm->m_data[vi].getContent(); + s16 y_start; + + if (c_full_max == CONTENT_AIR) { + y_start = full_node_max.Y - 1; + } else if (c_full_max == CONTENT_IGNORE) { + vi = vm->m_area.index(x, node_max.Y + 1, z); + content_t c_max = vm->m_data[vi].getContent(); + + if (c_max == CONTENT_AIR) + y_start = node_max.Y; + else + continue; + } else { + continue; + } + + vi = vm->m_area.index(x, y_start, z); + for (s16 y = y_start; y >= node_min.Y - 1; y--) { + if (vm->m_data[vi].getContent() != CONTENT_AIR) + break; + + vm->m_area.add_y(em, vi, -1); + } + + content_t c = vm->m_data[vi].getContent(); + if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE && c != biome->c_dust) { + vm->m_area.add_y(em, vi, 1); + vm->m_data[vi] = MapNode(biome->c_dust); + } + } +} + + +void MapgenFractal::generateCaves(s16 max_stone_y) +{ + if (max_stone_y >= node_min.Y) { + u32 index = 0; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 i = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) { + float d1 = contour(noise_cave1->result[index]); + float d2 = contour(noise_cave2->result[index]); + if (d1 * d2 > 0.3) { + content_t c = vm->m_data[i].getContent(); + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) + continue; + + vm->m_data[i] = MapNode(CONTENT_AIR); + } + } + } + } +} + diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h new file mode 100644 index 000000000..71729cbed --- /dev/null +++ b/src/mapgen_fractal.h @@ -0,0 +1,133 @@ +/* +Minetest +Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Additional development and fractal code by paramat + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef MAPGEN_FRACTAL_HEADER +#define MAPGEN_FRACTAL_HEADER + +#include "mapgen.h" + +/////////////////// Mapgen Fractal flags +#define MGFRACTAL_JULIA 0x01 + +class BiomeManager; + +extern FlagDesc flagdesc_mapgen_fractal[]; + + +struct MapgenFractalParams : public MapgenSpecificParams { + u32 spflags; + + u16 iterations; + float scale_x; + float scale_y; + float scale_z; + float offset_x; + float offset_y; + float offset_z; + float slice_w; + float julia_x; + float julia_y; + float julia_z; + float julia_w; + + NoiseParams np_cave1; + NoiseParams np_cave2; + + MapgenFractalParams(); + ~MapgenFractalParams() {} + + void readParams(const Settings *settings); + void writeParams(Settings *settings) const; +}; + +class MapgenFractal : public Mapgen { +public: + EmergeManager *m_emerge; + BiomeManager *bmgr; + + int ystride; + int zstride; + u32 spflags; + + v3s16 node_min; + v3s16 node_max; + v3s16 full_node_min; + v3s16 full_node_max; + + u16 iterations; + float scale_x; + float scale_y; + float scale_z; + float offset_x; + float offset_y; + float offset_z; + float slice_w; + float julia_x; + float julia_y; + float julia_z; + float julia_w; + + Noise *noise_cave1; + Noise *noise_cave2; + + Noise *noise_heat; + Noise *noise_humidity; + Noise *noise_heat_blend; + Noise *noise_humidity_blend; + + content_t c_stone; + content_t c_water_source; + content_t c_lava_source; + content_t c_desert_stone; + content_t c_ice; + content_t c_sandstone; + + content_t c_cobble; + content_t c_stair_cobble; + content_t c_mossycobble; + content_t c_sandstonebrick; + content_t c_stair_sandstonebrick; + + MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge); + ~MapgenFractal(); + + virtual void makeChunk(BlockMakeData *data); + int getGroundLevelAtPoint(v2s16 p); + void calculateNoise(); + bool getTerrainAtPoint(s16 x, s16 y, s16 z); + s16 generateTerrain(); + MgStoneType generateBiomes(float *heat_map, float *humidity_map); + void dustTopNodes(); + void generateCaves(s16 max_stone_y); +}; + +struct MapgenFactoryFractal : public MapgenFactory { + Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge) + { + return new MapgenFractal(mgid, params, emerge); + }; + + MapgenSpecificParams *createMapgenParams() + { + return new MapgenFractalParams(); + }; +}; + +#endif From caf0df8924d4a64feee40170e7235eb2202ddde5 Mon Sep 17 00:00:00 2001 From: kilbith Date: Sat, 3 Oct 2015 16:01:39 +0200 Subject: [PATCH 458/670] Add viewing range GUI setting --- builtin/mainmenu/tab_settings.lua | 93 +++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 4 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index e13fd967f..d39030b1d 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -192,13 +192,40 @@ local function scrollbar_to_gui_scale(value) if (value <= 700) then return ((value / 700) * 1.0) + 0.25 end - if (value <=1000) then + if (value <= 1000) then return ((value - 700) / 100) + 1.25 end return 1 end +local function viewing_range_min_to_scrollbar() + local current_value_min = tonumber(core.setting_get("viewing_range_nodes_min")) + + if (current_value_min == nil) then + return 0 + end + return current_value_min * 2 +end + +local function viewing_range_max_to_scrollbar() + local current_value_max = tonumber(core.setting_get("viewing_range_nodes_max")) + + if (current_value_max == nil) then + return 0 + end + return current_value_max * 2 +end + +local function scrollbar_to_viewing_range(value) + value = tonumber(value) + + if (value <= 1000) then + return value / 2 + end + return 35 +end + local function formspec(tabview, name, tabdata) local tab_string = "box[0,0;3.5,4.0;#999999]" .. @@ -224,7 +251,7 @@ local function formspec(tabview, name, tabdata) .. getMipmapSettingIndex() .. "]" .. "label[3.85,2.15;".. fgettext("Antialiasing:") .. "]".. "dropdown[3.85,2.6;3.85;dd_antialiasing;" .. antialiasing[1][1] .. ";" - .. getAntialiasingSettingIndex() .. "]" .. + .. getAntialiasingSettingIndex() .. "]" .. "box[7.75,0;4,4;#999999]" .. "checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";" .. dump(core.setting_getbool("enable_shaders")) .. "]" @@ -240,7 +267,7 @@ local function formspec(tabview, name, tabdata) "box[0,4.25;3.5,1.1;#999999]" .. "label[0.25,4.25;" .. fgettext("GUI scale factor") .. "]" .. "scrollbar[0.25,4.75;3,0.4;sb_gui_scaling;horizontal;" .. - gui_scale_to_scrollbar() .. "]" .. + gui_scale_to_scrollbar() .. "]" .. "tooltip[sb_gui_scaling;" .. fgettext("Scaling factor applied to menu elements: ") .. dump(core.setting_get("gui_scaling")) .. "]" @@ -281,7 +308,45 @@ local function formspec(tabview, name, tabdata) "textlist[8.33,2.2;4,1;;#888888" .. fgettext("Waving Water") .. ";0;true]" .. "textlist[8.33,2.7;4,1;;#888888" .. fgettext("Waving Leaves") .. ";0;true]" .. "textlist[8.33,3.2;4,1;;#888888" .. fgettext("Waving Plants") .. ";0;true]" + end + + local get_vrange_min = core.setting_get("viewing_range_nodes_min") + local get_vrange_max = core.setting_get("viewing_range_nodes_max") + + if core.setting_getbool("viewing_range_auto") then + tab_string = tab_string .. + "box[3.75,3.5;3.75,2;#999999]" .. + "label[3.85,3.5;" .. fgettext("Viewing Range :") .. "]" .. + "label[3.85,4;" .. fgettext("Min.") .. "]" .. + "scrollbar[4.65,4.05;2.75,0.4;sb_viewing_range_min;horizontal;" .. + viewing_range_min_to_scrollbar() .. "]" .. + "tooltip[sb_viewing_range_min;" .. fgettext("Minimal Viewing Range: $1 nodes", + get_vrange_min) .. "]" .. + "checkbox[3.85,4.8;cb_vrange_auto_adjust;" .. fgettext("Auto-adjust") .. ";" .. + dump(core.setting_getbool("viewing_range_auto")) .. "]".. + "label[3.85,4.5;" .. fgettext("Max.") .. "]" .. + "scrollbar[4.65,4.55;2.75,0.4;sb_viewing_range_max;horizontal;" .. + viewing_range_max_to_scrollbar() .. "]" .. + "tooltip[sb_viewing_range_max;" .. fgettext("Maximal Viewing Range: $1 nodes", + get_vrange_max) .. "]" + + if (get_vrange_min == nil and get_vrange_min > get_vrange_max) then + core.setting_set("viewing_range_nodes_min", get_vrange_max) end + elseif (core.setting_getbool("viewing_range_auto") == nil or + core.setting_getbool("viewing_range_auto") == false) then + tab_string = tab_string .. + "box[3.75,3.5;3.75,1.5;#999999]" .. + "label[3.85,3.5;" .. fgettext("Viewing Range :") .. "]" .. + "label[3.85,4;" .. fgettext("Fixed") .. "]" .. + "scrollbar[4.65,4.05;2.75,0.4;sb_viewing_range_fixed;horizontal;" .. + viewing_range_min_to_scrollbar() .. "]" .. + "tooltip[sb_viewing_range_fixed;" .. fgettext("Fixed Viewing Range: $1 nodes", + get_vrange_min) .. "]" .. + "checkbox[3.85,4.3;cb_vrange_auto_adjust;" .. fgettext("Auto-adjust") .. ";" .. + dump(core.setting_getbool("viewing_range_auto")) .. "]" + end + return tab_string end @@ -311,7 +376,10 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) core.setting_set("enable_node_highlighting", fields["cb_node_highlighting"]) return true end - + if fields["cb_vrange_auto_adjust"] then + core.setting_set("viewing_range_auto", fields["cb_vrange_auto_adjust"]) + return true + end if fields["cb_shaders"] then if (core.setting_get("video_driver") == "direct3d8" or core.setting_get("video_driver") == "direct3d9") then @@ -353,6 +421,23 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) return true end end + + for k, range in pairs({"min", "max", "fixed"}) do + if fields["sb_viewing_range_"..range] then + local event = core.explode_scrollbar_event(fields["sb_viewing_range_"..range]) + local tosave = string.format("%d", scrollbar_to_viewing_range(event.value)) + + if event.type == "CHG" and k < 3 then + core.setting_set("viewing_range_nodes_"..range, tosave) + return true + elseif event.type == "CHG" and k == 3 then + core.setting_set("viewing_range_nodes_min", tosave) + core.setting_set("viewing_range_nodes_max", tosave) + return true + end + end + end + if fields["btn_change_keys"] then core.show_keys_menu() return true From 8edc8a14e4507e4ef78b1a0d39d338ee2d4a721d Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 6 Oct 2015 19:08:53 +0200 Subject: [PATCH 459/670] Correct SRP documentation Previous statements were wrong. --- doc/world_format.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/world_format.txt b/doc/world_format.txt index 5be1f3913..a6255053e 100644 --- a/doc/world_format.txt +++ b/doc/world_format.txt @@ -47,8 +47,9 @@ in the base64 encoding. Format (since 0.4.13) of password hash is #1##, with the parts inside <> encoded in the base64 encoding. - is an RFC 5054 compatible SRP-2048-SHA1 verifier -of the given salt, password, and the player's name lowercased. + is an RFC 2945 compatible SRP verifier, +of the given salt, password, and the player's name lowercased, +using the 2048-bit group specified in RFC 5054 and the SHA-256 hash function. Example lines: - Player "celeron55", no password, privileges "interact" and "shout": From d152b55971a57f76211f3db07e864cac015edff2 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 6 Oct 2015 22:14:44 +0100 Subject: [PATCH 460/670] Android/Mapgen: Add fractal mapgen file to android makefiles --- build/android/jni/Android.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index faecf9003..324e1666b 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -173,6 +173,7 @@ LOCAL_SRC_FILES := \ jni/src/mapblock.cpp \ jni/src/mapblock_mesh.cpp \ jni/src/mapgen.cpp \ + jni/src/mapgen_fractal.cpp \ jni/src/mapgen_singlenode.cpp \ jni/src/mapgen_v5.cpp \ jni/src/mapgen_v6.cpp \ From 706e7cebeada1f3f1f060de8a4c6f1127f4209ad Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 7 Oct 2015 02:05:03 +0100 Subject: [PATCH 461/670] Fractal mapgen: Add seabed and large pseudorandom caves --- src/cavegen.cpp | 245 +++++++++++++++++++++++++++++++++++++++++ src/cavegen.h | 47 ++++++++ src/mapgen_fractal.cpp | 118 ++++++++++++-------- src/mapgen_fractal.h | 11 +- 4 files changed, 371 insertions(+), 50 deletions(-) diff --git a/src/cavegen.cpp b/src/cavegen.cpp index 8372f70b5..e0303900e 100644 --- a/src/cavegen.cpp +++ b/src/cavegen.cpp @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen_v5.h" #include "mapgen_v6.h" #include "mapgen_v7.h" +#include "mapgen_fractal.h" #include "cavegen.h" NoiseParams nparams_caveliquids(0, 1, v3f(150.0, 150.0, 150.0), 776, 3, 0.6, 2.0); @@ -807,3 +808,247 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz) } } } + + +///////////////////////////////////////// Caves Fractal + + +CaveFractal::CaveFractal(MapgenFractal *mg, PseudoRandom *ps) +{ + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->ps = ps; + this->c_water_source = mg->c_water_source; + this->c_lava_source = mg->c_lava_source; + this->c_ice = mg->c_ice; + this->np_caveliquids = &nparams_caveliquids; + + dswitchint = ps->range(1, 14); + flooded = ps->range(1, 2) == 2; + + part_max_length_rs = ps->range(2, 4); + tunnel_routepoints = ps->range(5, ps->range(15, 30)); + min_tunnel_diameter = 5; + max_tunnel_diameter = ps->range(7, ps->range(8, 24)); + + large_cave_is_flat = (ps->range(0, 1) == 0); +} + + +void CaveFractal::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ + node_min = nmin; + node_max = nmax; + main_direction = v3f(0, 0, 0); + + // Allowed route area size in nodes + ar = node_max - node_min + v3s16(1, 1, 1); + // Area starting point in nodes + of = node_min; + + // Allow a bit more + //(this should be more than the maximum radius of the tunnel) + s16 insure = 10; + s16 more = MYMAX(MAP_BLOCKSIZE - max_tunnel_diameter / 2 - insure, 1); + ar += v3s16(1,0,1) * more * 2; + of -= v3s16(1,0,1) * more; + + route_y_min = 0; + // Allow half a diameter + 7 over stone surface + route_y_max = -of.Y + max_stone_y + max_tunnel_diameter / 2 + 7; + + // Limit maximum to area + route_y_max = rangelim(route_y_max, 0, ar.Y - 1); + + s16 min = 0; + if (node_min.Y < water_level && node_max.Y > water_level) { + min = water_level - max_tunnel_diameter/3 - of.Y; + route_y_max = water_level + max_tunnel_diameter/3 - of.Y; + } + route_y_min = ps->range(min, min + max_tunnel_diameter); + route_y_min = rangelim(route_y_min, 0, route_y_max); + + s16 route_start_y_min = route_y_min; + s16 route_start_y_max = route_y_max; + + route_start_y_min = rangelim(route_start_y_min, 0, ar.Y - 1); + route_start_y_max = rangelim(route_start_y_max, route_start_y_min, ar.Y - 1); + + // Randomize starting position + orp = v3f( + (float)(ps->next() % ar.X) + 0.5, + (float)(ps->range(route_start_y_min, route_start_y_max)) + 0.5, + (float)(ps->next() % ar.Z) + 0.5 + ); + + // Add generation notify begin event + v3s16 abs_pos(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z); + GenNotifyType notifytype = GENNOTIFY_LARGECAVE_BEGIN; + mg->gennotify.addEvent(notifytype, abs_pos); + + // Generate some tunnel starting from orp + for (u16 j = 0; j < tunnel_routepoints; j++) + makeTunnel(j % dswitchint == 0); + + // Add generation notify end event + abs_pos = v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z); + notifytype = GENNOTIFY_LARGECAVE_END; + mg->gennotify.addEvent(notifytype, abs_pos); +} + + +void CaveFractal::makeTunnel(bool dirswitch) +{ + // Randomize size + s16 min_d = min_tunnel_diameter; + s16 max_d = max_tunnel_diameter; + rs = ps->range(min_d, max_d); + s16 rs_part_max_length_rs = rs * part_max_length_rs; + + v3s16 maxlen; + maxlen = v3s16( + rs_part_max_length_rs, + rs_part_max_length_rs / 2, + rs_part_max_length_rs + ); + + v3f vec; + // Jump downward sometimes + vec = v3f( + (float)(ps->next() % maxlen.X) - (float)maxlen.X / 2, + (float)(ps->next() % maxlen.Y) - (float)maxlen.Y / 2, + (float)(ps->next() % maxlen.Z) - (float)maxlen.Z / 2 + ); + + // Do not make caves that are above ground. + // It is only necessary to check the startpoint and endpoint. + v3s16 orpi(orp.X, orp.Y, orp.Z); + v3s16 veci(vec.X, vec.Y, vec.Z); + v3s16 p; + + p = orpi + veci + of + rs / 2; + if (p.Z >= node_min.Z && p.Z <= node_max.Z && + p.X >= node_min.X && p.X <= node_max.X) { + u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X); + s16 h = mg->heightmap[index]; + if (h < p.Y) + return; + } else if (p.Y > water_level) { + return; // If it's not in our heightmap, use a simple heuristic + } + + p = orpi + of + rs / 2; + if (p.Z >= node_min.Z && p.Z <= node_max.Z && + p.X >= node_min.X && p.X <= node_max.X) { + u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X); + s16 h = mg->heightmap[index]; + if (h < p.Y) + return; + } else if (p.Y > water_level) { + return; + } + + vec += main_direction; + + v3f rp = orp + vec; + if (rp.X < 0) + rp.X = 0; + else if (rp.X >= ar.X) + rp.X = ar.X - 1; + + if (rp.Y < route_y_min) + rp.Y = route_y_min; + else if (rp.Y >= route_y_max) + rp.Y = route_y_max - 1; + + if (rp.Z < 0) + rp.Z = 0; + else if (rp.Z >= ar.Z) + rp.Z = ar.Z - 1; + + vec = rp - orp; + + float veclen = vec.getLength(); + if (veclen < 0.05) + veclen = 1.0; + + // Every second section is rough + bool randomize_xz = (ps->range(1, 2) == 1); + + // Carve routes + for (float f = 0; f < 1.0; f += 1.0 / veclen) + carveRoute(vec, f, randomize_xz); + + orp = rp; +} + + +void CaveFractal::carveRoute(v3f vec, float f, bool randomize_xz) +{ + MapNode airnode(CONTENT_AIR); + MapNode waternode(c_water_source); + MapNode lavanode(c_lava_source); + + v3s16 startp(orp.X, orp.Y, orp.Z); + startp += of; + + float nval = NoisePerlin3D(np_caveliquids, startp.X, + startp.Y, startp.Z, mg->seed); + MapNode liquidnode = (nval < 0.40 && node_max.Y < MGFRACTAL_LAVA_DEPTH) ? + lavanode : waternode; + + v3f fp = orp + vec * f; + fp.X += 0.1 * ps->range(-10, 10); + fp.Z += 0.1 * ps->range(-10, 10); + v3s16 cp(fp.X, fp.Y, fp.Z); + + s16 d0 = -rs/2; + s16 d1 = d0 + rs; + if (randomize_xz) { + d0 += ps->range(-1, 1); + d1 += ps->range(-1, 1); + } + + for (s16 z0 = d0; z0 <= d1; z0++) { + s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); + for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { + s16 maxabsxz = MYMAX(abs(x0), abs(z0)); + + s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + + for (s16 y0 = -si2; y0 <= si2; y0++) { + if (large_cave_is_flat) { + // Make large caves not so tall + if (rs > 7 && abs(y0) >= rs / 3) + continue; + } + + v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0); + p += of; + + if (vm->m_area.contains(p) == false) + continue; + + u32 i = vm->m_area.index(p); + content_t c = vm->m_data[i].getContent(); + if (!ndef->get(c).is_ground_content) + continue; + + int full_ymin = node_min.Y - MAP_BLOCKSIZE; + int full_ymax = node_max.Y + MAP_BLOCKSIZE; + + if (flooded && full_ymin < water_level && + full_ymax > water_level) + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; + else if (flooded && full_ymax < water_level) + vm->m_data[i] = (p.Y < startp.Y - 4) ? + liquidnode : airnode; + else + vm->m_data[i] = airnode; + } + } + } +} diff --git a/src/cavegen.h b/src/cavegen.h index b9662587b..22ee5804d 100644 --- a/src/cavegen.h +++ b/src/cavegen.h @@ -22,10 +22,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1 #define MGV7_LAVA_DEPTH -256 +#define MGFRACTAL_LAVA_DEPTH -256 class MapgenV5; class MapgenV6; class MapgenV7; +class MapgenFractal; class CaveV5 { public: @@ -161,4 +163,49 @@ public: void carveRoute(v3f vec, float f, bool randomize_xz); }; +class CaveFractal { +public: + MapgenFractal *mg; + MMVManip *vm; + INodeDefManager *ndef; + + NoiseParams *np_caveliquids; + + s16 min_tunnel_diameter; + s16 max_tunnel_diameter; + u16 tunnel_routepoints; + int dswitchint; + int part_max_length_rs; + + bool large_cave_is_flat; + bool flooded; + + s16 max_stone_y; + v3s16 node_min; + v3s16 node_max; + + v3f orp; // starting point, relative to caved space + v3s16 of; // absolute coordinates of caved space + v3s16 ar; // allowed route area + s16 rs; // tunnel radius size + v3f main_direction; + + s16 route_y_min; + s16 route_y_max; + + PseudoRandom *ps; + + content_t c_water_source; + content_t c_lava_source; + content_t c_ice; + + int water_level; + + CaveFractal() {} + CaveFractal(MapgenFractal *mg, PseudoRandom *ps); + void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); + void makeTunnel(bool dirswitch); + void carveRoute(v3f vec, float f, bool randomize_xz); +}; + #endif diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp index 144fa29b2..03bd3b62f 100644 --- a/src/mapgen_fractal.cpp +++ b/src/mapgen_fractal.cpp @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek -Additional development and fractal code by paramat +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -73,9 +73,12 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager * this->offset_y = sp->offset_y; this->offset_z = sp->offset_z; - //// 3d terrain noise - noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); - noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); + //// 2D terrain noise + noise_seabed = new Noise(&sp->np_seabed, seed, csize.X, csize.Z); + + //// 3D terrain noise + noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); //// Biome noise noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); @@ -114,6 +117,8 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager * MapgenFractal::~MapgenFractal() { + delete noise_seabed; + delete noise_cave1; delete noise_cave2; @@ -132,20 +137,21 @@ MapgenFractalParams::MapgenFractalParams() spflags = 0; iterations = 9; - scale_x = 1024; - scale_y = 256; - scale_z = 1024; + scale_x = 1024.0; + scale_y = 256.0; + scale_z = 1024.0; offset_x = -1.75; - offset_y = 0; - offset_z = 0; + offset_y = 0.0; + offset_z = 0.0; slice_w = 0.5; julia_x = 0.33; julia_y = 0.33; julia_z = 0.33; julia_w = 0.33; - np_cave1 = NoiseParams(0, 12, v3f(128, 128, 128), 52534, 4, 0.5, 2.0); - np_cave2 = NoiseParams(0, 12, v3f(128, 128, 128), 10325, 4, 0.5, 2.0); + np_seabed = NoiseParams(-14, 9, v3f(600, 600, 600), 41900, 5, 0.6, 2.0); + np_cave1 = NoiseParams(0, 12, v3f(128, 128, 128), 52534, 4, 0.5, 2.0); + np_cave2 = NoiseParams(0, 12, v3f(128, 128, 128), 10325, 4, 0.5, 2.0); } @@ -166,6 +172,7 @@ void MapgenFractalParams::readParams(const Settings *settings) settings->getFloatNoEx("mgfractal_julia_z", julia_z); settings->getFloatNoEx("mgfractal_julia_w", julia_w); + settings->getNoiseParams("mgfractal_np_seabed", np_seabed); settings->getNoiseParams("mgfractal_np_cave1", np_cave1); settings->getNoiseParams("mgfractal_np_cave2", np_cave2); } @@ -188,6 +195,7 @@ void MapgenFractalParams::writeParams(Settings *settings) const settings->setFloat("mgfractal_julia_z", julia_z); settings->setFloat("mgfractal_julia_w", julia_w); + settings->setNoiseParams("mgfractal_np_seabed", np_seabed); settings->setNoiseParams("mgfractal_np_cave1", np_cave1); settings->setNoiseParams("mgfractal_np_cave2", np_cave2); } @@ -198,15 +206,15 @@ void MapgenFractalParams::writeParams(Settings *settings) const int MapgenFractal::getGroundLevelAtPoint(v2s16 p) { - s16 search_top = water_level + 128; - s16 search_base = water_level; - s16 level = -MAX_MAP_GENERATION_LIMIT; - for (s16 y = search_top; y >= search_base; y--) { - if (getTerrainAtPoint(p.X, y, p.Y)) + s16 search_start = 128; + s16 search_end = -128; + + for (s16 y = search_start; y >= search_end; y--) { + if (getFractalAtPoint(p.X, y, p.Y)) return y; } - return level; + return -MAX_MAP_GENERATION_LIMIT; } @@ -329,6 +337,8 @@ void MapgenFractal::calculateNoise() int y = node_min.Y - 1; int z = node_min.Z; + noise_seabed->perlinMap2D(x, z); + if (flags & MG_CAVES) { noise_cave1->perlinMap3D(x, y, z); noise_cave2->perlinMap3D(x, y, z); @@ -350,7 +360,7 @@ void MapgenFractal::calculateNoise() } -bool MapgenFractal::getTerrainAtPoint(s16 x, s16 y, s16 z) +bool MapgenFractal::getFractalAtPoint(s16 x, s16 y, s16 z) { float cx, cy, cz, cw, ox, oy, oz, ow; @@ -368,22 +378,21 @@ bool MapgenFractal::getTerrainAtPoint(s16 x, s16 y, s16 z) cy = (float)y / scale_y + offset_y; cz = (float)z / scale_z + offset_z; cw = slice_w; - ox = 0.0; - oy = 0.0; - oz = 0.0; - ow = 0.0; + ox = 0.0f; + oy = 0.0f; + oz = 0.0f; + ow = 0.0f; } for (u16 iter = 0; iter < iterations; iter++) { // 4D "Roundy" Mandelbrot set float nx = ox * ox - oy * oy - oz * oz - ow * ow + cx; - float ny = 2.0 * (ox * oy + oz * ow) + cy; - float nz = 2.0 * (ox * oz + oy * ow) + cz; - float nw = 2.0 * (ox * ow + oy * oz) + cw; + float ny = 2.0f * (ox * oy + oz * ow) + cy; + float nz = 2.0f * (ox * oz + oy * ow) + cz; + float nw = 2.0f * (ox * ow + oy * oz) + cw; - if (nx * nx + ny * ny + nz * nz + nw * nw > 4.0) { + if (nx * nx + ny * ny + nz * nz + nw * nw > 4.0f) return false; - } ox = nx; oy = ny; @@ -402,23 +411,29 @@ s16 MapgenFractal::generateTerrain() MapNode n_water(c_water_source); s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; + u32 index2d = 0; - for (s16 z = node_min.Z; z <= node_max.Z; z++) - for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { - u32 i = vm->m_area.index(node_min.X, y, z); - for (s16 x = node_min.X; x <= node_max.X; x++, i++) { - if (vm->m_data[i].getContent() == CONTENT_IGNORE) { - if (getTerrainAtPoint(x, y, z)) { - vm->m_data[i] = n_stone; - if (y > stone_surface_max_y) - stone_surface_max_y = y; - } else if (y <= water_level) { - vm->m_data[i] = n_water; - } else { - vm->m_data[i] = n_air; + for (s16 z = node_min.Z; z <= node_max.Z; z++) { + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 vi = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, vi++, index2d++) { + if (vm->m_data[vi].getContent() == CONTENT_IGNORE) { + s16 seabed_height = noise_seabed->result[index2d]; + + if (y <= seabed_height || getFractalAtPoint(x, y, z)) { + vm->m_data[vi] = n_stone; + if (y > stone_surface_max_y) + stone_surface_max_y = y; + } else if (y <= water_level) { + vm->m_data[vi] = n_water; + } else { + vm->m_data[vi] = n_air; + } } } + index2d -= ystride; } + index2d += ystride; } return stone_surface_max_y; @@ -575,23 +590,32 @@ void MapgenFractal::dustTopNodes() void MapgenFractal::generateCaves(s16 max_stone_y) { if (max_stone_y >= node_min.Y) { - u32 index = 0; + u32 index = 0; for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { - u32 i = vm->m_area.index(node_min.X, y, z); - for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) { + u32 vi = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, vi++, index++) { float d1 = contour(noise_cave1->result[index]); float d2 = contour(noise_cave2->result[index]); if (d1 * d2 > 0.3) { - content_t c = vm->m_data[i].getContent(); + content_t c = vm->m_data[vi].getContent(); if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) continue; - vm->m_data[i] = MapNode(CONTENT_AIR); + vm->m_data[vi] = MapNode(CONTENT_AIR); } } } } -} + if (node_max.Y > MGFRACTAL_LARGE_CAVE_DEPTH) + return; + + PseudoRandom ps(blockseed + 21343); + u32 bruises_count = (ps.range(1, 4) == 1) ? ps.range(1, 2) : 0; + for (u32 i = 0; i < bruises_count; i++) { + CaveFractal cave(this, &ps); + cave.makeCave(node_min, node_max, max_stone_y); + } +} diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h index 71729cbed..75243f4f1 100644 --- a/src/mapgen_fractal.h +++ b/src/mapgen_fractal.h @@ -1,7 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek -Additional development and fractal code by paramat +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -23,6 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" +#define MGFRACTAL_LARGE_CAVE_DEPTH -32 + /////////////////// Mapgen Fractal flags #define MGFRACTAL_JULIA 0x01 @@ -47,6 +49,7 @@ struct MapgenFractalParams : public MapgenSpecificParams { float julia_z; float julia_w; + NoiseParams np_seabed; NoiseParams np_cave1; NoiseParams np_cave2; @@ -84,6 +87,8 @@ public: float julia_z; float julia_w; + Noise *noise_seabed; + Noise *noise_cave1; Noise *noise_cave2; @@ -111,7 +116,7 @@ public: virtual void makeChunk(BlockMakeData *data); int getGroundLevelAtPoint(v2s16 p); void calculateNoise(); - bool getTerrainAtPoint(s16 x, s16 y, s16 z); + bool getFractalAtPoint(s16 x, s16 y, s16 z); s16 generateTerrain(); MgStoneType generateBiomes(float *heat_map, float *humidity_map); void dustTopNodes(); From 7504cdcfbf1d4fffae93041878c5d66d035b019c Mon Sep 17 00:00:00 2001 From: paramat Date: Thu, 8 Oct 2015 05:17:25 +0100 Subject: [PATCH 462/670] Mapgen: Use mapgen-specific names for constants in headers Update copyright years in all mapgens Add myself to copyright notices in mgv5 and mgv7 --- src/mapgen_singlenode.cpp | 2 +- src/mapgen_singlenode.h | 2 +- src/mapgen_v5.cpp | 5 +++-- src/mapgen_v5.h | 5 +++-- src/mapgen_v6.cpp | 20 ++++++++++---------- src/mapgen_v6.h | 16 ++++++++-------- src/mapgen_v7.cpp | 3 ++- src/mapgen_v7.h | 3 ++- 8 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/mapgen_singlenode.cpp b/src/mapgen_singlenode.cpp index a8b84e849..8b6c25a59 100644 --- a/src/mapgen_singlenode.cpp +++ b/src/mapgen_singlenode.cpp @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by diff --git a/src/mapgen_singlenode.h b/src/mapgen_singlenode.h index 35f2ba385..bd3576dc3 100644 --- a/src/mapgen_singlenode.h +++ b/src/mapgen_singlenode.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 1e5e5dbf0..10e9f5e65 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -527,7 +528,7 @@ void MapgenV5::generateCaves(int max_stone_y) } } - if (node_max.Y > LARGE_CAVE_DEPTH) + if (node_max.Y > MGV5_LARGE_CAVE_DEPTH) return; PseudoRandom ps(blockseed + 21343); diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index a6fdc2b2b..4112bbfa6 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program 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,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" -#define LARGE_CAVE_DEPTH -256 +#define MGV5_LARGE_CAVE_DEPTH -256 class BiomeManager; diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 5a04a2d17..82ed6c4d4 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -304,13 +304,13 @@ float MapgenV6::baseTerrainLevelFromMap(int index) s16 MapgenV6::find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision) { - return baseTerrainLevelFromNoise(p2d) + AVERAGE_MUD_AMOUNT; + return baseTerrainLevelFromNoise(p2d) + MGV6_AVERAGE_MUD_AMOUNT; } int MapgenV6::getGroundLevelAtPoint(v2s16 p) { - return baseTerrainLevelFromNoise(p) + AVERAGE_MUD_AMOUNT; + return baseTerrainLevelFromNoise(p) + MGV6_AVERAGE_MUD_AMOUNT; } @@ -387,7 +387,7 @@ bool MapgenV6::getHaveAppleTree(v2s16 p) float MapgenV6::getMudAmount(int index) { if (flags & MG_FLAT) - return AVERAGE_MUD_AMOUNT; + return MGV6_AVERAGE_MUD_AMOUNT; /*return ((float)AVERAGE_MUD_AMOUNT + 2.0 * noise2d_perlin( 0.5+(float)p.X/200, 0.5+(float)p.Y/200, @@ -422,13 +422,13 @@ BiomeV6Type MapgenV6::getBiome(int index, v2s16 p) if (spflags & MGV6_SNOWBIOMES) { float blend = (spflags & MGV6_BIOMEBLEND) ? noise2d(p.X, p.Y, seed) / 40 : 0; - if (d > FREQ_HOT + blend) { - if (h > FREQ_JUNGLE + blend) + if (d > MGV6_FREQ_HOT + blend) { + if (h > MGV6_FREQ_JUNGLE + blend) return BT_JUNGLE; else return BT_DESERT; - } else if (d < FREQ_SNOW + blend) { - if (h > FREQ_TAIGA + blend) + } else if (d < MGV6_FREQ_SNOW + blend) { + if (h > MGV6_FREQ_TAIGA + blend) return BT_TAIGA; else return BT_TUNDRA; @@ -646,11 +646,11 @@ int MapgenV6::generateGround() for (s16 y = node_min.Y; y <= node_max.Y; y++) { if (vm->m_data[i].getContent() == CONTENT_IGNORE) { if (y <= surface_y) { - vm->m_data[i] = (y >= DESERT_STONE_BASE + vm->m_data[i] = (y >= MGV6_DESERT_STONE_BASE && bt == BT_DESERT) ? n_desert_stone : n_stone; } else if (y <= water_level) { - vm->m_data[i] = (y >= ICE_BASE + vm->m_data[i] = (y >= MGV6_ICE_BASE && bt == BT_TUNDRA) ? n_ice : n_water_source; } else { diff --git a/src/mapgen_v6.h b/src/mapgen_v6.h index c71cf3c53..685fdad7e 100644 --- a/src/mapgen_v6.h +++ b/src/mapgen_v6.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -23,13 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" #include "noise.h" -#define AVERAGE_MUD_AMOUNT 4 -#define DESERT_STONE_BASE -32 -#define ICE_BASE 0 -#define FREQ_HOT 0.4 -#define FREQ_SNOW -0.4 -#define FREQ_TAIGA 0.5 -#define FREQ_JUNGLE 0.5 +#define MGV6_AVERAGE_MUD_AMOUNT 4 +#define MGV6_DESERT_STONE_BASE -32 +#define MGV6_ICE_BASE 0 +#define MGV6_FREQ_HOT 0.4 +#define MGV6_FREQ_SNOW -0.4 +#define MGV6_FREQ_TAIGA 0.5 +#define MGV6_FREQ_JUNGLE 0.5 //////////// Mapgen V6 flags #define MGV6_JUNGLES 0x01 diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 7ed4bc516..77b9721c7 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index c0cfa8c77..9b483b041 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by From 41d896d5c248be18f87776433f126c43d7dbca9b Mon Sep 17 00:00:00 2001 From: est31 Date: Sat, 10 Oct 2015 17:07:53 +0200 Subject: [PATCH 463/670] Clear list rings when loading a new formspec Fixes a bug where the old list ring remained when a new formspec was displayed over the old one. This created the list-ring of the new formspec to be partly ignored. Thanks to @VanessaE to report the bug, and @DonBatman to produce the code that exposed it. --- src/guiFormSpecMenu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index d6cd61a8d..dca7618b9 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -1880,6 +1880,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) m_fields.clear(); m_boxes.clear(); m_tooltips.clear(); + m_inventory_rings.clear(); // Set default values (fits old formspec values) m_bgcolor = video::SColor(140,0,0,0); From 3a4bcf35a14d0f4740fe1ce379d87ac2094cc5ba Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 10 Oct 2015 20:56:29 +0100 Subject: [PATCH 464/670] Fractal mapgen: Fix mysterious bug --- src/mapgen_fractal.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp index 03bd3b62f..a1abcffed 100644 --- a/src/mapgen_fractal.cpp +++ b/src/mapgen_fractal.cpp @@ -72,6 +72,11 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager * this->offset_x = sp->offset_x; this->offset_y = sp->offset_y; this->offset_z = sp->offset_z; + this->slice_w = sp->slice_w; + this->julia_x = sp->julia_x; + this->julia_y = sp->julia_y; + this->julia_z = sp->julia_z; + this->julia_w = sp->julia_w; //// 2D terrain noise noise_seabed = new Noise(&sp->np_seabed, seed, csize.X, csize.Z); @@ -143,7 +148,7 @@ MapgenFractalParams::MapgenFractalParams() offset_x = -1.75; offset_y = 0.0; offset_z = 0.0; - slice_w = 0.5; + slice_w = 0.0; julia_x = 0.33; julia_y = 0.33; julia_z = 0.33; From bda2f565038ccba902880a3daf4ea8d9dbe97069 Mon Sep 17 00:00:00 2001 From: paramat Date: Sun, 11 Oct 2015 18:11:09 +0100 Subject: [PATCH 465/670] Mgfractal: Independant offset and slice params for mandelbrot and julia Player now spawns on julia set due to julia offset Add commented-out '#include profiler.h' for timetaker use Use v3fs to reduce number of parameters Tune tunnel width to match mgv7 --- src/mapgen_fractal.cpp | 76 ++++++++++++++++++++++-------------------- src/mapgen_fractal.h | 28 ++++++++-------- 2 files changed, 53 insertions(+), 51 deletions(-) diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp index a1abcffed..b99d3af40 100644 --- a/src/mapgen_fractal.cpp +++ b/src/mapgen_fractal.cpp @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" @@ -65,14 +66,15 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager * MapgenFractalParams *sp = (MapgenFractalParams *)params->sparams; this->spflags = sp->spflags; + this->iterations = sp->iterations; - this->scale_x = sp->scale_x; - this->scale_y = sp->scale_y; - this->scale_z = sp->scale_z; - this->offset_x = sp->offset_x; - this->offset_y = sp->offset_y; - this->offset_z = sp->offset_z; - this->slice_w = sp->slice_w; + this->scale = sp->scale; + + this->moffset = sp->moffset; + this->mslice_w = sp->mslice_w; + + this->joffset = sp->joffset; + this->jslice_w = sp->jslice_w; this->julia_x = sp->julia_x; this->julia_y = sp->julia_y; this->julia_z = sp->julia_z; @@ -142,13 +144,13 @@ MapgenFractalParams::MapgenFractalParams() spflags = 0; iterations = 9; - scale_x = 1024.0; - scale_y = 256.0; - scale_z = 1024.0; - offset_x = -1.75; - offset_y = 0.0; - offset_z = 0.0; - slice_w = 0.0; + scale = v3f(1024.0, 256.0, 1024.0); + + moffset = v3f(1.75, 0.0, 0.0); // Mandelbrot set only + mslice_w = 0.0; + + joffset = v3f(0.0, 1.0, 0.0); // Julia set only + jslice_w = 0.0; julia_x = 0.33; julia_y = 0.33; julia_z = 0.33; @@ -165,13 +167,13 @@ void MapgenFractalParams::readParams(const Settings *settings) settings->getFlagStrNoEx("mgfractal_spflags", spflags, flagdesc_mapgen_fractal); settings->getU16NoEx("mgfractal_iterations", iterations); - settings->getFloatNoEx("mgfractal_scale_x", scale_x); - settings->getFloatNoEx("mgfractal_scale_y", scale_y); - settings->getFloatNoEx("mgfractal_scale_z", scale_z); - settings->getFloatNoEx("mgfractal_offset_x", offset_x); - settings->getFloatNoEx("mgfractal_offset_y", offset_y); - settings->getFloatNoEx("mgfractal_offset_z", offset_z); - settings->getFloatNoEx("mgfractal_slice_w", slice_w); + settings->getV3FNoEx("mgfractal_scale", scale); + + settings->getV3FNoEx("mgfractal_moffset", moffset); + settings->getFloatNoEx("mgfractal_mslice_w", mslice_w); + + settings->getV3FNoEx("mgfractal_joffset", joffset); + settings->getFloatNoEx("mgfractal_jslice_w", jslice_w); settings->getFloatNoEx("mgfractal_julia_x", julia_x); settings->getFloatNoEx("mgfractal_julia_y", julia_y); settings->getFloatNoEx("mgfractal_julia_z", julia_z); @@ -188,13 +190,13 @@ void MapgenFractalParams::writeParams(Settings *settings) const settings->setFlagStr("mgfractal_spflags", spflags, flagdesc_mapgen_fractal, U32_MAX); settings->setU16("mgfractal_iterations", iterations); - settings->setFloat("mgfractal_scale_x", scale_x); - settings->setFloat("mgfractal_scale_y", scale_y); - settings->setFloat("mgfractal_scale_z", scale_z); - settings->setFloat("mgfractal_offset_x", offset_x); - settings->setFloat("mgfractal_offset_y", offset_y); - settings->setFloat("mgfractal_offset_z", offset_z); - settings->setFloat("mgfractal_slice_w", slice_w); + settings->setV3F("mgfractal_scale", scale); + + settings->setV3F("mgfractal_moffset", moffset); + settings->setFloat("mgfractal_mslice_w", mslice_w); + + settings->setV3F("mgfractal_joffset", joffset); + settings->setFloat("mgfractal_jslice_w", jslice_w); settings->setFloat("mgfractal_julia_x", julia_x); settings->setFloat("mgfractal_julia_y", julia_y); settings->setFloat("mgfractal_julia_z", julia_z); @@ -374,15 +376,15 @@ bool MapgenFractal::getFractalAtPoint(s16 x, s16 y, s16 z) cy = julia_y; cz = julia_z; cw = julia_w; - ox = (float)x / scale_x + offset_x; - oy = (float)y / scale_y + offset_y; - oz = (float)z / scale_z + offset_z; - ow = slice_w; + ox = (float)x / scale.X - joffset.X; + oy = (float)y / scale.Y - joffset.Y; + oz = (float)z / scale.Z - joffset.Z; + ow = jslice_w; } else { // Mandelbrot set - cx = (float)x / scale_x + offset_x; - cy = (float)y / scale_y + offset_y; - cz = (float)z / scale_z + offset_z; - cw = slice_w; + cx = (float)x / scale.X - moffset.X; + cy = (float)y / scale.Y - moffset.Y; + cz = (float)z / scale.Z - moffset.Z; + cw = mslice_w; ox = 0.0f; oy = 0.0f; oz = 0.0f; @@ -603,7 +605,7 @@ void MapgenFractal::generateCaves(s16 max_stone_y) for (s16 x = node_min.X; x <= node_max.X; x++, vi++, index++) { float d1 = contour(noise_cave1->result[index]); float d2 = contour(noise_cave2->result[index]); - if (d1 * d2 > 0.3) { + if (d1 * d2 > 0.4f) { content_t c = vm->m_data[vi].getContent(); if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) continue; diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h index 75243f4f1..b515e4c93 100644 --- a/src/mapgen_fractal.h +++ b/src/mapgen_fractal.h @@ -37,13 +37,13 @@ struct MapgenFractalParams : public MapgenSpecificParams { u32 spflags; u16 iterations; - float scale_x; - float scale_y; - float scale_z; - float offset_x; - float offset_y; - float offset_z; - float slice_w; + v3f scale; + + v3f moffset; + float mslice_w; + + v3f joffset; + float jslice_w; float julia_x; float julia_y; float julia_z; @@ -75,13 +75,13 @@ public: v3s16 full_node_max; u16 iterations; - float scale_x; - float scale_y; - float scale_z; - float offset_x; - float offset_y; - float offset_z; - float slice_w; + v3f scale; + + v3f moffset; + float mslice_w; + + v3f joffset; + float jslice_w; float julia_x; float julia_y; float julia_z; From 7f2cefa093aa14729bb49db85a49c7f9b3fed6a4 Mon Sep 17 00:00:00 2001 From: Rui Date: Sun, 11 Oct 2015 21:10:26 +0900 Subject: [PATCH 466/670] Localize digprop_err function --- builtin/game/deprecated.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua index bbe68be3e..405e599da 100644 --- a/builtin/game/deprecated.lua +++ b/builtin/game/deprecated.lua @@ -3,7 +3,7 @@ -- -- Default material types -- -function digprop_err() +local function digprop_err() core.log("info", debug.traceback()) core.log("info", "WARNING: The core.digprop_* functions are obsolete and need to be replaced by item groups.") end @@ -50,4 +50,3 @@ setmetatable(core.env, { function core.rollback_get_last_node_actor(pos, range, seconds) return core.rollback_get_node_actions(pos, range, seconds, 1)[1] end - From e0b57c1140554fccbf3e57a036cc4100887ab8f1 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Mon, 12 Oct 2015 21:25:11 +0200 Subject: [PATCH 467/670] Fix how address is logged when a wrong password is supplied - SRP: print the address only once, not twice - Legacy: previously the address was not printed at all - Make both messages structurally the same, to facilitate log analyzers --- src/network/serverpackethandler.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 3ee2dd931..0bf7e4769 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -568,8 +568,10 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) } if (given_password != checkpwd) { - actionstream << "Server: " << playername << " supplied wrong password" - << std::endl; + actionstream << "Server: User " << playername + << " at " << addr_s + << " supplied wrong password (auth mechanism: legacy)." + << std::endl; DenyAccess_Legacy(pkt->getPeerId(), L"Wrong password"); return; } @@ -2062,9 +2064,8 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt) } else { actionstream << "Server: User " << client->getName() << " at " << getPeerAddress(pkt->getPeerId()).serializeString() - << " supplied wrong (SRP) password from address " - << getPeerAddress(pkt->getPeerId()).serializeString() - << "." << std::endl; + << " supplied wrong password (auth mechanism: SRP)." + << std::endl; DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); return; } From 2139d7d45fb1a8ed250ad96c9975c581f02f72a9 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Tue, 13 Oct 2015 03:57:44 -0400 Subject: [PATCH 468/670] Refactor logging - Add warning log level - Change debug_log_level setting to enumeration string - Map Irrlicht log events to MT log events - Encapsulate log_* functions and global variables into a class, Logger - Unify dstream with standard logging mechanism - Unify core.debug() with standard core.log() script API --- builtin/common/strict.lua | 14 +- builtin/fstk/ui.lua | 6 +- builtin/game/deprecated.lua | 13 +- builtin/game/register.lua | 2 +- builtin/init.lua | 2 +- doc/lua_api.txt | 10 +- minetest.conf.example | 5 +- src/client/clientlauncher.cpp | 26 +-- src/client/clientlauncher.h | 4 +- src/client/inputhandler.h | 20 +- src/debug.cpp | 137 +---------- src/debug.h | 31 +-- src/defaultsettings.cpp | 2 +- src/game.cpp | 5 +- src/gameparams.h | 9 +- src/log.cpp | 421 +++++++++++++++++++++------------- src/log.h | 194 ++++++++++++---- src/logoutputbuffer.h | 58 ----- src/main.cpp | 121 +++++----- src/minimap.cpp | 3 +- src/script/lua_api/l_util.cpp | 60 ++--- src/script/lua_api/l_util.h | 4 - src/threading/thread.cpp | 4 +- src/unittest/test.cpp | 11 +- src/unittest/test.h | 89 +++---- 25 files changed, 599 insertions(+), 652 deletions(-) delete mode 100644 src/logoutputbuffer.h diff --git a/builtin/common/strict.lua b/builtin/common/strict.lua index c7b86461f..05ceadf7a 100644 --- a/builtin/common/strict.lua +++ b/builtin/common/strict.lua @@ -9,11 +9,6 @@ function core.global_exists(name) end -local function warn(message) - print(os.date("%H:%M:%S: WARNING: ")..message) -end - - local meta = {} local declared = {} -- Key is source file, line, and variable name; seperated by NULs @@ -27,7 +22,7 @@ function meta:__newindex(name, value) info.currentline, name) if not warned[warn_key] and info.what ~= "main" and info.what ~= "C" then - warn(("Assignment to undeclared ".. + core.log("warning", ("Assignment to undeclared ".. "global %q inside a function at %s.") :format(name, desc)) warned[warn_key] = true @@ -35,9 +30,8 @@ function meta:__newindex(name, value) declared[name] = true end -- Ignore mod namespaces - if WARN_INIT and (not core.get_current_modname or - name ~= core.get_current_modname()) then - warn(("Global variable %q created at %s.") + if WARN_INIT and name ~= core.get_current_modname() then + core.log("warning", ("Global variable %q created at %s.") :format(name, desc)) end rawset(self, name, value) @@ -48,7 +42,7 @@ function meta:__index(name) local info = debug.getinfo(2, "Sl") local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name) if not declared[name] and not warned[warn_key] and info.what ~= "C" then - warn(("Undeclared global variable %q accessed at %s:%s") + core.log("warning", ("Undeclared global variable %q accessed at %s:%s") :format(name, info.short_src, info.currentline)) warned[warn_key] = true end diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 8128c5035..3ac0386ca 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -127,11 +127,13 @@ function ui.update() end if (active_toplevel_ui_elements > 1) then - print("WARNING: ui manager detected more then one active ui element, self most likely isn't intended") + core.log("warning", "more than one active ui ".. + "element, self most likely isn't intended") end if (active_toplevel_ui_elements == 0) then - print("WARNING: not a single toplevel ui element active switching to default") + core.log("warning", "no toplevel ui element ".. + "active; switching to default") ui.childlist[ui.default]:show() formspec = ui.childlist[ui.default]:get_formspec() end diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua index 405e599da..cd1cf5e2d 100644 --- a/builtin/game/deprecated.lua +++ b/builtin/game/deprecated.lua @@ -4,8 +4,7 @@ -- Default material types -- local function digprop_err() - core.log("info", debug.traceback()) - core.log("info", "WARNING: The core.digprop_* functions are obsolete and need to be replaced by item groups.") + core.log("deprecated", "The core.digprop_* functions are obsolete and need to be replaced by item groups.") end core.digprop_constanttime = digprop_err @@ -16,12 +15,12 @@ core.digprop_woodlike = digprop_err core.digprop_leaveslike = digprop_err core.digprop_glasslike = digprop_err -core.node_metadata_inventory_move_allow_all = function() - core.log("info", "WARNING: core.node_metadata_inventory_move_allow_all is obsolete and does nothing.") +function core.node_metadata_inventory_move_allow_all() + core.log("deprecated", "core.node_metadata_inventory_move_allow_all is obsolete and does nothing.") end -core.add_to_creative_inventory = function(itemstring) - core.log('info', "WARNING: core.add_to_creative_inventory: This function is deprecated and does nothing.") +function core.add_to_creative_inventory(itemstring) + core.log("deprecated", "core.add_to_creative_inventory: This function is deprecated and does nothing.") end -- @@ -32,7 +31,7 @@ local envref_deprecation_message_printed = false setmetatable(core.env, { __index = function(table, key) if not envref_deprecation_message_printed then - core.log("info", "WARNING: core.env:[...] is deprecated and should be replaced with core.[...]") + core.log("deprecated", "core.env:[...] is deprecated and should be replaced with core.[...]") envref_deprecation_message_printed = true end local func = core[key] diff --git a/builtin/game/register.lua b/builtin/game/register.lua index d0e04bfc3..840ade127 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -221,7 +221,7 @@ function core.register_alias(name, convert_to) error("Unable to register alias: Name is forbidden: " .. name) end if core.registered_items[name] ~= nil then - core.log("WARNING: Not registering alias, item with same name" .. + core.log("warning", "Not registering alias, item with same name" .. " is already defined: " .. name .. " -> " .. convert_to) else --core.log("Registering alias: " .. name .. " -> " .. convert_to) diff --git a/builtin/init.lua b/builtin/init.lua index 095771d19..02fb9db93 100644 --- a/builtin/init.lua +++ b/builtin/init.lua @@ -6,7 +6,7 @@ -- -- Initialize some very basic things -print = core.debug +function core.debug(...) core.log(table.concat({...}, "\t")) end math.randomseed(os.time()) os.setlocale("C", "numeric") minetest = core diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 926282976..f0f70d073 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1774,11 +1774,11 @@ Helper functions * false: return only file names. ### Logging -* `minetest.debug(line)` - * Always printed to `stderr` and logfile (`print()` is redirected here) -* `minetest.log(line)` -* `minetest.log(loglevel, line)` - * `loglevel` is one of `"error"`, `"action"`, `"info"`, `"verbose"` +* `minetest.debug(...)` + * Equivalent to `minetest.log(table.concat({...}, "\t"))` +* `minetest.log([level,] text)` + * `level` is one of `"none"`, `"error"`, `"warning"`, `"action"`, + `"info"`, or `"verbose"`. Default is `"none"`. ### Registration functions Call these functions only at load time! diff --git a/minetest.conf.example b/minetest.conf.example index 695e413c9..15d0abbf3 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -612,8 +612,9 @@ #remote_media = # Level of logging to be written to debug.txt: -# 0 = none, 1 = errors and debug, 2 = action, 3 = info, 4 = verbose. -#debug_log_level = 2 +# (no logging), none (messages with no level), error, +# warning, action, info, or verbose. +#debug_log_level = action # Maximum number of blocks that can be queued for loading #emergequeue_limit_total = 256 diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 60eb21674..772bbaf23 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -89,7 +89,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) if (list_video_modes) return print_video_modes(); - if (!init_engine(game_params.log_level)) { + if (!init_engine()) { errorstream << "Could not initialize game engine." << std::endl; return false; } @@ -321,10 +321,10 @@ void ClientLauncher::init_args(GameParams &game_params, const Settings &cmd_args || cmd_args.getFlag("random-input"); } -bool ClientLauncher::init_engine(int log_level) +bool ClientLauncher::init_engine() { receiver = new MyEventReceiver(); - create_engine_device(log_level); + create_engine_device(); return device != NULL; } @@ -455,7 +455,7 @@ bool ClientLauncher::launch_game(std::string &error_message, if (game_params.game_spec.isValid() && game_params.game_spec.id != worldspec.gameid) { - errorstream << "WARNING: Overriding gamespec from \"" + warningstream << "Overriding gamespec from \"" << worldspec.gameid << "\" to \"" << game_params.game_spec.id << "\"" << std::endl; gamespec = game_params.game_spec; @@ -500,20 +500,8 @@ void ClientLauncher::main_menu(MainMenuData *menudata) smgr->clear(); /* leave scene manager in a clean state */ } -bool ClientLauncher::create_engine_device(int log_level) +bool ClientLauncher::create_engine_device() { - static const irr::ELOG_LEVEL irr_log_level[5] = { - ELL_NONE, - ELL_ERROR, - ELL_WARNING, - ELL_INFORMATION, -#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8) - ELL_INFORMATION -#else - ELL_DEBUG -#endif - }; - // Resolution selection bool fullscreen = g_settings->getBool("fullscreen"); u16 screenW = g_settings->getU16("screenW"); @@ -561,10 +549,6 @@ bool ClientLauncher::create_engine_device(int log_level) device = createDeviceEx(params); if (device) { - // Map our log level to irrlicht engine one. - ILogger* irr_logger = device->getLogger(); - irr_logger->setLogLevel(irr_log_level[log_level]); - porting::initIrrlicht(device); } diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h index 49ceefc52..b10bbebc9 100644 --- a/src/client/clientlauncher.h +++ b/src/client/clientlauncher.h @@ -90,13 +90,13 @@ public: protected: void init_args(GameParams &game_params, const Settings &cmd_args); - bool init_engine(int log_level); + bool init_engine(); bool launch_game(std::string &error_message, bool reconnect_requested, GameParams &game_params, const Settings &cmd_args); void main_menu(MainMenuData *menudata); - bool create_engine_device(int log_level); + bool create_engine_device(); void speed_tests(); bool print_video_modes(); diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index a894e35aa..69e4b25fa 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __INPUT_HANDLER_H__ -#define __INPUT_HANDLER_H__ +#ifndef INPUT_HANDLER_H +#define INPUT_HANDLER_H #include "irrlichttypes_extrabloated.h" @@ -86,16 +86,16 @@ public: } } } else if (event.EventType == irr::EET_LOG_TEXT_EVENT) { - static const enum LogMessageLevel irr_loglev_conv[] = { - LMT_VERBOSE, // ELL_DEBUG - LMT_INFO, // ELL_INFORMATION - LMT_ACTION, // ELL_WARNING - LMT_ERROR, // ELL_ERROR - LMT_ERROR, // ELL_NONE + static const LogLevel irr_loglev_conv[] = { + LL_VERBOSE, // ELL_DEBUG + LL_INFO, // ELL_INFORMATION + LL_WARNING, // ELL_WARNING + LL_ERROR, // ELL_ERROR + LL_NONE, // ELL_NONE }; assert(event.LogEvent.Level < ARRLEN(irr_loglev_conv)); - log_printline(irr_loglev_conv[event.LogEvent.Level], - std::string("Irrlicht: ") + (const char *)event.LogEvent.Text); + g_logger.log(irr_loglev_conv[event.LogEvent.Level], + std::string("Irrlicht: ") + (const char*) event.LogEvent.Text); return true; } /* always return false in order to continue processing events */ diff --git a/src/debug.cpp b/src/debug.cpp index 3608f42d2..82aa6d519 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include "threading/mutex.h" #include "threading/mutex_auto_lock.h" #include "config.h" @@ -36,99 +37,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #endif -/* - Debug output -*/ - -#define DEBUGSTREAM_COUNT 2 - -FILE *g_debugstreams[DEBUGSTREAM_COUNT] = {stderr, NULL}; - -#define DEBUGPRINT(...)\ -{\ - for(int i=0; i::iterator - i = g_debug_stacks.begin(); - i != g_debug_stacks.end(); ++i) - { - DebugStack *stack = i->second; - - for(int i=0; iprint(g_debugstreams[i], true); - } - } + debug_stacks_print_to(errorstream); } DebugStacker::DebugStacker(const char *text) diff --git a/src/debug.h b/src/debug.h index 2ccbe58ba..b7521fec2 100644 --- a/src/debug.h +++ b/src/debug.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "gettime.h" +#include "log.h" #if (defined(WIN32) || defined(_WIN32_WCE)) #define WIN32_LEAN_AND_MEAN @@ -36,9 +37,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif #define __NORETURN __declspec(noreturn) #define __FUNCTION_NAME __FUNCTION__ + #define NORETURN __declspec(noreturn) + #define FUNCTION_NAME __FUNCTION__ #else #define __NORETURN __attribute__ ((__noreturn__)) #define __FUNCTION_NAME __PRETTY_FUNCTION__ + #define NORETURN __attribute__ ((__noreturn__)) + #define FUNCTION_NAME __PRETTY_FUNCTION__ #endif // Whether to catch all std::exceptions. @@ -50,30 +55,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #define CATCH_UNHANDLED_EXCEPTIONS 0 #endif -/* - Debug output -*/ - -#define DTIME (getTimestamp()+": ") - -extern void debugstreams_init(bool disable_stderr, const char *filename); -extern void debugstreams_deinit(); - -// This is used to redirect output to /dev/null -class Nullstream : public std::ostream { -public: - Nullstream(): - std::ostream(0) - { - } -private: -}; - -extern std::ostream dstream; -extern std::ostream dstream_no_stderr; -extern Nullstream dummyout; - - /* Abort program execution immediately */ __NORETURN extern void fatal_error_fn( @@ -108,6 +89,8 @@ __NORETURN extern void sanity_check_fn( void debug_set_exception_handler(); +#define DTIME "" + /* DebugStack */ diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index dd5332a3b..ac62b2060 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -279,7 +279,7 @@ void set_default_settings(Settings *settings) settings->setDefault("dedicated_server_step", "0.1"); settings->setDefault("ignore_world_load_errors", "false"); settings->setDefault("remote_media", ""); - settings->setDefault("debug_log_level", "2"); + settings->setDefault("debug_log_level", "action"); settings->setDefault("emergequeue_limit_total", "256"); settings->setDefault("emergequeue_limit_diskonly", "32"); settings->setDefault("emergequeue_limit_generate", "32"); diff --git a/src/game.cpp b/src/game.cpp index 840d627b6..e966920a6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiPasswordChange.h" #include "guiVolumeChange.h" #include "hud.h" -#include "logoutputbuffer.h" #include "mainmenumanager.h" #include "mapblock.h" #include "nodedef.h" // Needed for determining pointing to nodes @@ -1163,7 +1162,7 @@ static void updateChat(Client &client, f32 dtime, bool show_debug, ChatBackend &chat_backend, gui::IGUIStaticText *guitext_chat) { // Add chat log output for errors to be shown in chat - static LogOutputBuffer chat_log_error_buf(LMT_ERROR); + static LogOutputBuffer chat_log_error_buf(g_logger, LL_ERROR); // Get new messages from error log buffer while (!chat_log_error_buf.empty()) { @@ -2675,7 +2674,7 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, // Print debug stacks dstream << "-----------------------------------------" << std::endl; - dstream << DTIME << "Printing debug stacks:" << std::endl; + dstream << "Printing debug stacks:" << std::endl; dstream << "-----------------------------------------" << std::endl; debug_stacks_print(); diff --git a/src/gameparams.h b/src/gameparams.h index b50e943d2..bf9953c39 100644 --- a/src/gameparams.h +++ b/src/gameparams.h @@ -17,17 +17,18 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __GAME_PARAMS_H__ -#define __GAME_PARAMS_H__ +#ifndef GAME_PARAMS_H +#define GAME_PARAMS_H -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" + +struct SubgameSpec; struct GameParams { u16 socket_port; std::string world_path; SubgameSpec game_spec; bool is_dedicated_server; - int log_level; }; #endif diff --git a/src/log.cpp b/src/log.cpp index c584d126a..4f77101f9 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -19,19 +19,91 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" -#include -#include -#include -#include -#include "threads.h" #include "threading/mutex_auto_lock.h" #include "debug.h" #include "gettime.h" #include "porting.h" #include "config.h" +#include "exceptions.h" +#include "util/numeric.h" +#include "log.h" + +#include +#include +#include +#include +#include + +class StringBuffer : public std::streambuf { +public: + StringBuffer() {} + + int overflow(int c); + virtual void flush(const std::string &buf) = 0; + std::streamsize xsputn(const char *s, std::streamsize n); + void push_back(char c); + +private: + std::string buffer; +}; + + +class LogBuffer : public StringBuffer { +public: + LogBuffer(Logger &logger, LogLevel lev) : + logger(logger), + level(lev) + {} + + void flush(const std::string &buffer); + +private: + Logger &logger; + LogLevel level; +}; + + +class RawLogBuffer : public StringBuffer { +public: + void flush(const std::string &buffer); +}; + + +#ifdef __ANDROID__ +static unsigned int level_to_android[] = { + ANDROID_LOG_INFO, // LL_NONE + //ANDROID_LOG_FATAL, + ANDROID_LOG_ERROR, // LL_ERROR + ANDROID_LOG_WARN, // LL_WARNING + ANDROID_LOG_WARN, // LL_ACTION + //ANDROID_LOG_INFO, + ANDROID_LOG_DEBUG, // LL_INFO + ANDROID_LOG_VERBOSE, // LL_VERBOSE + +}; +#endif + +//// +//// Globals +//// + +Logger g_logger; + +StreamLogOutput stdout_output(std::cout); +StreamLogOutput stderr_output(std::cerr); +std::ostream null_stream(NULL); + +RawLogBuffer raw_buf; + +LogBuffer none_buf(g_logger, LL_NONE); +LogBuffer error_buf(g_logger, LL_ERROR); +LogBuffer warning_buf(g_logger, LL_WARNING); +LogBuffer action_buf(g_logger, LL_ACTION); +LogBuffer info_buf(g_logger, LL_INFO); +LogBuffer verbose_buf(g_logger, LL_VERBOSE); // Connection -std::ostream *dout_con_ptr = &dummyout; +std::ostream *dout_con_ptr = &null_stream; std::ostream *derr_con_ptr = &verbosestream; // Server @@ -44,170 +116,211 @@ std::ostream *dout_client_ptr = &infostream; std::ostream *derr_client_ptr = &errorstream; #endif -#ifdef __ANDROID__ -unsigned int android_log_level_mapping[] = { - /* LMT_ERROR */ ANDROID_LOG_ERROR, - /* LMT_ACTION */ ANDROID_LOG_WARN, - /* LMT_INFO */ ANDROID_LOG_INFO, - /* LMT_VERBOSE */ ANDROID_LOG_VERBOSE +std::ostream rawstream(&raw_buf); +std::ostream dstream(&none_buf); +std::ostream errorstream(&error_buf); +std::ostream warningstream(&warning_buf); +std::ostream actionstream(&action_buf); +std::ostream infostream(&info_buf); +std::ostream verbosestream(&verbose_buf); + + +/////////////////////////////////////////////////////////////////////////////// + + +//// +//// Logger +//// + +LogLevel Logger::stringToLevel(const std::string &name) +{ + if (name == "none") + return LL_NONE; + else if (name == "error") + return LL_ERROR; + else if (name == "warning") + return LL_WARNING; + else if (name == "action") + return LL_ACTION; + else if (name == "info") + return LL_INFO; + else if (name == "verbose") + return LL_VERBOSE; + else + return LL_MAX; +} + +void Logger::addOutput(ILogOutput *out) +{ + addOutputMaxLevel(out, LL_MAX); +} + +void Logger::addOutput(ILogOutput *out, LogLevel lev) +{ + m_outputs[lev].push_back(out); +} + +void Logger::addOutputMaxLevel(ILogOutput *out, LogLevel lev) +{ + for (size_t i = 0; i <= lev; i++) + m_outputs[i].push_back(out); +} + +void Logger::removeOutput(ILogOutput *out) +{ + for (size_t i = 0; i < LL_MAX; i++) { + std::vector::iterator it; + + it = std::find(m_outputs[i].begin(), m_outputs[i].end(), out); + if (it != m_outputs[i].end()) + m_outputs[i].erase(it); + } +} + +void Logger::setLevelSilenced(LogLevel lev, bool silenced) +{ + m_silenced_levels[lev] = silenced; +} + +void Logger::registerThread(const std::string &name) +{ + threadid_t id = get_current_thread_id(); + MutexAutoLock lock(m_mutex); + m_thread_names[id] = name; +} + +void Logger::deregisterThread() +{ + threadid_t id = get_current_thread_id(); + MutexAutoLock lock(m_mutex); + m_thread_names.erase(id); +} + +const std::string Logger::getLevelLabel(LogLevel lev) +{ + static const std::string names[] = { + "", + "ERROR", + "WARNING", + "ACTION", + "INFO", + "VERBOSE", }; -#endif - -std::vector log_outputs[LMT_NUM_VALUES]; -std::map log_thread_names; -Mutex log_thread_name_mutex; - -void log_add_output(ILogOutput *out, enum LogMessageLevel lev) -{ - log_outputs[lev].push_back(out); + assert(lev < LL_MAX && lev >= 0); + assert(ARRLEN(names) == LL_MAX); + return names[lev]; } -void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev) +const std::string Logger::getThreadName() { - for(int i=0; i<=lev; i++) - log_outputs[i].push_back(out); -} + std::map::const_iterator it; -void log_add_output_all_levs(ILogOutput *out) -{ - for(int i=0; i::iterator it = - std::find(log_outputs[i].begin(), log_outputs[i].end(), out); - if(it != log_outputs[i].end()) - log_outputs[i].erase(it); - } -} - -void log_set_lev_silence(enum LogMessageLevel lev, bool silence) -{ - MutexAutoLock lock(log_thread_name_mutex); - - for (std::vector::iterator it = log_outputs[lev].begin(); - it != log_outputs[lev].end(); ++it) { - ILogOutput *out = *it; - out->silence = silence; - } -} - -void log_register_thread(const std::string &name) -{ threadid_t id = get_current_thread_id(); - MutexAutoLock lock(log_thread_name_mutex); + it = m_thread_names.find(id); + if (it != m_thread_names.end()) + return it->second; - log_thread_names[id] = name; + std::ostringstream os; + os << "#0x" << std::hex << id; + return os.str(); } -void log_deregister_thread() +void Logger::log(LogLevel lev, const std::string &text) { - threadid_t id = get_current_thread_id(); - MutexAutoLock lock(log_thread_name_mutex); + if (m_silenced_levels[lev]) + return; - log_thread_names.erase(id); -} - -static std::string get_lev_string(enum LogMessageLevel lev) -{ - switch(lev){ - case LMT_ERROR: - return "ERROR"; - case LMT_ACTION: - return "ACTION"; - case LMT_INFO: - return "INFO"; - case LMT_VERBOSE: - return "VERBOSE"; - case LMT_NUM_VALUES: - break; - } - return "(unknown level)"; -} - -void log_printline(enum LogMessageLevel lev, const std::string &text) -{ - MutexAutoLock lock(log_thread_name_mutex); - std::string threadname = "(unknown thread)"; - std::map::const_iterator i; - i = log_thread_names.find(get_current_thread_id()); - if(i != log_thread_names.end()) - threadname = i->second; - std::string levelname = get_lev_string(lev); + const std::string thread_name = getThreadName(); + const std::string label = getLevelLabel(lev); std::ostringstream os(std::ios_base::binary); - os << getTimestamp() << ": " << levelname << "["<::iterator i = log_outputs[lev].begin(); - i != log_outputs[lev].end(); ++i) { - ILogOutput *out = *i; - if (out->silence) - continue; + logToSystem(lev, text); + logToOutputs(lev, os.str()); +} - out->printLog(os.str()); - out->printLog(os.str(), lev); - out->printLog(lev, text); +void Logger::logRaw(LogLevel lev, const std::string &text) +{ + if (m_silenced_levels[lev]) + return; + + logToSystem(lev, text); + logToOutputs(lev, text); +} + +void Logger::logToSystem(LogLevel lev, const std::string &text) +{ +#ifdef __ANDROID__ + assert(ARRLEN(level_to_android) == LL_MAX); + __android_log_print(level_to_android[lev], + PROJECT_NAME_C, "%s", text.c_str()); +#endif +} + +void Logger::logToOutputs(LogLevel lev, const std::string &text) +{ + MutexAutoLock lock(m_mutex); + for (size_t i = 0; i != m_outputs[lev].size(); i++) + m_outputs[lev][i]->log(text); +} + + +//// +//// *LogOutput methods +//// + +void FileLogOutput::open(const std::string &filename) +{ + stream.open(filename.c_str(), std::ios::app | std::ios::ate); + if (!stream.good()) + throw FileNotGoodException("Failed to open log file " + + filename + ": " + strerror(errno)); + stream << "\n\n" + "-------------" << std::endl + << " Separator" << std::endl + << "-------------\n" << std::endl; +} + + + +//// +//// *Buffer methods +//// + +int StringBuffer::overflow(int c) +{ + push_back(c); + return c; +} + + +std::streamsize StringBuffer::xsputn(const char *s, std::streamsize n) +{ + for (int i = 0; i < n; ++i) + push_back(s[i]); + return n; +} + +void StringBuffer::push_back(char c) +{ + if (c == '\n' || c == '\r') { + if (!buffer.empty()) + flush(buffer); + buffer.clear(); + } else { + buffer.push_back(c); } } -class Logbuf : public std::streambuf + + + +void LogBuffer::flush(const std::string &buffer) { -public: - Logbuf(enum LogMessageLevel lev): - m_lev(lev) - { - } - - ~Logbuf() - { - } - - int overflow(int c) - { - bufchar(c); - return c; - } - std::streamsize xsputn(const char *s, std::streamsize n) - { - for(int i=0; i +#include #include +#include +#include "threads.h" -/* - Use this for logging everything. +class ILogOutput; - If you need to explicitly print something, use dstream or cout or cerr. -*/ - -enum LogMessageLevel { - LMT_ERROR, /* Something failed ("invalid map data on disk, block (2,2,1)") */ - LMT_ACTION, /* In-game actions ("celeron55 placed block at (12,4,-5)") */ - LMT_INFO, /* More deep info ("saving map on disk (only_modified=true)") */ - LMT_VERBOSE, /* Flood-style ("loaded block (2,2,2) from disk") */ - LMT_NUM_VALUES, +enum LogLevel { + LL_NONE, // Special level that is always printed + LL_ERROR, + LL_WARNING, + LL_ACTION, // In-game actions + LL_INFO, + LL_VERBOSE, + LL_MAX, }; -class ILogOutput -{ +class Logger { public: - ILogOutput() : - silence(false) - {} + void addOutput(ILogOutput *out); + void addOutput(ILogOutput *out, LogLevel lev); + void addOutputMaxLevel(ILogOutput *out, LogLevel lev); + void removeOutput(ILogOutput *out); + void setLevelSilenced(LogLevel lev, bool silenced); - /* line: Full line with timestamp, level and thread */ - virtual void printLog(const std::string &line){}; - /* line: Full line with timestamp, level and thread */ - virtual void printLog(const std::string &line, enum LogMessageLevel lev){}; - /* line: Only actual printed text */ - virtual void printLog(enum LogMessageLevel lev, const std::string &line){}; + void registerThread(const std::string &name); + void deregisterThread(); - bool silence; + void log(LogLevel lev, const std::string &text); + // Logs without a prefix + void logRaw(LogLevel lev, const std::string &text); + + void setTraceEnabled(bool enable) { m_trace_enabled = enable; } + bool getTraceEnabled() { return m_trace_enabled; } + + static LogLevel stringToLevel(const std::string &name); + +private: + void logToSystem(LogLevel, const std::string &text); + void logToOutputs(LogLevel, const std::string &text); + + const std::string getLevelLabel(LogLevel lev); + const std::string getThreadName(); + + std::vector m_outputs[LL_MAX]; + + // Should implement atomic loads and stores (even though it's only + // written to when one thread has access currently). + // Works on all known architectures (x86, ARM, MIPS). + volatile bool m_silenced_levels[LL_MAX]; + std::map m_thread_names; + mutable Mutex m_mutex; + bool m_trace_enabled; }; -void log_add_output(ILogOutput *out, enum LogMessageLevel lev); -void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev); -void log_add_output_all_levs(ILogOutput *out); -void log_remove_output(ILogOutput *out); -void log_set_lev_silence(enum LogMessageLevel lev, bool silence); +class ILogOutput { +public: + virtual void log(const std::string &line) = 0; +}; -void log_register_thread(const std::string &name); -void log_deregister_thread(); +class StreamLogOutput : public ILogOutput { +public: + StreamLogOutput(std::ostream &stream) : + stream(stream) + { + } -void log_printline(enum LogMessageLevel lev, const std::string &text); + void log(const std::string &line) + { + stream << line << std::endl; + } -#define LOGLINEF(lev, ...)\ -{\ - char buf[10000];\ - snprintf(buf, 10000, __VA_ARGS__);\ - log_printline(lev, buf);\ -} +private: + std::ostream &stream; +}; -extern std::ostream errorstream; -extern std::ostream actionstream; -extern std::ostream infostream; -extern std::ostream verbosestream; +class FileLogOutput : public ILogOutput { +public: + void open(const std::string &filename); -extern bool log_trace_level_enabled; + void log(const std::string &line) + { + stream << line << std::endl; + } -#define TRACESTREAM(x){ if(log_trace_level_enabled) verbosestream x; } -#define TRACEDO(x){ if(log_trace_level_enabled){ x ;} } +private: + std::ofstream stream; +}; + +class LogOutputBuffer : public ILogOutput { +public: + LogOutputBuffer(Logger &logger, LogLevel lev) : + logger(logger) + { + logger.addOutput(this, lev); + } + + ~LogOutputBuffer() + { + logger.removeOutput(this); + } + + virtual void log(const std::string &line) + { + buffer.push(line); + } + + bool empty() + { + return buffer.empty(); + } + + std::string get() + { + if (empty()) + return ""; + std::string s = buffer.front(); + buffer.pop(); + return s; + } + +private: + std::queue buffer; + Logger &logger; +}; + + +extern StreamLogOutput stdout_output; +extern StreamLogOutput stderr_output; +extern std::ostream null_stream; extern std::ostream *dout_con_ptr; extern std::ostream *derr_con_ptr; extern std::ostream *dout_server_ptr; extern std::ostream *derr_server_ptr; + +#ifndef SERVER +extern std::ostream *dout_client_ptr; +extern std::ostream *derr_client_ptr; +#endif + +extern Logger g_logger; + +// Writes directly to all LL_NONE log outputs for g_logger with no prefix. +extern std::ostream rawstream; + +extern std::ostream errorstream; +extern std::ostream warningstream; +extern std::ostream actionstream; +extern std::ostream infostream; +extern std::ostream verbosestream; +extern std::ostream dstream; + +#define TRACEDO(x) do { \ + if (g_logger.getTraceEnabled()) { \ + x; \ + } \ +} while (0) + +#define TRACESTREAM(x) TRACEDO(verbosestream x) + #define dout_con (*dout_con_ptr) #define derr_con (*derr_con_ptr) #define dout_server (*dout_server_ptr) #define derr_server (*derr_server_ptr) #ifndef SERVER -extern std::ostream *dout_client_ptr; -extern std::ostream *derr_client_ptr; -#define dout_client (*dout_client_ptr) -#define derr_client (*derr_client_ptr) - + #define dout_client (*dout_client_ptr) + #define derr_client (*derr_client_ptr) #endif -#endif +#endif diff --git a/src/logoutputbuffer.h b/src/logoutputbuffer.h deleted file mode 100644 index 69f06c444..000000000 --- a/src/logoutputbuffer.h +++ /dev/null @@ -1,58 +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. -*/ - -#ifndef LOGOUTPUTBUFFER_HEADER -#define LOGOUTPUTBUFFER_HEADER - -#include "log.h" -#include - -class LogOutputBuffer : public ILogOutput -{ -public: - LogOutputBuffer(LogMessageLevel maxlev) - { - log_add_output(this, maxlev); - } - ~LogOutputBuffer() - { - log_remove_output(this); - } - virtual void printLog(const std::string &line) - { - m_buf.push(line); - } - std::string get() - { - if(empty()) - return ""; - std::string s = m_buf.front(); - m_buf.pop(); - return s; - } - bool empty() - { - return m_buf.empty(); - } -private: - std::queue m_buf; -}; - -#endif - diff --git a/src/main.cpp b/src/main.cpp index dece27428..cc8b4bcaa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -80,10 +80,10 @@ static void list_game_ids(); static void list_worlds(); static void setup_log_params(const Settings &cmd_args); static bool create_userdata_path(); -static bool init_common(int *log_level, const Settings &cmd_args, int argc, char *argv[]); +static bool init_common(const Settings &cmd_args, int argc, char *argv[]); static void startup_message(); static bool read_config_file(const Settings &cmd_args); -static void init_debug_streams(int *log_level, const Settings &cmd_args); +static void init_log_streams(const Settings &cmd_args); static bool game_configure(GameParams *game_params, const Settings &cmd_args); static void game_configure_port(GameParams *game_params, const Settings &cmd_args); @@ -122,25 +122,7 @@ u32 getTime(TimePrecision prec) #endif -class StderrLogOutput: public ILogOutput -{ -public: - /* line: Full line with timestamp, level and thread */ - void printLog(const std::string &line) - { - std::cerr << line << std::endl; - } -} main_stderr_log_out; - -class DstreamNoStderrLogOutput: public ILogOutput -{ -public: - /* line: Full line with timestamp, level and thread */ - void printLog(const std::string &line) - { - dstream_no_stderr << line << std::endl; - } -} main_dstream_no_stderr_log_out; +FileLogOutput file_log_output; static OptionList allowed_options; @@ -150,10 +132,8 @@ int main(int argc, char *argv[]) debug_set_exception_handler(); - log_add_output_maxlev(&main_stderr_log_out, LMT_ACTION); - log_add_output_all_levs(&main_dstream_no_stderr_log_out); - - log_register_thread("Main"); + g_logger.registerThread("Main"); + g_logger.addOutputMaxLevel(&stderr_output, LL_ACTION); Settings cmd_args; bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args); @@ -180,8 +160,7 @@ int main(int argc, char *argv[]) } // Initialize debug stacks - debug_stacks_init(); - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Debug handler BEGIN_DEBUG_EXCEPTION_HANDLER @@ -198,8 +177,7 @@ int main(int argc, char *argv[]) return 0; } - GameParams game_params; - if (!init_common(&game_params.log_level, cmd_args, argc, argv)) + if (!init_common(cmd_args, argc, argv)) return 1; #ifndef __ANDROID__ @@ -210,6 +188,7 @@ int main(int argc, char *argv[]) } #endif + GameParams game_params; #ifdef SERVER game_params.is_dedicated_server = true; #else @@ -219,7 +198,7 @@ int main(int argc, char *argv[]) if (!game_configure(&game_params, cmd_args)) return 1; - sanity_check(game_params.world_path != ""); + sanity_check(!game_params.world_path.empty()); infostream << "Using commanded world path [" << game_params.world_path << "]" << std::endl; @@ -247,7 +226,7 @@ int main(int argc, char *argv[]) // Stop httpfetch thread (if started) httpfetch_cleanup(); - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER(errorstream); return retval; } @@ -403,26 +382,26 @@ static void setup_log_params(const Settings &cmd_args) { // Quiet mode, print errors only if (cmd_args.getFlag("quiet")) { - log_remove_output(&main_stderr_log_out); - log_add_output_maxlev(&main_stderr_log_out, LMT_ERROR); + g_logger.removeOutput(&stderr_output); + g_logger.addOutputMaxLevel(&stderr_output, LL_ERROR); } // If trace is enabled, enable logging of certain things if (cmd_args.getFlag("trace")) { dstream << _("Enabling trace level debug output") << std::endl; - log_trace_level_enabled = true; - dout_con_ptr = &verbosestream; // this is somewhat old crap - socket_enable_debug_output = true; // socket doesn't use log.h + g_logger.setTraceEnabled(true); + dout_con_ptr = &verbosestream; // This is somewhat old + socket_enable_debug_output = true; // Sockets doesn't use log.h } // In certain cases, output info level on stderr if (cmd_args.getFlag("info") || cmd_args.getFlag("verbose") || cmd_args.getFlag("trace") || cmd_args.getFlag("speedtests")) - log_add_output(&main_stderr_log_out, LMT_INFO); + g_logger.addOutput(&stderr_output, LL_INFO); // In certain cases, output verbose level on stderr if (cmd_args.getFlag("verbose") || cmd_args.getFlag("trace")) - log_add_output(&main_stderr_log_out, LMT_VERBOSE); + g_logger.addOutput(&stderr_output, LL_VERBOSE); } static bool create_userdata_path() @@ -450,7 +429,7 @@ static bool create_userdata_path() return success; } -static bool init_common(int *log_level, const Settings &cmd_args, int argc, char *argv[]) +static bool init_common(const Settings &cmd_args, int argc, char *argv[]) { startup_message(); set_default_settings(g_settings); @@ -462,7 +441,7 @@ static bool init_common(int *log_level, const Settings &cmd_args, int argc, char if (!read_config_file(cmd_args)) return false; - init_debug_streams(log_level, cmd_args); + init_log_streams(cmd_args); // Initialize random seed srand(time(0)); @@ -533,38 +512,47 @@ static bool read_config_file(const Settings &cmd_args) return true; } -static void init_debug_streams(int *log_level, const Settings &cmd_args) +static void init_log_streams(const Settings &cmd_args) { #if RUN_IN_PLACE - std::string logfile = DEBUGFILE; + std::string log_filename = DEBUGFILE; #else - std::string logfile = porting::path_user + DIR_DELIM + DEBUGFILE; + std::string log_filename = porting::path_user + DIR_DELIM + DEBUGFILE; #endif if (cmd_args.exists("logfile")) - logfile = cmd_args.get("logfile"); + log_filename = cmd_args.get("logfile"); - log_remove_output(&main_dstream_no_stderr_log_out); - *log_level = g_settings->getS32("debug_log_level"); + g_logger.removeOutput(&file_log_output); + std::string conf_loglev = g_settings->get("debug_log_level"); - if (*log_level == 0) //no logging - logfile = ""; - if (*log_level < 0) { - dstream << "WARNING: Supplied debug_log_level < 0; Using 0" << std::endl; - *log_level = 0; - } else if (*log_level > LMT_NUM_VALUES) { - dstream << "WARNING: Supplied debug_log_level > " << LMT_NUM_VALUES - << "; Using " << LMT_NUM_VALUES << std::endl; - *log_level = LMT_NUM_VALUES; + // Old integer format + if (std::isdigit(conf_loglev[0])) { + warningstream << "Deprecated use of debug_log_level with an " + "integer value; please update your configuration." << std::endl; + static const char *lev_name[] = + {"", "error", "action", "info", "verbose"}; + int lev_i = atoi(conf_loglev.c_str()); + if (lev_i < 0 || lev_i >= (int)ARRLEN(lev_name)) { + warningstream << "Supplied invalid debug_log_level!" + " Assuming action level." << std::endl; + lev_i = 2; + } + conf_loglev = lev_name[lev_i]; } - log_add_output_maxlev(&main_dstream_no_stderr_log_out, - (LogMessageLevel)(*log_level - 1)); + if (conf_loglev.empty()) // No logging + return; - debugstreams_init(false, logfile == "" ? NULL : logfile.c_str()); + LogLevel log_level = Logger::stringToLevel(conf_loglev); + if (log_level == LL_MAX) { + warningstream << "Supplied unrecognized debug_log_level; " + "using maximum." << std::endl; + } - infostream << "logfile = " << logfile << std::endl; + verbosestream << "log_filename = " << log_filename << std::endl; - atexit(debugstreams_deinit); + file_log_output.open(log_filename.c_str()); + g_logger.addOutputMaxLevel(&file_log_output, log_level); } static bool game_configure(GameParams *game_params, const Settings &cmd_args) @@ -678,10 +666,10 @@ static bool auto_select_world(GameParams *game_params) << world_path << "]" << std::endl; // If there are multiple worlds, list them } else if (worldspecs.size() > 1 && game_params->is_dedicated_server) { - dstream << _("Multiple worlds are available.") << std::endl; - dstream << _("Please select one using --worldname " + std::cerr << _("Multiple worlds are available.") << std::endl; + std::cerr << _("Please select one using --worldname " " or --world ") << std::endl; - print_worldspecs(worldspecs, dstream); + print_worldspecs(worldspecs, std::cerr); return false; // If there are no worlds, automatically create a new one } else { @@ -774,7 +762,7 @@ static bool determine_subgame(GameParams *game_params) if (game_params->game_spec.isValid()) { gamespec = game_params->game_spec; if (game_params->game_spec.id != world_gameid) { - errorstream << "WARNING: Using commanded gameid [" + warningstream << "Using commanded gameid [" << gamespec.id << "]" << " instead of world gameid [" << world_gameid << "]" << std::endl; } @@ -835,9 +823,8 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & return migrate_database(game_params, cmd_args); // Create server - Server server(game_params.world_path, - game_params.game_spec, false, bind_addr.isIPv6()); - + Server server(game_params.world_path, game_params.game_spec, false, + bind_addr.isIPv6()); server.start(bind_addr); // Run server diff --git a/src/minimap.cpp b/src/minimap.cpp index 7eb7247ca..a6eff0680 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -18,8 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "minimap.h" -#include -#include "logoutputbuffer.h" #include "threading/mutex_auto_lock.h" #include "threading/semaphore.h" #include "clientmap.h" @@ -28,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "util/numeric.h" #include "util/string.h" +#include //// diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 4b8b6d351..a4f01af07 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "json/json.h" #include "cpp_api/s_security.h" #include "areastore.h" -#include "debug.h" #include "porting.h" #include "log.h" #include "tool.h" @@ -35,35 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/auth.h" #include -// debug(...) -// Writes a line to dstream -int ModApiUtil::l_debug(lua_State *L) -{ - NO_MAP_LOCK_REQUIRED; - // Handle multiple parameters to behave like standard lua print() - int n = lua_gettop(L); - lua_getglobal(L, "tostring"); - for (int i = 1; i <= n; i++) { - /* - Call tostring(i-th argument). - This is what print() does, and it behaves a bit - differently from directly calling lua_tostring. - */ - lua_pushvalue(L, -1); /* function to be called */ - lua_pushvalue(L, i); /* value to print */ - lua_call(L, 1, 1); - size_t len; - const char *s = lua_tolstring(L, -1, &len); - if (i > 1) - dstream << "\t"; - if (s) - dstream << std::string(s, len); - lua_pop(L, 1); - } - dstream << std::endl; - return 0; -} - // log([level,] text) // Writes a line to the logger. // The one-argument version logs to infostream. @@ -72,26 +42,24 @@ int ModApiUtil::l_log(lua_State *L) { NO_MAP_LOCK_REQUIRED; std::string text; - LogMessageLevel level = LMT_INFO; + LogLevel level = LL_NONE; if (lua_isnone(L, 2)) { - text = lua_tostring(L, 1); - } - else { - std::string levelname = luaL_checkstring(L, 1); + text = luaL_checkstring(L, 1); + } else { + std::string name = luaL_checkstring(L, 1); text = luaL_checkstring(L, 2); - if(levelname == "error") - level = LMT_ERROR; - else if(levelname == "action") - level = LMT_ACTION; - else if(levelname == "verbose") - level = LMT_VERBOSE; - else if (levelname == "deprecated") { - log_deprecated(L,text); + if (name == "deprecated") { + log_deprecated(L, text); return 0; } - + level = Logger::stringToLevel(name); + if (level == LL_MAX) { + warningstream << "Tried to log at unknown level '" << name + << "'. Defaulting to \"none\"." << std::endl; + level = LL_NONE; + } } - log_printline(level, text); + g_logger.log(level, text); return 0; } @@ -390,7 +358,6 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) void ModApiUtil::Initialize(lua_State *L, int top) { - API_FCT(debug); API_FCT(log); API_FCT(setting_set); @@ -422,7 +389,6 @@ void ModApiUtil::Initialize(lua_State *L, int top) void ModApiUtil::InitializeAsync(AsyncEngine& engine) { - ASYNC_API_FCT(debug); ASYNC_API_FCT(log); //ASYNC_API_FCT(setting_set); diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index e75aa28cb..4b55b1966 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -35,10 +35,6 @@ private: GUIEngine instance should be in here. */ - // debug(text) - // Writes a line to dstream - static int l_debug(lua_State *L); - // log([level,] text) // Writes a line to the logger. // The one-argument version logs to infostream. diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp index 73a951194..1f9b54795 100644 --- a/src/threading/thread.cpp +++ b/src/threading/thread.cpp @@ -222,11 +222,11 @@ void *Thread::theThread(void *param) th->running = true; th->setName(); - log_register_thread(th->name); + g_logger.registerThread(th->name); th->retval = th->run(); - log_deregister_thread(); + g_logger.deregisterThread(); th->running = false; #if __cplusplus < 201103L diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index d0ffb423f..de4711802 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "test.h" -#include "debug.h" #include "log.h" #include "nodedef.h" #include "itemdef.h" @@ -223,7 +222,7 @@ void run_tests() u32 t1 = porting::getTime(PRECISION_MILLI); TestGameDef gamedef; - log_set_lev_silence(LMT_ERROR, true); + g_logger.setLevelSilenced(LL_ERROR, true); u32 num_modules_failed = 0; u32 num_total_tests_failed = 0; @@ -239,11 +238,11 @@ void run_tests() u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; - log_set_lev_silence(LMT_ERROR, false); + g_logger.setLevelSilenced(LL_ERROR, false); const char *overall_status = (num_modules_failed == 0) ? "PASSED" : "FAILED"; - dstream + rawstream << "++++++++++++++++++++++++++++++++++++++++" << "++++++++++++++++++++++++++++++++++++++++" << std::endl << "Unit Test Results: " << overall_status << std::endl @@ -264,14 +263,14 @@ void run_tests() bool TestBase::testModule(IGameDef *gamedef) { - dstream << "======== Testing module " << getName() << std::endl; + rawstream << "======== Testing module " << getName() << std::endl; u32 t1 = porting::getTime(PRECISION_MILLI); runTests(gamedef); u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; - dstream << "======== Module " << getName() << " " + rawstream << "======== Module " << getName() << " " << (num_tests_failed ? "failed" : "passed") << " (" << num_tests_failed << " failures / " << num_tests_run << " tests) - " << tdiff << "ms" << std::endl; diff --git a/src/unittest/test.h b/src/unittest/test.h index 47a441e02..f6c4711a5 100644 --- a/src/unittest/test.h +++ b/src/unittest/test.h @@ -32,60 +32,61 @@ class TestFailedException : public std::exception { }; // Runs a unit test and reports results -#define TEST(fxn, ...) do { \ - u32 t1 = porting::getTime(PRECISION_MILLI); \ - try { \ - fxn(__VA_ARGS__); \ - dstream << "[PASS] "; \ - } catch (TestFailedException &e) { \ - dstream << "[FAIL] "; \ - num_tests_failed++; \ - } catch (std::exception &e) { \ - dstream << "Caught unhandled exception: " << e.what() << std::endl; \ - dstream << "[FAIL] "; \ - num_tests_failed++; \ - } \ - num_tests_run++; \ - u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \ - dstream << #fxn << " - " << tdiff << "ms" << std::endl; \ +#define TEST(fxn, ...) do { \ + u32 t1 = porting::getTime(PRECISION_MILLI); \ + try { \ + fxn(__VA_ARGS__); \ + rawstream << "[PASS] "; \ + } catch (TestFailedException &e) { \ + rawstream << "[FAIL] "; \ + num_tests_failed++; \ + } catch (std::exception &e) { \ + rawstream << "Caught unhandled exception: " << e.what() << std::endl; \ + rawstream << "[FAIL] "; \ + num_tests_failed++; \ + } \ + num_tests_run++; \ + u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \ + rawstream << #fxn << " - " << tdiff << "ms" << std::endl; \ } while (0) // Asserts the specified condition is true, or fails the current unit test -#define UASSERT(x) do { \ - if (!(x)) { \ - dstream << "Test assertion failed: " #x << std::endl \ - << " at " << fs::GetFilenameFromPath(__FILE__) \ - << ":" << __LINE__ << std::endl; \ - throw TestFailedException(); \ - } \ +#define UASSERT(x) do { \ + if (!(x)) { \ + rawstream << "Test assertion failed: " #x << std::endl \ + << " at " << fs::GetFilenameFromPath(__FILE__) \ + << ":" << __LINE__ << std::endl; \ + throw TestFailedException(); \ + } \ } while (0) // Asserts the specified condition is true, or fails the current unit test // and prints the format specifier fmt -#define UTEST(x, fmt, ...) do { \ - if (!(x)) { \ - char utest_buf[1024]; \ - snprintf(utest_buf, sizeof(utest_buf), fmt, __VA_ARGS__); \ - dstream << "Test assertion failed: " << utest_buf << std::endl \ - << " at " << fs::GetFilenameFromPath(__FILE__) \ - << ":" << __LINE__ << std::endl; \ - throw TestFailedException(); \ - } \ +#define UTEST(x, fmt, ...) do { \ + if (!(x)) { \ + char utest_buf[1024]; \ + snprintf(utest_buf, sizeof(utest_buf), fmt, __VA_ARGS__); \ + rawstream << "Test assertion failed: " << utest_buf << std::endl \ + << " at " << fs::GetFilenameFromPath(__FILE__) \ + << ":" << __LINE__ << std::endl; \ + throw TestFailedException(); \ + } \ } while (0) // Asserts the comparison specified by CMP is true, or fails the current unit test -#define UASSERTCMP(T, CMP, actual, expected) do { \ - T a = (actual); \ - T e = (expected); \ - if (!(a CMP e)) { \ - dstream << "Test assertion failed: " << #actual << " " << #CMP << " " \ - << #expected << std::endl \ - << " at " << fs::GetFilenameFromPath(__FILE__) << ":" \ - << __LINE__ << std::endl \ - << " actual: " << a << std::endl << " expected: " \ - << e << std::endl; \ - throw TestFailedException(); \ - } \ +#define UASSERTCMP(T, CMP, actual, expected) do { \ + T a = (actual); \ + T e = (expected); \ + if (!(a CMP e)) { \ + rawstream \ + << "Test assertion failed: " << #actual << " " << #CMP << " " \ + << #expected << std::endl \ + << " at " << fs::GetFilenameFromPath(__FILE__) << ":" \ + << __LINE__ << std::endl \ + << " actual: " << a << std::endl << " expected: " \ + << e << std::endl; \ + throw TestFailedException(); \ + } \ } while (0) #define UASSERTEQ(T, actual, expected) UASSERTCMP(T, ==, actual, expected) From 96cc5b34fe0151d2a1498eaaafb205757db346c4 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 14 Oct 2015 01:26:03 -0400 Subject: [PATCH 469/670] Use warningstream for log messages with WARNING Remove DTIME macro and its uses, too --- src/ban.cpp | 2 +- src/clientobject.cpp | 2 +- src/collision.cpp | 4 +-- src/content_cao.cpp | 2 +- src/content_nodemeta.cpp | 2 +- src/database-leveldb.cpp | 4 +-- src/database-redis.cpp | 6 ++--- src/database-sqlite3.cpp | 2 +- src/debug.h | 2 -- src/environment.cpp | 4 +-- src/guiFormSpecMenu.cpp | 35 ++++++++++++------------- src/map.cpp | 40 ++++++++++++++--------------- src/mapblock.cpp | 18 ++++++------- src/mapsector.cpp | 2 +- src/mods.cpp | 4 +-- src/network/clientpackethandler.cpp | 6 ++--- src/network/connection.cpp | 1 + src/network/serverpackethandler.cpp | 2 +- src/nodedef.cpp | 10 ++++---- src/nodemetadata.cpp | 2 +- src/nodetimer.cpp | 4 +-- src/porting.cpp | 20 +++++++-------- src/server.cpp | 6 ++--- src/serverobject.cpp | 2 +- src/sound_openal.cpp | 2 +- src/staticobject.h | 2 +- 26 files changed, 92 insertions(+), 94 deletions(-) diff --git a/src/ban.cpp b/src/ban.cpp index 108319953..57b9f49a5 100644 --- a/src/ban.cpp +++ b/src/ban.cpp @@ -36,7 +36,7 @@ BanManager::BanManager(const std::string &banfilepath): } catch(SerializationError &e) { - infostream<<"WARNING: BanManager: creating " + warningstream<<"BanManager: creating " <= 100) { - infostream<<"collisionMoveSimple: WARNING: Loop count exceeded, aborting to avoid infiniite loop"<get(p) != NULL) { - infostream<<"WARNING: "<<__FUNCTION_NAME<<": " + warningstream<<__FUNCTION_NAME<<": " <<"already set data at position" <<"("<Put(leveldb::WriteOptions(), i64tos(getBlockAsInteger(pos)), data); if (!status.ok()) { - errorstream << "WARNING: saveBlock: LevelDB error saving block " + warningstream << "saveBlock: LevelDB error saving block " << PP(pos) << ": " << status.ToString() << std::endl; return false; } @@ -82,7 +82,7 @@ bool Database_LevelDB::deleteBlock(const v3s16 &pos) leveldb::Status status = m_database->Delete(leveldb::WriteOptions(), i64tos(getBlockAsInteger(pos))); if (!status.ok()) { - errorstream << "WARNING: deleteBlock: LevelDB error deleting block " + warningstream << "deleteBlock: LevelDB error deleting block " << PP(pos) << ": " << status.ToString() << std::endl; return false; } diff --git a/src/database-redis.cpp b/src/database-redis.cpp index 9e47b516f..b15f546b2 100644 --- a/src/database-redis.cpp +++ b/src/database-redis.cpp @@ -84,14 +84,14 @@ bool Database_Redis::saveBlock(const v3s16 &pos, const std::string &data) redisReply *reply = static_cast(redisCommand(ctx, "HSET %s %s %b", hash.c_str(), tmp.c_str(), data.c_str(), data.size())); if (!reply) { - errorstream << "WARNING: saveBlock: redis command 'HSET' failed on " + warningstream << "saveBlock: redis command 'HSET' failed on " "block " << PP(pos) << ": " << ctx->errstr << std::endl; freeReplyObject(reply); return false; } if (reply->type == REDIS_REPLY_ERROR) { - errorstream << "WARNING: saveBlock: saving block " << PP(pos) + warningstream << "saveBlock: saving block " << PP(pos) << " failed: " << reply->str << std::endl; freeReplyObject(reply); return false; @@ -150,7 +150,7 @@ bool Database_Redis::deleteBlock(const v3s16 &pos) throw FileNotGoodException(std::string( "Redis command 'HDEL %s %s' failed: ") + ctx->errstr); } else if (reply->type == REDIS_REPLY_ERROR) { - errorstream << "WARNING: deleteBlock: deleting block " << PP(pos) + warningstream << "deleteBlock: deleting block " << PP(pos) << " failed: " << reply->str << std::endl; freeReplyObject(reply); return false; diff --git a/src/database-sqlite3.cpp b/src/database-sqlite3.cpp index 84b1a7122..da3e2c86b 100644 --- a/src/database-sqlite3.cpp +++ b/src/database-sqlite3.cpp @@ -153,7 +153,7 @@ bool Database_SQLite3::deleteBlock(const v3s16 &pos) sqlite3_reset(m_stmt_delete); if (!good) { - errorstream << "WARNING: deleteBlock: Block failed to delete " + warningstream << "deleteBlock: Block failed to delete " << PP(pos) << ": " << sqlite3_errmsg(m_database) << std::endl; } return good; diff --git a/src/debug.h b/src/debug.h index b7521fec2..94b268edd 100644 --- a/src/debug.h +++ b/src/debug.h @@ -89,8 +89,6 @@ __NORETURN extern void sanity_check_fn( void debug_set_exception_handler(); -#define DTIME "" - /* DebugStack */ diff --git a/src/environment.cpp b/src/environment.cpp index a29b0aab1..59159868e 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1188,7 +1188,7 @@ void ServerEnvironment::step(float dtime) u32 time_ms = timer.stop(true); u32 max_time_ms = 200; if(time_ms > max_time_ms){ - infostream<<"WARNING: active block modifiers took " + warningstream<<"active block modifiers took " <m_static_objects.m_active.find(id) != block->m_static_objects.m_active.end()){ - infostream<<"ServerEnv: WARNING: Performing hack #83274" + warningstream<<"ServerEnv: Performing hack #83274" <m_static_objects.remove(id); } diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index dca7618b9..c5edb967e 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -300,7 +300,7 @@ void GUIFormSpecMenu::parseSize(parserData* data,std::string element) void GUIFormSpecMenu::parseList(parserData* data,std::string element) { if (m_gamedef == 0) { - errorstream<<"WARNING: invalid use of 'list' with m_gamedef==0"<explicit_size) - errorstream<<"WARNING: invalid use of list without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of image without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of image without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of item_image without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of button without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of background without a size[] element"< rect; if(data->explicit_size) - errorstream<<"WARNING: invalid use of unpositioned \"field\" in inventory"< rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); if(!data->explicit_size) - errorstream<<"WARNING: invalid use of positioned "<resolveText(default_val); @@ -1195,7 +1195,7 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element) pos.Y += (stof(v_pos[1]) + 7.0/30.0) * (float)spacing.Y; if(!data->explicit_size) - errorstream<<"WARNING: invalid use of label without a size[] element"< lines = split(text, '\n'); @@ -1260,7 +1260,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element) //actually text.length() would be correct but adding +1 avoids to break all mods if(!data->explicit_size) - errorstream<<"WARNING: invalid use of label without a size[] element"< rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); if(!data->explicit_size) - errorstream<<"WARNING: invalid use of image_button without a size[] element"< rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); if(!data->explicit_size) - errorstream<<"WARNING: invalid use of item_image_button without a size[] element"<idef(); ItemStack item; @@ -2158,7 +2157,7 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase) Inventory *inv = m_invmgr->getInventory(s.inventoryloc); if(!inv){ - infostream<<"GUIFormSpecMenu::drawList(): WARNING: " + warningstream<<"GUIFormSpecMenu::drawList(): " <<"The inventory location " <<"\""<getList(s.listname); if(!ilist){ - infostream<<"GUIFormSpecMenu::drawList(): WARNING: " + warningstream<<"GUIFormSpecMenu::drawList(): " <<"The inventory list \""<ndef(); - /*m_dout<ndef(); /*PrintInfo(m_dout); - m_dout< ybottom="< ybottom="<= ybottom; y--) { v3s16 p2(p.X, y, p.Z); - /*m_dout<isDummy()) { - errorstream << "WARNING: saveBlock: Not writing dummy block " + warningstream << "saveBlock: Not writing dummy block " << PP(p3d) << std::endl; return true; } @@ -3346,7 +3346,7 @@ void ServerMap::loadBlock(std::string sectordir, std::string blockfile, } catch(SerializationError &e) { - infostream<<"WARNING: Invalid block data on disk " + warningstream<<"Invalid block data on disk " <<"fullpath="<idef()); } } catch(SerializationError &e) { - errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" + warningstream<<"MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata"< new_mods) // BAD CASE: name conflict in different levels. u32 oldindex = existing_mods[mod.name]; const ModSpec &oldmod = m_unsatisfied_mods[oldindex]; - actionstream<<"WARNING: Mod name conflict detected: \"" + warningstream<<"Mod name conflict detected: \"" < new_mods) // VERY BAD CASE: name conflict in the same level. u32 oldindex = existing_mods[mod.name]; const ModSpec &oldmod = m_unsatisfied_mods[oldindex]; - errorstream<<"WARNING: Mod name conflict detected: \"" + warningstream<<"Mod name conflict detected: \"" <remove(ThreadIdentifier.str())); return NULL; } diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 0bf7e4769..d9ff564da 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1713,7 +1713,7 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) Catch invalid actions */ else { - infostream << "WARNING: Server: Invalid action " + warningstream << "Server: Invalid action " << action << std::endl; } } diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 5a1578bba..b5ccc3b94 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -653,7 +653,7 @@ content_t CNodeDefManager::set(const std::string &name, const ContentFeatures &d // Don't allow redefining ignore (but allow air and unknown) if (name == "ignore") { - infostream << "NodeDefManager: WARNING: Ignoring " + warningstream << "NodeDefManager: Ignoring " "CONTENT_IGNORE redefinition"<getPlayer(client->peer_id); if(player == NULL) { // This can happen if the client timeouts somehow - /*infostream<<"WARNING: "<<__FUNCTION_NAME<<": Client " + /*warningstream<<__FUNCTION_NAME<<": Client " <peer_id <<" has no associated player"<getSendType(); @@ -931,7 +931,7 @@ void Server::AsyncRunStep(bool initial_step) break; default: prof.add("unknown", 1); - infostream << "WARNING: Server: Unknown MapEditEvent " + warningstream << "Server: Unknown MapEditEvent " << ((u32)event->type) << std::endl; break; } diff --git a/src/serverobject.cpp b/src/serverobject.cpp index 699040bf2..236d7e8dc 100644 --- a/src/serverobject.cpp +++ b/src/serverobject.cpp @@ -52,7 +52,7 @@ ServerActiveObject* ServerActiveObject::create(ActiveObjectType type, } // If factory is not found, just return. - dstream<<"WARNING: ServerActiveObject: No factory for type=" + warningstream<<"ServerActiveObject: No factory for type=" < Date: Wed, 14 Oct 2015 02:21:41 -0400 Subject: [PATCH 470/670] Lower log level for benign socket errors --- src/socket.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/socket.cpp b/src/socket.cpp index e82052f77..47fffcc4d 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -571,9 +571,8 @@ bool UDPSocket::WaitData(int timeout_ms) int e = WSAGetLastError(); dstream << (int) m_handle << ": WSAGetLastError()=" << e << std::endl; - if(e == 10004 /* = WSAEINTR */ || e == 10009 /*WSAEBADF*/) - { - dstream << "WARNING: Ignoring WSAEINTR/WSAEBADF." << std::endl; + if (e == 10004 /* WSAEINTR */ || e == 10009 /* WSAEBADF */) { + infostream << "Ignoring WSAEINTR/WSAEBADF." << std::endl; return false; } #endif From 6f4d6cb5741d10e10dacc78e264e421bf6a297cf Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 14 Oct 2015 02:33:04 -0400 Subject: [PATCH 471/670] Always use errorstream for DEBUG_EXCEPTION_HANDLER --- src/debug.h | 12 ++++++------ src/emerge.cpp | 2 +- src/httpfetch.cpp | 2 +- src/main.cpp | 2 +- src/network/connection.cpp | 4 ++-- src/server.cpp | 2 +- src/util/thread.h | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/debug.h b/src/debug.h index 94b268edd..e8d35ba70 100644 --- a/src/debug.h +++ b/src/debug.h @@ -126,16 +126,16 @@ private: #if CATCH_UNHANDLED_EXCEPTIONS == 1 #define BEGIN_DEBUG_EXCEPTION_HANDLER try { - #define END_DEBUG_EXCEPTION_HANDLER(logstream) \ - } catch (std::exception &e) { \ - logstream << "An unhandled exception occurred: " \ - << e.what() << std::endl; \ - FATAL_ERROR(e.what()); \ + #define END_DEBUG_EXCEPTION_HANDLER \ + } catch (std::exception &e) { \ + errorstream << "An unhandled exception occurred: " \ + << e.what() << std::endl; \ + FATAL_ERROR(e.what()); \ } #else // Dummy ones #define BEGIN_DEBUG_EXCEPTION_HANDLER - #define END_DEBUG_EXCEPTION_HANDLER(logstream) + #define END_DEBUG_EXCEPTION_HANDLER #endif #endif // DEBUG_HEADER diff --git a/src/emerge.cpp b/src/emerge.cpp index 3532ca29d..1e40b915a 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -700,6 +700,6 @@ void *EmergeThread::run() m_server->setAsyncFatalError(err.str()); } - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER return NULL; } diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 6040b1b3b..979f11160 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -677,7 +677,7 @@ protected: else waitForIO(100); - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER } // Call curl_multi_remove_handle and cleanup easy handles diff --git a/src/main.cpp b/src/main.cpp index cc8b4bcaa..53f8a1fb7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -226,7 +226,7 @@ int main(int argc, char *argv[]) // Stop httpfetch thread (if started) httpfetch_cleanup(); - END_DEBUG_EXCEPTION_HANDLER(errorstream); + END_DEBUG_EXCEPTION_HANDLER return retval; } diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 0738c6a1f..f7452d8e4 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -1316,7 +1316,7 @@ void * ConnectionSendThread::run() /* send non reliable packets */ sendPackets(dtime); - END_DEBUG_EXCEPTION_HANDLER(errorstream); + END_DEBUG_EXCEPTION_HANDLER } PROFILE(g_profiler->remove(ThreadIdentifier.str())); @@ -2097,7 +2097,7 @@ void * ConnectionReceiveThread::run() } } #endif - END_DEBUG_EXCEPTION_HANDLER(errorstream); + END_DEBUG_EXCEPTION_HANDLER } PROFILE(g_profiler->remove(ThreadIdentifier.str())); diff --git a/src/server.cpp b/src/server.cpp index 8f105ffd2..d6207538f 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -112,7 +112,7 @@ void *ServerThread::run() } } - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER return NULL; } diff --git a/src/util/thread.h b/src/util/thread.h index a32871aab..8d8b6fe7f 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -223,7 +223,7 @@ public: doUpdate(); } - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER return NULL; } From 6f2d785d0ff761961912d7e79a7d16c4adf86861 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 14 Oct 2015 02:39:30 -0400 Subject: [PATCH 472/670] Rename macros with two leading underscores These names are reserved for the compiler/library implementations. --- src/camera.cpp | 4 +- src/client.cpp | 20 ++++---- src/clientiface.cpp | 2 +- src/clientmap.cpp | 4 +- src/content_cao.cpp | 2 +- src/content_nodemeta.cpp | 6 +-- src/content_sao.cpp | 2 +- src/debug.h | 14 ++---- src/emerge.cpp | 2 +- src/environment.cpp | 8 +-- src/httpfetch.cpp | 2 +- src/inventory.cpp | 4 +- src/inventorymanager.cpp | 2 +- src/map.cpp | 36 +++++++------- src/mapblock.cpp | 12 ++--- src/nodemetadata.cpp | 2 +- src/script/lua_api/l_server.cpp | 8 +-- src/server.cpp | 88 ++++++++++++++++----------------- src/unittest/test.cpp | 2 +- src/util/thread.h | 2 +- 20 files changed, 109 insertions(+), 113 deletions(-) diff --git a/src/camera.cpp b/src/camera.cpp index 0c6d03e4e..5370396a9 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -79,7 +79,7 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control, m_camera_mode(CAMERA_MODE_FIRST) { - //dstream<<__FUNCTION_NAME< 2.0) @@ -824,7 +824,7 @@ void Client::initLocalMapSaving(const Address &address, void Client::ReceiveAll() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); u32 start_ms = porting::getTimeMs(); for(;;) { @@ -850,7 +850,7 @@ void Client::ReceiveAll() void Client::Receive() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt; m_con.Receive(&pkt); ProcessData(&pkt); @@ -867,7 +867,7 @@ inline void Client::handleCommand(NetworkPacket* pkt) */ void Client::ProcessData(NetworkPacket *pkt) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); ToClientCommand command = (ToClientCommand) pkt->getCommand(); u32 sender_peer_id = pkt->getPeerId(); @@ -1213,7 +1213,7 @@ void Client::sendChangePassword(const std::string &oldpassword, void Client::sendDamage(u8 damage) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u8)); pkt << damage; @@ -1222,7 +1222,7 @@ void Client::sendDamage(u8 damage) void Client::sendBreath(u16 breath) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_BREATH, sizeof(u16)); pkt << breath; @@ -1231,7 +1231,7 @@ void Client::sendBreath(u16 breath) void Client::sendRespawn() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_RESPAWN, 0); Send(&pkt); @@ -1239,7 +1239,7 @@ void Client::sendRespawn() void Client::sendReady() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_CLIENT_READY, 1 + 1 + 1 + 1 + 2 + sizeof(char) * strlen(g_version_hash)); diff --git a/src/clientiface.cpp b/src/clientiface.cpp index a6ab1ef41..e7f127b84 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -67,7 +67,7 @@ void RemoteClient::GetNextBlocks ( float dtime, std::vector &dest) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Increment timers diff --git a/src/clientmap.cpp b/src/clientmap.cpp index 00a5b1021..b865c2780 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -81,7 +81,7 @@ ClientMap::~ClientMap() MapSector * ClientMap::emergeSector(v2s16 p2d) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Check that it doesn't exist already try{ return getSectorNoGenerate(p2d); @@ -400,7 +400,7 @@ struct MeshBufListList void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); bool is_transparent_pass = pass == scene::ESNRP_TRANSPARENT; diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 270483764..b3f90aa9c 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -465,7 +465,7 @@ void ItemCAO::updateTexture() } catch(SerializationError &e) { - warningstream<<__FUNCTION_NAME + warningstream< 1) { - infostream<<__FUNCTION_NAME<<": version "<get(p) != NULL) { - warningstream<<__FUNCTION_NAME<<": " + warningstream< #endif - #define __NORETURN __declspec(noreturn) - #define __FUNCTION_NAME __FUNCTION__ #define NORETURN __declspec(noreturn) #define FUNCTION_NAME __FUNCTION__ #else - #define __NORETURN __attribute__ ((__noreturn__)) - #define __FUNCTION_NAME __PRETTY_FUNCTION__ #define NORETURN __attribute__ ((__noreturn__)) #define FUNCTION_NAME __PRETTY_FUNCTION__ #endif @@ -57,16 +53,16 @@ with this program; if not, write to the Free Software Foundation, Inc., /* Abort program execution immediately */ -__NORETURN extern void fatal_error_fn( +NORETURN extern void fatal_error_fn( const char *msg, const char *file, unsigned int line, const char *function); #define FATAL_ERROR(msg) \ - fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME) + fatal_error_fn((msg), __FILE__, __LINE__, FUNCTION_NAME) #define FATAL_ERROR_IF(expr, msg) \ ((expr) \ - ? fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME) \ + ? fatal_error_fn((msg), __FILE__, __LINE__, FUNCTION_NAME) \ : (void)(0)) /* @@ -75,14 +71,14 @@ __NORETURN extern void fatal_error_fn( defined) */ -__NORETURN extern void sanity_check_fn( +NORETURN extern void sanity_check_fn( const char *assertion, const char *file, unsigned int line, const char *function); #define SANITY_CHECK(expr) \ ((expr) \ ? (void)(0) \ - : sanity_check_fn(#expr, __FILE__, __LINE__, __FUNCTION_NAME)) + : sanity_check_fn(#expr, __FILE__, __LINE__, FUNCTION_NAME)) #define sanity_check(expr) SANITY_CHECK(expr) diff --git a/src/emerge.cpp b/src/emerge.cpp index 1e40b915a..21f17cb0e 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -627,7 +627,7 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata, void *EmergeThread::run() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER v3s16 pos; diff --git a/src/environment.cpp b/src/environment.cpp index 59159868e..88f25536f 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -70,7 +70,7 @@ Environment::~Environment() void Environment::addPlayer(Player *player) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); /* Check that peer_ids are unique. Also check that names are unique. @@ -982,7 +982,7 @@ void ServerEnvironment::clearAllObjects() void ServerEnvironment::step(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); //TimeTaker timer("ServerEnv step"); @@ -2028,7 +2028,7 @@ ClientMap & ClientEnvironment::getClientMap() void ClientEnvironment::addPlayer(Player *player) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); /* It is a failure if player is local and there already is a local player @@ -2052,7 +2052,7 @@ LocalPlayer * ClientEnvironment::getLocalPlayer() void ClientEnvironment::step(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); /* Step time of day */ stepTimeOfDay(dtime); diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 979f11160..f10351a01 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -616,7 +616,7 @@ protected: void *run() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); CurlHandlePool pool; diff --git a/src/inventory.cpp b/src/inventory.cpp index 67f979b13..e89993e63 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -126,7 +126,7 @@ ItemStack::ItemStack(std::string name_, u16 count_, void ItemStack::serialize(std::ostream &os) const { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); if(empty()) return; @@ -151,7 +151,7 @@ void ItemStack::serialize(std::ostream &os) const void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); clear(); diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index d4e8d2f25..5b29b6f17 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -886,7 +886,7 @@ bool getCraftingResult(Inventory *inv, ItemStack& result, std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); result.clear(); diff --git a/src/map.cpp b/src/map.cpp index a2dbffe66..ceebd40a3 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1619,7 +1619,7 @@ void Map::transformLiquids(std::map & modified_blocks) INodeDefManager *nodemgr = m_gamedef->ndef(); - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); //TimeTaker timer("transformLiquids()"); u32 loopcount = 0; @@ -2118,7 +2118,7 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emer m_emerge(emerge), m_map_metadata_changed(true) { - verbosestream<<__FUNCTION_NAME< &modified_blocks ) { - DSTACKF("%s: p=(%d,%d,%d)", __FUNCTION_NAME, p.X, p.Y, p.Z); + DSTACKF("%s: p=(%d,%d,%d)", FUNCTION_NAME, p.X, p.Y, p.Z); /*infostream<<"generateBlock(): " <<"("< &dst) void ServerMap::saveMapMeta() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); createDirs(m_savedir); @@ -3016,7 +3016,7 @@ void ServerMap::saveMapMeta() void ServerMap::loadMapMeta() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); Settings conf; std::string fullpath = m_savedir + DIR_DELIM + "map_meta.txt"; @@ -3041,7 +3041,7 @@ void ServerMap::loadMapMeta() void ServerMap::saveSectorMeta(ServerMapSector *sector) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Format used for writing u8 version = SER_FMT_VER_HIGHEST_WRITE; // Get destination @@ -3062,7 +3062,7 @@ void ServerMap::saveSectorMeta(ServerMapSector *sector) MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Get destination v2s16 p2d = getSectorPos(sectordir); @@ -3103,7 +3103,7 @@ MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load bool ServerMap::loadSectorMeta(v2s16 p2d) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // The directory layout we're going to load from. // 1 - original sectors/xxxxzzzz/ @@ -3145,7 +3145,7 @@ bool ServerMap::loadSectorMeta(v2s16 p2d) #if 0 bool ServerMap::loadSectorFull(v2s16 p2d) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); MapSector *sector = NULL; @@ -3284,7 +3284,7 @@ bool ServerMap::saveBlock(MapBlock *block, Database *db) void ServerMap::loadBlock(std::string sectordir, std::string blockfile, MapSector *sector, bool save_after_load) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); std::string fullpath = sectordir + DIR_DELIM + blockfile; try { @@ -3360,7 +3360,7 @@ void ServerMap::loadBlock(std::string sectordir, std::string blockfile, void ServerMap::loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool save_after_load) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); try { std::istringstream is(*blob, std::ios_base::binary); @@ -3428,7 +3428,7 @@ void ServerMap::loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool MapBlock* ServerMap::loadBlock(v3s16 blockpos) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); v2s16 p2d(blockpos.X, blockpos.Z); diff --git a/src/mapblock.cpp b/src/mapblock.cpp index be16c3bb7..f8747f52b 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -796,12 +796,12 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) char tmp; is.read(&tmp, 1); if (is.gcount() != 1) - throw SerializationError(std::string(__FUNCTION_NAME) + throw SerializationError(std::string(FUNCTION_NAME) + ": not enough input data"); is_underground = tmp; is.read((char *)*databuf_nodelist, nodecount * ser_length); if ((u32)is.gcount() != nodecount * ser_length) - throw SerializationError(std::string(__FUNCTION_NAME) + throw SerializationError(std::string(FUNCTION_NAME) + ": not enough input data"); } else if (version <= 10) { u8 t8; @@ -814,7 +814,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) decompress(is, os, version); std::string s = os.str(); if (s.size() != nodecount) - throw SerializationError(std::string(__FUNCTION_NAME) + throw SerializationError(std::string(FUNCTION_NAME) + ": not enough input data"); for (u32 i = 0; i < s.size(); i++) { databuf_nodelist[i*ser_length] = s[i]; @@ -826,7 +826,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) decompress(is, os, version); std::string s = os.str(); if (s.size() != nodecount) - throw SerializationError(std::string(__FUNCTION_NAME) + throw SerializationError(std::string(FUNCTION_NAME) + ": not enough input data"); for (u32 i = 0; i < s.size(); i++) { databuf_nodelist[i*ser_length + 1] = s[i]; @@ -839,7 +839,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) decompress(is, os, version); std::string s = os.str(); if (s.size() != nodecount) - throw SerializationError(std::string(__FUNCTION_NAME) + throw SerializationError(std::string(FUNCTION_NAME) + ": not enough input data"); for (u32 i = 0; i < s.size(); i++) { databuf_nodelist[i*ser_length + 2] = s[i]; @@ -859,7 +859,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) decompress(is, os, version); std::string s = os.str(); if (s.size() != nodecount * 3) - throw SerializationError(std::string(__FUNCTION_NAME) + throw SerializationError(std::string(FUNCTION_NAME) + ": decompress resulted in size other than nodecount*3"); // deserialize nodes from buffer diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index 9c74dcd28..126889ecf 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -120,7 +120,7 @@ void NodeMetadataList::deSerialize(std::istream &is, IItemDefManager *item_def_m } if (version != 1) { - std::string err_str = std::string(__FUNCTION_NAME) + std::string err_str = std::string(FUNCTION_NAME) + ": version " + itos(version) + " not supported"; infostream << err_str << std::endl; throw SerializationError(err_str); diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index a6dac487b..6a8183088 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -110,7 +110,7 @@ int ModApiServer::l_get_player_ip(lua_State *L) } catch(con::PeerNotFoundException) // unlikely { - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushnil(L); // error return 1; } @@ -136,7 +136,7 @@ int ModApiServer::l_get_player_information(lua_State *L) } catch(con::PeerNotFoundException) // unlikely { - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushnil(L); // error return 1; } @@ -150,7 +150,7 @@ int ModApiServer::l_get_player_information(lua_State *L) #define ERET(code) \ if (!(code)) { \ - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; \ + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \ lua_pushnil(L); /* error */ \ return 1; \ } @@ -281,7 +281,7 @@ int ModApiServer::l_ban_player(lua_State *L) } catch(con::PeerNotFoundException) // unlikely { - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushboolean(L, false); // error return 1; } diff --git a/src/server.cpp b/src/server.cpp index d6207538f..3aff2fb97 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -88,7 +88,7 @@ private: void *ServerThread::run() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER m_server->AsyncRunStep(true); @@ -433,7 +433,7 @@ Server::~Server() void Server::start(Address bind_addr) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); m_bind_addr = bind_addr; @@ -466,7 +466,7 @@ void Server::start(Address bind_addr) void Server::stop() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); infostream<<"Server: Stopping and waiting threads"< 2.0) dtime = 2.0; @@ -509,7 +509,7 @@ void Server::step(float dtime) void Server::AsyncRunStep(bool initial_step) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); g_profiler->add("Server::AsyncRunStep (num)", 1); @@ -693,7 +693,7 @@ void Server::AsyncRunStep(bool initial_step) Player *player = m_env->getPlayer(client->peer_id); if(player == NULL) { // This can happen if the client timeouts somehow - /*warningstream<<__FUNCTION_NAME<<": Client " + /*warningstream<peer_id <<" has no associated player"<getSendType(); @@ -1021,7 +1021,7 @@ void Server::AsyncRunStep(bool initial_step) void Server::Receive() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); SharedBuffer data; u16 peer_id; try { @@ -1158,7 +1158,7 @@ inline void Server::handleCommand(NetworkPacket* pkt) void Server::ProcessData(NetworkPacket *pkt) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Environment is locked first. MutexAutoLock envlock(m_env_mutex); @@ -1354,7 +1354,7 @@ void Server::SetBlocksNotSent(std::map& block) void Server::peerAdded(con::Peer *peer) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); verbosestream<<"Server::peerAdded(): peer->id=" <id<id=" <id<<", timeout="<getPlayer()); @@ -1624,7 +1624,7 @@ void Server::SendInventory(PlayerSAO* playerSAO) void Server::SendChatMessage(u16 peer_id, const std::wstring &message) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_CHAT_MESSAGE, 0, peer_id); pkt << message; @@ -1640,7 +1640,7 @@ void Server::SendChatMessage(u16 peer_id, const std::wstring &message) void Server::SendShowFormspecMessage(u16 peer_id, const std::string &formspec, const std::string &formname) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_SHOW_FORMSPEC, 0 , peer_id); @@ -1655,7 +1655,7 @@ void Server::SendSpawnParticle(u16 peer_id, v3f pos, v3f velocity, v3f accelerat float expirationtime, float size, bool collisiondetection, bool vertical, std::string texture) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_SPAWN_PARTICLE, 0, peer_id); @@ -1677,7 +1677,7 @@ void Server::SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime, v3 v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, float minexptime, float maxexptime, float minsize, float maxsize, bool collisiondetection, bool vertical, std::string texture, u32 id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 0, peer_id); @@ -1699,7 +1699,7 @@ void Server::SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime, v3 void Server::SendDeleteParticleSpawner(u16 peer_id, u32 id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY, 2, peer_id); @@ -1809,7 +1809,7 @@ void Server::SendOverrideDayNightRatio(u16 peer_id, bool do_override, void Server::SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_TIME_OF_DAY, 0, peer_id); pkt << time << time_speed; @@ -1824,7 +1824,7 @@ void Server::SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed) void Server::SendPlayerHP(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); // In some rare case, if the player is disconnected // while Lua call l_punch, for example, this can be NULL @@ -1842,7 +1842,7 @@ void Server::SendPlayerHP(u16 peer_id) void Server::SendPlayerBreath(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); assert(playersao); @@ -1852,7 +1852,7 @@ void Server::SendPlayerBreath(u16 peer_id) void Server::SendMovePlayer(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); Player *player = m_env->getPlayer(peer_id); assert(player); @@ -2120,7 +2120,7 @@ void Server::setBlockNotSent(v3s16 p) void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto_version) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); v3s16 p = block->getPos(); @@ -2142,7 +2142,7 @@ void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto void Server::SendBlocks(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); MutexAutoLock envlock(m_env_mutex); //TODO check if one big lock could be faster then multiple small ones @@ -2212,7 +2212,7 @@ void Server::SendBlocks(float dtime) void Server::fillMediaCache() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); infostream<<"Server: Calculating media file checksums"< &tosend) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); verbosestream<<"Server::sendRequestedMedia(): " <<"Sending files to client"<::iterator i = m_detached_inventories.begin(); @@ -2494,7 +2494,7 @@ void Server::sendDetachedInventories(u16 peer_id) void Server::DiePlayer(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); assert(playersao); @@ -2514,7 +2514,7 @@ void Server::DiePlayer(u16 peer_id) void Server::RespawnPlayer(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); assert(playersao); @@ -2540,7 +2540,7 @@ void Server::RespawnPlayer(u16 peer_id) void Server::DenySudoAccess(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_DENY_SUDO_MODE, 0, peer_id); Send(&pkt); @@ -2566,7 +2566,7 @@ void Server::DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); SendAccessDenied(peer_id, reason, custom_reason); m_clients.event(peer_id, CSE_SetDenied); @@ -2577,7 +2577,7 @@ void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string // the minimum version for MT users, maybe in 1 year void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); SendAccessDenied_Legacy(peer_id, reason); m_clients.event(peer_id, CSE_SetDenied); @@ -2586,7 +2586,7 @@ void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason) void Server::acceptAuth(u16 peer_id, bool forSudoMode) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); if (!forSudoMode) { RemoteClient* client = getClient(peer_id, CS_Invalid); @@ -2617,7 +2617,7 @@ void Server::acceptAuth(u16 peer_id, bool forSudoMode) void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); std::wstring message; { /* @@ -2700,7 +2700,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) void Server::UpdateCrafting(Player* player) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Get a preview for crafting ItemStack preview; @@ -3388,7 +3388,7 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version void dedicated_server_loop(Server &server, bool &kill) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); verbosestream<<"dedicated_server_loop()"< Date: Thu, 15 Oct 2015 00:23:29 -0400 Subject: [PATCH 473/670] Remove explicit syslog printing for uncaught exceptions on Android All log operations are now added to the syslog implicitly. Also, pass along mutable string to argument vector for main(). --- src/porting_android.cpp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 06cc929dd..c7e28cc9a 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -21,13 +21,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #error This file may only be compiled for android! #endif +#include "util/numeric.h" #include "porting.h" #include "porting_android.h" #include "threading/thread.h" #include "config.h" #include "filesys.h" #include "log.h" + #include +#include +#include #ifdef GPROF #include "prof.h" @@ -40,28 +44,23 @@ void android_main(android_app *app) int retval = 0; porting::app_global = app; - Thread::setName("MainThread"); + Thread::setName("Main"); try { app_dummy(); - char *argv[] = {(char*) "minetest"}; - main(sizeof(argv) / sizeof(argv[0]), argv); - } catch (BaseException &e) { - std::stringstream msg; - msg << "Exception handled by main: " << e.what(); - const char *message = msg.str().c_str(); - __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, "%s", message); - errorstream << msg << std::endl; + char *argv[] = {strdup(PROJECT_NAME), NULL}; + main(ARRLEN(argv) - 1, argv); + free(argv[0]); + } catch (std::exception &e) { + errorstream << "Uncaught exception in main thread: " << e.what() << std::endl; retval = -1; } catch (...) { - __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, - "An unknown exception occured!"); errorstream << "Uncaught exception in main thread!" << std::endl; retval = -1; } porting::cleanupAndroid(); - errorstream << "Shutting down." << std::endl; + infostream << "Shutting down." << std::endl; exit(retval); } @@ -125,7 +124,7 @@ void initAndroid() JavaVM *jvm = app_global->activity->vm; JavaVMAttachArgs lJavaVMAttachArgs; lJavaVMAttachArgs.version = JNI_VERSION_1_6; - lJavaVMAttachArgs.name = "MinetestNativeThread"; + 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 @@ -146,7 +145,7 @@ void initAndroid() #ifdef GPROF /* in the start-up code */ - __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, + __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME_C, "Initializing GPROF profiler"); monstartup("libminetest.so"); #endif @@ -186,8 +185,8 @@ void setExternalStorageDir(JNIEnv* lJNIEnv) lJNIEnv->ReleaseStringUTFChars(StringPath, externalPath); path_storage = userPath; - path_user = userPath + DIR_DELIM + PROJECT_NAME; - path_share = userPath + DIR_DELIM + PROJECT_NAME; + path_user = userPath + DIR_DELIM + PROJECT_NAME_C; + path_share = userPath + DIR_DELIM + PROJECT_NAME_C; } void showInputDialog(const std::string& acceptButton, const std::string& hint, @@ -240,7 +239,7 @@ std::string getInputDialogValue() return text; } -#if not defined(SERVER) +#ifndef SERVER float getDisplayDensity() { static bool firstrun = true; @@ -290,5 +289,5 @@ v2u32 getDisplaySize() } return retval; } -#endif //SERVER +#endif // ndef SERVER } From 7b8d372947aae232ddf598155e972bb4dda157af Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Thu, 15 Oct 2015 01:08:18 -0400 Subject: [PATCH 474/670] Use warningstream for deprecated field messages and refactor log_deprecated --- src/script/common/c_content.cpp | 39 ++++++++++++++++---------------- src/script/common/c_internal.cpp | 31 +++++++++---------------- 2 files changed, 30 insertions(+), 40 deletions(-) diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 3754fc2ff..00ec85b2f 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -76,7 +76,7 @@ ItemDefinition read_item_definition(lua_State* L,int index, getboolfield(L, index, "liquids_pointable", def.liquids_pointable); warn_if_field_exists(L, index, "tool_digging_properties", - "deprecated: use tool_capabilities"); + "Deprecated; use tool_capabilities"); lua_getfield(L, index, "tool_capabilities"); if(lua_istable(L, -1)){ @@ -427,17 +427,17 @@ ContentFeatures read_content_features(lua_State *L, int index) // Warn about some deprecated fields warn_if_field_exists(L, index, "wall_mounted", - "deprecated: use paramtype2 = 'wallmounted'"); + "Deprecated; use paramtype2 = 'wallmounted'"); warn_if_field_exists(L, index, "light_propagates", - "deprecated: determined from paramtype"); + "Deprecated; determined from paramtype"); warn_if_field_exists(L, index, "dug_item", - "deprecated: use 'drop' field"); + "Deprecated; use 'drop' field"); warn_if_field_exists(L, index, "extra_dug_item", - "deprecated: use 'drop' field"); + "Deprecated; use 'drop' field"); warn_if_field_exists(L, index, "extra_dug_item_rarity", - "deprecated: use 'drop' field"); + "Deprecated; use 'drop' field"); warn_if_field_exists(L, index, "metadata_name", - "deprecated: use on_add and metadata callbacks"); + "Deprecated; use on_add and metadata callbacks"); // True for all ground-like things like stone and mud, false for eg. trees getboolfield(L, index, "is_ground_content", f.is_ground_content); @@ -639,14 +639,13 @@ void pushnode(lua_State *L, const MapNode &n, INodeDefManager *ndef) /******************************************************************************/ void warn_if_field_exists(lua_State *L, int table, - const char *fieldname, const std::string &message) + const char *name, const std::string &message) { - lua_getfield(L, table, fieldname); - if(!lua_isnil(L, -1)){ -//TODO find way to access backtrace fct from here - // infostream<get("deprecated_lua_api_handling"); if (value == "log") { - dolog = true; + do_log = true; } else if (value == "error") { - dolog = true; - doerror = true; + do_log = true; + do_error = true; } } - if (doerror) { - if (L != NULL) { + if (do_log) { + warningstream << message << std::endl; + if (do_error) script_error(L, LUA_ERRRUN, NULL, NULL); - } else { - FATAL_ERROR("Can't do a scripterror for this deprecated message, " - "so exit completely!"); - } - } - - if (dolog) { - /* abusing actionstream because of lack of file-only-logged loglevel */ - actionstream << message << std::endl; - if (L != NULL) { - actionstream << script_get_backtrace(L) << std::endl; - } + else + infostream << script_get_backtrace(L) << std::endl; } } From e067ceacb8787f1dc5b1ab69b50dba4497c55433 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Thu, 15 Oct 2015 00:45:56 -0400 Subject: [PATCH 475/670] Clean up gettext initialization --- src/gettext.cpp | 112 +++++++++++++++++++++--------------------------- src/gettext.h | 2 +- 2 files changed, 49 insertions(+), 65 deletions(-) diff --git a/src/gettext.cpp b/src/gettext.cpp index e8819f131..26b16f434 100644 --- a/src/gettext.cpp +++ b/src/gettext.cpp @@ -118,106 +118,90 @@ const char* MSVC_LocaleLookup(const char* raw_shortname) { /******************************************************************************/ #ifdef _MSC_VER -void init_gettext(const char *path, const std::string &configured_language, int argc, char** argv) { +void init_gettext(const char *path, const std::string &configured_language, + int argc, const char *argv[]) #else -void init_gettext(const char *path, const std::string &configured_language) { +void init_gettext(const char *path, const std::string &configured_language) #endif +{ #if USE_GETTEXT - /** first try to set user override environment **/ - if (configured_language.length() != 0) { + // First, try to set user override environment + if (!configured_language.empty()) { #ifndef _WIN32 - /* add user specified locale to environment */ + // Add user specified locale to environment setenv("LANGUAGE", configured_language.c_str(), 1); - /* reload locale with changed environment */ + // Reload locale with changed environment setlocale(LC_ALL, ""); #elif defined(_MSC_VER) - std::string current_language_var(""); - if (getenv("LANGUAGE") != 0) { - current_language_var = std::string(getenv("LANGUAGE")); - } + std::string current_language; + const char *env_lang = getenv("LANGUAGE"); + if (env_lang) + current_language = env_lang; - char *lang_str = (char*)calloc(10 + configured_language.length(), sizeof(char)); - strcat(lang_str, "LANGUAGE="); - strcat(lang_str, configured_language.c_str()); - putenv(lang_str); - - SetEnvironmentVariableA("LANGUAGE",configured_language.c_str()); + _putenv(("LANGUAGE=" + configured_language).c_str()); + SetEnvironmentVariableA("LANGUAGE", configured_language.c_str()); #ifndef SERVER - //very very dirty workaround to force gettext to see the right environment - if (current_language_var != configured_language) { - STARTUPINFO startupinfo; - PROCESS_INFORMATION processinfo; - memset(&startupinfo, 0, sizeof(startupinfo)); - memset(&processinfo, 0, sizeof(processinfo)); - errorstream << "MSVC localization workaround active restating minetest in new environment!" << std::endl; + // Hack to force gettext to see the right environment + if (current_language != configured_language) { + errorstream << "MSVC localization workaround active. " + "Restarting " PROJECT_NAME_C " in a new environment!" << std::endl; - std::string parameters = ""; + std::string parameters; + + for (unsigned int i = 1; i < argc; i++) { + if (!parameters.empty()) + parameters += ' '; - for (unsigned int i=1;i < argc; i++) { - if (parameters != "") { - parameters += " "; - } parameters += argv[i]; } - const char* ptr_parameters = 0; + const char *ptr_parameters = NULL; - if (parameters != "") { + if (!parameters.empty()) ptr_parameters = parameters.c_str(); - } - /** users may start by short name in commandline without extention **/ - std::string appname = argv[0]; - if (appname.substr(appname.length() - 4) != ".exe") { - appname += ".exe"; - } + // Allow calling without an extension + std::string app_name = argv[0]; + if (app_name.compare(appname.size() - 4, 4, ".exe") != 0) + app_name += ".exe"; - if (!CreateProcess(appname.c_str(), - (char*) ptr_parameters, - NULL, - NULL, - false, - DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT, - NULL, - NULL, - &startupinfo, - &processinfo)) { + STARTUPINFO startup_info = {0}; + PROCESS_INFORMATION process_info = {0}; + + bool success = CreateProcess(app_name.c_str(), (char *)ptr_parameters, + NULL, NULL, false, DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT, + NULL, NULL, &startup_info, &process_info); + + if (success) { + exit(0); + // NOTREACHED + } else { char buffer[1024]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), - buffer, - sizeof(buffer)-1, - NULL); + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), buffer, + sizeof(buffer) - 1, NULL); + errorstream << "*******************************************************" << std::endl; - errorstream << "CMD: " << appname << std::endl; + errorstream << "CMD: " << app_name << std::endl; errorstream << "Failed to restart with current locale: " << std::endl; errorstream << buffer; errorstream << "Expect language to be broken!" << std::endl; errorstream << "*******************************************************" << std::endl; } - else { - exit(0); - } } #else errorstream << "*******************************************************" << std::endl; errorstream << "Can't apply locale workaround for server!" << std::endl; errorstream << "Expect language to be broken!" << std::endl; errorstream << "*******************************************************" << std::endl; - #endif - setlocale(LC_ALL,configured_language.c_str()); + setlocale(LC_ALL, configured_language.c_str()); #else // Mingw - char *lang_str = (char*)calloc(10 + configured_language.length(), sizeof(char)); - strcat(lang_str, "LANGUAGE="); - strcat(lang_str, configured_language.c_str()); - putenv(lang_str); - + _putenv(("LANGUAGE=" + configured_language).c_str()); setlocale(LC_ALL, ""); #endif // ifndef _WIN32 } diff --git a/src/gettext.h b/src/gettext.h index 9b4e801f7..0170d1c45 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifdef _MSC_VER void init_gettext(const char *path, const std::string &configured_language, - int argc, char** argv); + int argc, const char *argv[]); #else void init_gettext(const char *path, const std::string &configured_language); #endif From 1a5b4b38f3457a8f1423305cef4e85d05da47d62 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 6 Aug 2015 00:26:18 -0400 Subject: [PATCH 476/670] Add BufReader and vector-based serialization methods --- src/unittest/test_serialization.cpp | 263 ++++++++++++++++++++++++++++ src/util/serialize.cpp | 71 ++++++++ src/util/serialize.h | 241 ++++++++++++++++++++++++- 3 files changed, 573 insertions(+), 2 deletions(-) diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index 49f348e9c..4cbc999ea 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -40,6 +40,9 @@ public: void testDeSerializeLongString(); void testStreamRead(); void testStreamWrite(); + void testVecPut(); + void testStringLengthLimits(); + void testBufReader(); std::string teststring2; std::wstring teststring2_w; @@ -64,6 +67,9 @@ void TestSerialization::runTests(IGameDef *gamedef) TEST(testSerializeHex); TEST(testStreamRead); TEST(testStreamWrite); + TEST(testVecPut); + TEST(testStringLengthLimits); + TEST(testBufReader); } //////////////////////////////////////////////////////////////////////////////// @@ -369,6 +375,263 @@ void TestSerialization::testStreamWrite() } +void TestSerialization::testVecPut() +{ + std::vector buf; + + putU8(&buf, 0x11); + putU16(&buf, 0x2233); + putU32(&buf, 0x44556677); + putU64(&buf, 0x8899AABBCCDDEEFF); + + putS8(&buf, -128); + putS16(&buf, 30000); + putS32(&buf, -6); + putS64(&buf, -43); + + putF1000(&buf, 53.53467f); + putF1000(&buf, -300000.32f); + putF1000(&buf, F1000_MIN); + putF1000(&buf, F1000_MAX); + + putString(&buf, "foobar!"); + + putV2S16(&buf, v2s16(500, 500)); + putV3S16(&buf, v3s16(4207, 604, -30)); + putV2S32(&buf, v2s32(1920, 1080)); + putV3S32(&buf, v3s32(-400, 6400054, 290549855)); + putV2F1000(&buf, v2f(500.65661f, 350.34567f)); + + putWideString(&buf, L"\x02~woof~\x5455"); + + putV3F1000(&buf, v3f(500, 10024.2f, -192.54f)); + putARGB8(&buf, video::SColor(255, 128, 50, 128)); + + putLongString(&buf, "some longer string here"); + + putU16(&buf, 0xF00D); + + UASSERT(buf.size() == sizeof(test_serialized_data)); + UASSERT(!memcmp(&buf[0], test_serialized_data, sizeof(test_serialized_data))); +} + + +void TestSerialization::testStringLengthLimits() +{ + std::vector buf; + std::string too_long(STRING_MAX_LEN + 1, 'A'); + std::string way_too_large(LONG_STRING_MAX_LEN + 1, 'B'); + std::wstring too_long_wide(WIDE_STRING_MAX_LEN + 1, L'C'); + + EXCEPTION_CHECK(SerializationError, putString(&buf, too_long)); + + putLongString(&buf, too_long); + too_long.resize(too_long.size() - 1); + putString(&buf, too_long); + + EXCEPTION_CHECK(SerializationError, putWideString(&buf, too_long_wide)); + too_long_wide.resize(too_long_wide.size() - 1); + putWideString(&buf, too_long_wide); +} + + +void TestSerialization::testBufReader() +{ + u8 u8_data; + u16 u16_data; + u32 u32_data; + u64 u64_data; + s8 s8_data; + s16 s16_data; + s32 s32_data; + s64 s64_data; + f32 f32_data, f32_data2, f32_data3, f32_data4; + video::SColor scolor_data; + v2s16 v2s16_data; + v3s16 v3s16_data; + v2s32 v2s32_data; + v3s32 v3s32_data; + v2f v2f_data; + v3f v3f_data; + std::string string_data; + std::wstring widestring_data; + std::string longstring_data; + u8 raw_data[10] = {0}; + + BufReader buf(test_serialized_data, sizeof(test_serialized_data)); + + // Try reading data like normal + UASSERT(buf.getU8() == 0x11); + UASSERT(buf.getU16() == 0x2233); + UASSERT(buf.getU32() == 0x44556677); + UASSERT(buf.getU64() == 0x8899AABBCCDDEEFF); + UASSERT(buf.getS8() == -128); + UASSERT(buf.getS16() == 30000); + UASSERT(buf.getS32() == -6); + UASSERT(buf.getS64() == -43); + UASSERT(buf.getF1000() == 53.534f); + UASSERT(buf.getF1000() == -300000.32f); + UASSERT(buf.getF1000() == F1000_MIN); + UASSERT(buf.getF1000() == F1000_MAX); + UASSERT(buf.getString() == "foobar!"); + UASSERT(buf.getV2S16() == v2s16(500, 500)); + UASSERT(buf.getV3S16() == v3s16(4207, 604, -30)); + UASSERT(buf.getV2S32() == v2s32(1920, 1080)); + UASSERT(buf.getV3S32() == v3s32(-400, 6400054, 290549855)); + UASSERT(buf.getV2F1000() == v2f(500.656f, 350.345f)); + UASSERT(buf.getWideString() == L"\x02~woof~\x5455"); + UASSERT(buf.getV3F1000() == v3f(500, 10024.2f, -192.54f)); + UASSERT(buf.getARGB8() == video::SColor(255, 128, 50, 128)); + UASSERT(buf.getLongString() == "some longer string here"); + + // Verify the offset and data is unchanged after a failed read + size_t orig_pos = buf.pos; + u32_data = 0; + UASSERT(buf.getU32NoEx(&u32_data) == false); + UASSERT(buf.pos == orig_pos); + UASSERT(u32_data == 0); + + // Now try the same for a failed string read + UASSERT(buf.getStringNoEx(&string_data) == false); + UASSERT(buf.pos == orig_pos); + UASSERT(string_data == ""); + + // Now try the same for a failed string read + UASSERT(buf.getWideStringNoEx(&widestring_data) == false); + UASSERT(buf.pos == orig_pos); + UASSERT(widestring_data == L""); + + UASSERT(buf.getU16() == 0xF00D); + + UASSERT(buf.remaining() == 0); + + // Check to make sure these each blow exceptions as they're supposed to + EXCEPTION_CHECK(SerializationError, buf.getU8()); + EXCEPTION_CHECK(SerializationError, buf.getU16()); + EXCEPTION_CHECK(SerializationError, buf.getU32()); + EXCEPTION_CHECK(SerializationError, buf.getU64()); + + EXCEPTION_CHECK(SerializationError, buf.getS8()); + EXCEPTION_CHECK(SerializationError, buf.getS16()); + EXCEPTION_CHECK(SerializationError, buf.getS32()); + EXCEPTION_CHECK(SerializationError, buf.getS64()); + + EXCEPTION_CHECK(SerializationError, buf.getF1000()); + EXCEPTION_CHECK(SerializationError, buf.getARGB8()); + + EXCEPTION_CHECK(SerializationError, buf.getV2S16()); + EXCEPTION_CHECK(SerializationError, buf.getV3S16()); + EXCEPTION_CHECK(SerializationError, buf.getV2S32()); + EXCEPTION_CHECK(SerializationError, buf.getV3S32()); + EXCEPTION_CHECK(SerializationError, buf.getV2F1000()); + EXCEPTION_CHECK(SerializationError, buf.getV3F1000()); + + EXCEPTION_CHECK(SerializationError, buf.getString()); + EXCEPTION_CHECK(SerializationError, buf.getWideString()); + EXCEPTION_CHECK(SerializationError, buf.getLongString()); + EXCEPTION_CHECK(SerializationError, + buf.getRawData(raw_data, sizeof(raw_data))); + + // See if we can skip backwards + buf.pos = 5; + UASSERT(buf.getRawDataNoEx(raw_data, 3) == true); + UASSERT(raw_data[0] == 0x66); + UASSERT(raw_data[1] == 0x77); + UASSERT(raw_data[2] == 0x88); + + UASSERT(buf.getU32() == 0x99AABBCC); + UASSERT(buf.pos == 12); + + // Now let's try it all over again using the NoEx variants + buf.pos = 0; + + UASSERT(buf.getU8NoEx(&u8_data)); + UASSERT(buf.getU16NoEx(&u16_data)); + UASSERT(buf.getU32NoEx(&u32_data)); + UASSERT(buf.getU64NoEx(&u64_data)); + + UASSERT(buf.getS8NoEx(&s8_data)); + UASSERT(buf.getS16NoEx(&s16_data)); + UASSERT(buf.getS32NoEx(&s32_data)); + UASSERT(buf.getS64NoEx(&s64_data)); + + UASSERT(buf.getF1000NoEx(&f32_data)); + UASSERT(buf.getF1000NoEx(&f32_data2)); + UASSERT(buf.getF1000NoEx(&f32_data3)); + UASSERT(buf.getF1000NoEx(&f32_data4)); + + UASSERT(buf.getStringNoEx(&string_data)); + UASSERT(buf.getV2S16NoEx(&v2s16_data)); + UASSERT(buf.getV3S16NoEx(&v3s16_data)); + UASSERT(buf.getV2S32NoEx(&v2s32_data)); + UASSERT(buf.getV3S32NoEx(&v3s32_data)); + UASSERT(buf.getV2F1000NoEx(&v2f_data)); + UASSERT(buf.getWideStringNoEx(&widestring_data)); + UASSERT(buf.getV3F1000NoEx(&v3f_data)); + UASSERT(buf.getARGB8NoEx(&scolor_data)); + + UASSERT(buf.getLongStringNoEx(&longstring_data)); + + // and make sure we got the correct data + UASSERT(u8_data == 0x11); + UASSERT(u16_data == 0x2233); + UASSERT(u32_data == 0x44556677); + UASSERT(u64_data == 0x8899AABBCCDDEEFF); + UASSERT(s8_data == -128); + UASSERT(s16_data == 30000); + UASSERT(s32_data == -6); + UASSERT(s64_data == -43); + UASSERT(f32_data == 53.534f); + UASSERT(f32_data2 == -300000.32f); + UASSERT(f32_data3 == F1000_MIN); + UASSERT(f32_data4 == F1000_MAX); + UASSERT(string_data == "foobar!"); + UASSERT(v2s16_data == v2s16(500, 500)); + UASSERT(v3s16_data == v3s16(4207, 604, -30)); + UASSERT(v2s32_data == v2s32(1920, 1080)); + UASSERT(v3s32_data == v3s32(-400, 6400054, 290549855)); + UASSERT(v2f_data == v2f(500.656f, 350.345f)); + UASSERT(widestring_data == L"\x02~woof~\x5455"); + UASSERT(v3f_data == v3f(500, 10024.2f, -192.54f)); + UASSERT(scolor_data == video::SColor(255, 128, 50, 128)); + UASSERT(longstring_data == "some longer string here"); + + UASSERT(buf.remaining() == 2); + UASSERT(buf.getRawDataNoEx(raw_data, 3) == false); + UASSERT(buf.remaining() == 2); + UASSERT(buf.getRawDataNoEx(raw_data, 2) == true); + UASSERT(raw_data[0] == 0xF0); + UASSERT(raw_data[1] == 0x0D); + UASSERT(buf.remaining() == 0); + + // Make sure no more available data causes a failure + UASSERT(!buf.getU8NoEx(&u8_data)); + UASSERT(!buf.getU16NoEx(&u16_data)); + UASSERT(!buf.getU32NoEx(&u32_data)); + UASSERT(!buf.getU64NoEx(&u64_data)); + + UASSERT(!buf.getS8NoEx(&s8_data)); + UASSERT(!buf.getS16NoEx(&s16_data)); + UASSERT(!buf.getS32NoEx(&s32_data)); + UASSERT(!buf.getS64NoEx(&s64_data)); + + UASSERT(!buf.getF1000NoEx(&f32_data)); + UASSERT(!buf.getARGB8NoEx(&scolor_data)); + + UASSERT(!buf.getV2S16NoEx(&v2s16_data)); + UASSERT(!buf.getV3S16NoEx(&v3s16_data)); + UASSERT(!buf.getV2S32NoEx(&v2s32_data)); + UASSERT(!buf.getV3S32NoEx(&v3s32_data)); + UASSERT(!buf.getV2F1000NoEx(&v2f_data)); + UASSERT(!buf.getV3F1000NoEx(&v3f_data)); + + UASSERT(!buf.getStringNoEx(&string_data)); + UASSERT(!buf.getWideStringNoEx(&widestring_data)); + UASSERT(!buf.getLongStringNoEx(&longstring_data)); + UASSERT(!buf.getRawDataNoEx(raw_data, sizeof(raw_data))); +} + + const u8 TestSerialization::test_serialized_data[12 * 13] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x80, 0x75, 0x30, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp index c0168776e..ced5fc7cf 100644 --- a/src/util/serialize.cpp +++ b/src/util/serialize.cpp @@ -28,6 +28,77 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +SerializationError eof_ser_err("Attempted read past end of data"); + +//// +//// BufReader +//// + +bool BufReader::getStringNoEx(std::string *val) +{ + u16 num_chars; + if (!getU16NoEx(&num_chars)) + return false; + + if (pos + num_chars > size) { + pos -= sizeof(num_chars); + return false; + } + + val->assign((const char *)data + pos, num_chars); + pos += num_chars; + + return true; +} + +bool BufReader::getWideStringNoEx(std::wstring *val) +{ + u16 num_chars; + if (!getU16NoEx(&num_chars)) + return false; + + if (pos + num_chars * 2 > size) { + pos -= sizeof(num_chars); + return false; + } + + for (size_t i = 0; i != num_chars; i++) { + val->push_back(readU16(data + pos)); + pos += 2; + } + + return true; +} + +bool BufReader::getLongStringNoEx(std::string *val) +{ + u32 num_chars; + if (!getU32NoEx(&num_chars)) + return false; + + if (pos + num_chars > size) { + pos -= sizeof(num_chars); + return false; + } + + val->assign((const char *)data + pos, num_chars); + pos += num_chars; + + return true; +} + +bool BufReader::getRawDataNoEx(void *val, size_t len) +{ + if (pos + len > size) + return false; + + memcpy(val, data + pos, len); + pos += len; + + return true; +} + + //// //// String //// diff --git a/src/util/serialize.h b/src/util/serialize.h index bf0d9c863..58e59df22 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -21,14 +21,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UTIL_SERIALIZE_HEADER #include "../irrlichttypes_bloated.h" +#include "../exceptions.h" // for SerializationError #include "../debug.h" // for assert + #include "config.h" #if HAVE_ENDIAN_H -#include -#include // for memcpy + #include #endif +#include // for memcpy #include #include +#include #define FIXEDPOINT_FACTOR 1000.0f @@ -405,4 +408,238 @@ bool serializeStructToString(std::string *out, bool deSerializeStringToStruct(std::string valstr, std::string format, void *out, size_t olen); +//// +//// BufReader +//// + +extern SerializationError eof_ser_err; + +#define MAKE_BUFREADER_GETNOEX_FXN(T, N, S) \ + inline bool get ## N ## NoEx(T *val) \ + { \ + if (pos + S > size) \ + return false; \ + *val = read ## N(data + pos); \ + pos += S; \ + return true; \ + } + +#define MAKE_BUFREADER_GET_FXN(T, N) \ + inline T get ## N() \ + { \ + T val; \ + if (!get ## N ## NoEx(&val)) \ + throw eof_ser_err; \ + return val; \ + } + +class BufReader { +public: + BufReader(const u8 *data_, size_t size_) : + data(data_), + size(size_), + pos(0) + { + } + + MAKE_BUFREADER_GETNOEX_FXN(u8, U8, 1); + MAKE_BUFREADER_GETNOEX_FXN(u16, U16, 2); + MAKE_BUFREADER_GETNOEX_FXN(u32, U32, 4); + MAKE_BUFREADER_GETNOEX_FXN(u64, U64, 8); + MAKE_BUFREADER_GETNOEX_FXN(s8, S8, 1); + MAKE_BUFREADER_GETNOEX_FXN(s16, S16, 2); + MAKE_BUFREADER_GETNOEX_FXN(s32, S32, 4); + MAKE_BUFREADER_GETNOEX_FXN(s64, S64, 8); + MAKE_BUFREADER_GETNOEX_FXN(f32, F1000, 4); + MAKE_BUFREADER_GETNOEX_FXN(v2s16, V2S16, 4); + MAKE_BUFREADER_GETNOEX_FXN(v3s16, V3S16, 6); + MAKE_BUFREADER_GETNOEX_FXN(v2s32, V2S32, 8); + MAKE_BUFREADER_GETNOEX_FXN(v3s32, V3S32, 12); + MAKE_BUFREADER_GETNOEX_FXN(v2f, V2F1000, 8); + MAKE_BUFREADER_GETNOEX_FXN(v3f, V3F1000, 12); + MAKE_BUFREADER_GETNOEX_FXN(video::SColor, ARGB8, 4); + + bool getStringNoEx(std::string *val); + bool getWideStringNoEx(std::wstring *val); + bool getLongStringNoEx(std::string *val); + bool getRawDataNoEx(void *data, size_t len); + + MAKE_BUFREADER_GET_FXN(u8, U8); + MAKE_BUFREADER_GET_FXN(u16, U16); + MAKE_BUFREADER_GET_FXN(u32, U32); + MAKE_BUFREADER_GET_FXN(u64, U64); + MAKE_BUFREADER_GET_FXN(s8, S8); + MAKE_BUFREADER_GET_FXN(s16, S16); + MAKE_BUFREADER_GET_FXN(s32, S32); + MAKE_BUFREADER_GET_FXN(s64, S64); + MAKE_BUFREADER_GET_FXN(f32, F1000); + MAKE_BUFREADER_GET_FXN(v2s16, V2S16); + MAKE_BUFREADER_GET_FXN(v3s16, V3S16); + MAKE_BUFREADER_GET_FXN(v2s32, V2S32); + MAKE_BUFREADER_GET_FXN(v3s32, V3S32); + MAKE_BUFREADER_GET_FXN(v2f, V2F1000); + MAKE_BUFREADER_GET_FXN(v3f, V3F1000); + MAKE_BUFREADER_GET_FXN(video::SColor, ARGB8); + MAKE_BUFREADER_GET_FXN(std::string, String); + MAKE_BUFREADER_GET_FXN(std::wstring, WideString); + MAKE_BUFREADER_GET_FXN(std::string, LongString); + + inline void getRawData(void *val, size_t len) + { + if (!getRawDataNoEx(val, len)) + throw eof_ser_err; + } + + inline size_t remaining() + { + assert(pos <= size); + return size - pos; + } + + const u8 *data; + size_t size; + size_t pos; +}; + +#undef MAKE_BUFREADER_GET_FXN +#undef MAKE_BUFREADER_GETNOEX_FXN + + +//// +//// Vector-based write routines +//// + +inline void putU8(std::vector *dest, u8 val) +{ + dest->push_back((val >> 0) & 0xFF); +} + +inline void putU16(std::vector *dest, u16 val) +{ + dest->push_back((val >> 8) & 0xFF); + dest->push_back((val >> 0) & 0xFF); +} + +inline void putU32(std::vector *dest, u32 val) +{ + dest->push_back((val >> 24) & 0xFF); + dest->push_back((val >> 16) & 0xFF); + dest->push_back((val >> 8) & 0xFF); + dest->push_back((val >> 0) & 0xFF); +} + +inline void putU64(std::vector *dest, u64 val) +{ + dest->push_back((val >> 56) & 0xFF); + dest->push_back((val >> 48) & 0xFF); + dest->push_back((val >> 40) & 0xFF); + dest->push_back((val >> 32) & 0xFF); + dest->push_back((val >> 24) & 0xFF); + dest->push_back((val >> 16) & 0xFF); + dest->push_back((val >> 8) & 0xFF); + dest->push_back((val >> 0) & 0xFF); +} + +inline void putS8(std::vector *dest, s8 val) +{ + putU8(dest, val); +} + +inline void putS16(std::vector *dest, s16 val) +{ + putU16(dest, val); +} + +inline void putS32(std::vector *dest, s32 val) +{ + putU32(dest, val); +} + +inline void putS64(std::vector *dest, s64 val) +{ + putU64(dest, val); +} + +inline void putF1000(std::vector *dest, f32 val) +{ + putS32(dest, val * FIXEDPOINT_FACTOR); +} + +inline void putV2S16(std::vector *dest, v2s16 val) +{ + putS16(dest, val.X); + putS16(dest, val.Y); +} + +inline void putV3S16(std::vector *dest, v3s16 val) +{ + putS16(dest, val.X); + putS16(dest, val.Y); + putS16(dest, val.Z); +} + +inline void putV2S32(std::vector *dest, v2s32 val) +{ + putS32(dest, val.X); + putS32(dest, val.Y); +} + +inline void putV3S32(std::vector *dest, v3s32 val) +{ + putS32(dest, val.X); + putS32(dest, val.Y); + putS32(dest, val.Z); +} + +inline void putV2F1000(std::vector *dest, v2f val) +{ + putF1000(dest, val.X); + putF1000(dest, val.Y); +} + +inline void putV3F1000(std::vector *dest, v3f val) +{ + putF1000(dest, val.X); + putF1000(dest, val.Y); + putF1000(dest, val.Z); +} + +inline void putARGB8(std::vector *dest, video::SColor val) +{ + putU32(dest, val.color); +} + +inline void putString(std::vector *dest, const std::string &val) +{ + if (val.size() > STRING_MAX_LEN) + throw SerializationError("String too long"); + + putU16(dest, val.size()); + dest->insert(dest->end(), val.begin(), val.end()); +} + +inline void putWideString(std::vector *dest, const std::wstring &val) +{ + if (val.size() > WIDE_STRING_MAX_LEN) + throw SerializationError("String too long"); + + putU16(dest, val.size()); + for (size_t i = 0; i != val.size(); i++) + putU16(dest, val[i]); +} + +inline void putLongString(std::vector *dest, const std::string &val) +{ + if (val.size() > LONG_STRING_MAX_LEN) + throw SerializationError("String too long"); + + putU32(dest, val.size()); + dest->insert(dest->end(), val.begin(), val.end()); +} + +inline void putRawData(std::vector *dest, const void *src, size_t len) +{ + dest->insert(dest->end(), (u8 *)src, (u8 *)src + len); +} + #endif From 5d88501a5799dbee8623ce9920423948659368fa Mon Sep 17 00:00:00 2001 From: Maksim Gamarnik Date: Thu, 15 Oct 2015 01:45:59 -0400 Subject: [PATCH 477/670] Compress textures and fonts Used PNGOUT, OptiPNG and DeflOpt. Removes ~350 KB without any loss in quality. --- fonts/lucida_sans_100.png | Bin 12245 -> 12012 bytes fonts/lucida_sans_110.png | Bin 15193 -> 14739 bytes fonts/lucida_sans_120.png | Bin 16596 -> 16295 bytes fonts/lucida_sans_140.png | Bin 47080 -> 42429 bytes fonts/lucida_sans_160.png | Bin 53771 -> 48106 bytes fonts/lucida_sans_180.png | Bin 63899 -> 56766 bytes fonts/lucida_sans_200.png | Bin 76914 -> 69059 bytes fonts/lucida_sans_220.png | Bin 82941 -> 74427 bytes fonts/lucida_sans_240.png | Bin 94928 -> 83532 bytes fonts/lucida_sans_260.png | Bin 105072 -> 93958 bytes fonts/lucida_sans_280.png | Bin 114619 -> 101952 bytes fonts/lucida_sans_360.png | Bin 162310 -> 143453 bytes fonts/lucida_sans_40.png | Bin 8487 -> 7642 bytes fonts/lucida_sans_480.png | Bin 231593 -> 205578 bytes fonts/lucida_sans_560.png | Bin 278999 -> 246505 bytes fonts/lucida_sans_60.png | Bin 15405 -> 13992 bytes fonts/lucida_sans_80.png | Bin 10040 -> 9740 bytes fonts/lucida_sans_90.png | Bin 10974 -> 10704 bytes fonts/mono_dejavu_sans_100.png | Bin 61308 -> 56121 bytes fonts/mono_dejavu_sans_110.png | Bin 74668 -> 67613 bytes fonts/mono_dejavu_sans_120.png | Bin 80486 -> 73938 bytes fonts/mono_dejavu_sans_140.png | Bin 98222 -> 89073 bytes fonts/mono_dejavu_sans_160.png | Bin 111526 -> 101939 bytes fonts/mono_dejavu_sans_180.png | Bin 134816 -> 122274 bytes fonts/mono_dejavu_sans_200.png | Bin 152413 -> 138662 bytes fonts/mono_dejavu_sans_220.png | Bin 168185 -> 152844 bytes fonts/mono_dejavu_sans_240.png | Bin 187484 -> 170247 bytes fonts/mono_dejavu_sans_260.png | Bin 210322 -> 190156 bytes fonts/mono_dejavu_sans_280.png | Bin 223051 -> 200848 bytes fonts/mono_dejavu_sans_40.png | Bin 17182 -> 15668 bytes fonts/mono_dejavu_sans_60.png | Bin 31749 -> 29291 bytes fonts/mono_dejavu_sans_80.png | Bin 49875 -> 45552 bytes fonts/mono_dejavu_sans_90.png | Bin 55338 -> 50995 bytes textures/base/pack/camera_btn.png | Bin 789 -> 729 bytes textures/base/pack/chat_btn.png | Bin 777 -> 399 bytes textures/base/pack/debug_btn.png | Bin 960 -> 895 bytes textures/base/pack/dirt_bg.png | Bin 1586 -> 82 bytes textures/base/pack/down.png | Bin 1917 -> 1328 bytes textures/base/pack/down_arrow.png | Bin 843 -> 373 bytes textures/base/pack/drop_btn.png | Bin 561 -> 539 bytes textures/base/pack/fast_btn.png | Bin 935 -> 875 bytes textures/base/pack/fly_btn.png | Bin 783 -> 720 bytes textures/base/pack/halo.png | Bin 194 -> 83 bytes textures/base/pack/inventory_btn.png | Bin 733 -> 343 bytes textures/base/pack/jump_btn.png | Bin 621 -> 434 bytes textures/base/pack/left_arrow.png | Bin 742 -> 400 bytes textures/base/pack/logo.png | Bin 12190 -> 12188 bytes textures/base/pack/menu_header.png | Bin 133115 -> 127202 bytes textures/base/pack/minimap_mask_round.png | Bin 4081 -> 1858 bytes textures/base/pack/minimap_mask_square.png | Bin 1951 -> 420 bytes textures/base/pack/minimap_overlay_round.png | Bin 20630 -> 13105 bytes textures/base/pack/minimap_overlay_square.png | Bin 2889 -> 1686 bytes textures/base/pack/no_screenshot.png | Bin 476 -> 140 bytes textures/base/pack/noclip_btn.png | Bin 1151 -> 1087 bytes textures/base/pack/player_marker.png | Bin 3885 -> 2178 bytes textures/base/pack/rangeview_btn.png | Bin 1604 -> 1476 bytes textures/base/pack/right_arrow.png | Bin 770 -> 396 bytes textures/base/pack/server_flags_damage.png | Bin 774 -> 713 bytes textures/base/pack/server_flags_pvp.png | Bin 1056 -> 1048 bytes textures/base/pack/smoke_puff.png | Bin 1334 -> 1233 bytes textures/base/pack/sunrisebg.png | Bin 4587 -> 4231 bytes textures/base/pack/unknown_item.png | Bin 294 -> 292 bytes textures/base/pack/up_arrow.png | Bin 704 -> 373 bytes 63 files changed, 0 insertions(+), 0 deletions(-) diff --git a/fonts/lucida_sans_100.png b/fonts/lucida_sans_100.png index 1c9ca6590971d4fcd094826477a38ed95cb8df0b..9f3dc25c894386bf16043cbbd76dd5ea7de2da72 100755 GIT binary patch literal 12012 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

c9s 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 diff --git a/fonts/lucida_sans_110.png b/fonts/lucida_sans_110.png index 77625492c59794242fffa5298e39aa7ebd1a3b49..1c98efcca0aabd44bdc212fce51833a2796e8f45 100755 GIT binary patch literal 14739 zcmZ{rWm}Zr*M{$VW|*P7TS~e+WI$TFkrb3hIz)saML-a_d8u}RRUaETmS$F)YX*q0RZ-22mwIof5HKcyZ%q$x|)W{ z|LOhxebJBnrT-$(M_=0jK>nJy2LLGt~5E{F)$%D5)!A&ynimTx~!f&c|oMAS#U%c#U|-z*kLPnaT! zC>MRrHBYv!%cGoC)Xr3q53GAH#oj5FCFW7C-P1^@_{Iy%!5}kzF-`p^$9t{(p-^N! zC?bq31|=5p+7e2#J90Lxfq2BK&KljsRvhnJE+jp(U!eCz+I$uT4e-rNaVMHgyo5$6 zhgkB~ho9R6)elM?)lD0qqMTq3U zP>c``YF-`byuOY}U!Xm+-R~jdZEeI2qhm;_FNqjn^1?J>cAuZ-D>4S=4$*kx z+IXPs?9Lq>aVLJxmOMAlz(#*wLw#pkRd3j_qhwx*f7gC{W$z|~a1D)o>m&OC*FuON zi^!5IKUtzw$zAKS)hJu&NJnxM46<<<>S>iGBcSc3hMa^2M6_g2jeXwJ~& z3e(7>$C)^y#*H_(w0PsKjv;##bL=b1#0V24jH?S3Cb^~wjSrZ>=s3NAe;3suPYky9rw$fXhiJoSO2<4 zsM;o@8aj_lS3}$&b%}@&N!U^m%5Pbhe z0}Y8D(bZEnfk7f6Et%fuk0#N5a+PIHCbnhGOAdT690hH3#77t`t zAYt{B=x|}nZ<Yan221@oOsyAi+pozT*Q~{P4JhCkAAgdq+~66Zk3CEBP!B3|jE}rsD;rIf0xr`CBxUhdE5S#r*x{uk5bU9# zl4rzqV5b?*oiFheKU|cUUsu7&+Fn9anc!FeR$AY5kyTAw$J0k51Trd5*d!A~e>;Nd zO3N8%(57qu){XFE2|Ic4hq)l}MgO9r=Li`0!;L+PIhvWfVCfrn)++iS zJ5b?R$G0GECa}IuX(xWH@foGfGC9`v=VNSQV&Q{lr9kbMNr02|bU-?!+3BdQ3AeR+ z)767(CQvUt&|B|>Gm`q37HX!&x#6oSjzEuMaR3M;?m!f<(5M_70$RQKeFKYYBX(kA zh~4_Qy#9$(XZLSkw)hjHfd6YjhhyK?L7SC{m0Z- zUs7u1hZl)`NT7bN`U)vyyj?y(3sN8cmGjCQK>7cDiZaQs2jjFMt!^0Fw*-!EG2Oq3 zxAD7;O<@oy0ktkOlKKHJIvNF-TZh?l;6(7^tmsoiR5Vc@7)X2C7D^Y^ppKa`5s9Rp zibMTrcm@_GTk!-jFw8igNi!AsJ~H`YT1L8J9RBT_&&BKni%^dr*I8CV3vR&!8l~34 zMPilSI#a)`$l;pMmZ{@Ev}*;Y?Z*;d&naX$*s;lrU=meN)=j?6S1X!bo5 zyIC-(23MYq9odjhw3B8%ga@pYs9Va%s%2a_vSWZ`!Hk6yHY98fX#V#UzJix~6 zH47o$Rhp0YuRm)4GxnJa<*?qzg|xFAcM5cYqk17f{4LyXRNj1g#!9JVFF^M9xw=^v z$Z6Qmi~Jp`?5nyBVeGPj7EHY>rP1eb`SnZ%KAQztrp7O6i=`r7o~?kyBwuB*UkM;P zpME9)5#Q~*vnDo0e>XaSPC+`zb~v(3?MjomT1bWKK}I3Ax)#)fH<3q=RgB7pS`5`C z?8{&p?uOdbd|IU9NPwmgkqscx@FV$vyf1o^u3=@I1H+#@4{B#`$QtlusUA0lygXK! z+jl!TH4m*`0(FPCxPa_d(!Boj)Z>N?t=DyvzQdjN{cCazc6N3_WYrBT*L0W77mF?4 z>|G_@9_Tj>$q{MF?7n;?g+ku^!n}K4|ugMH@w_j z`n^!~j1cKDjuzCBJbu3N>!L?CsaA%G1SKSEcS5eLi46j8_K+9w%M}3>1Tw+$9FDg7 z&HPdVkiCAgSmKmVgsQQDDt^2I9@C;sL*-TtqRI_WFK7ckF1Zp#cpu+CZ@xPMY^VRF z>fLZ*KAAQNB*K}=fz>~=D*`oLCqI{P8!vLZ9zW=UVQ7^;;#%Dt8-H7e;5*eU9N@w) z-#EgmmmENtmgp4q!-(YyW7c}`>ynIYp#R5ul`V8j&=>&^2at&>PVBIRX_oU)BqzyN#r(BX8nY<=V=tx>@ZyPa?@QcFEKu^G2J>r_@>2 z2NI_qQ@%&M>`{ty&Q(2y(e{5p7%ausoJDQ^AYYCM%f5S$~DXnc6gv z?!w948kL!T8Y+PghAME*Nq(pw4vq3OHkVwEtRf=1QpJG2 zrd{`MX|N^<$z%P-6=s>#bIxHX0ixPAkAxng)7W3k^KGVer}Zv z#iL)BPTu{BZ4eINL(CZ@+EzsrHw&BE8Bo(cV+hMa86!y`)Wo`c?hqJ-Gmu2unS`T8 z(vY%q@&kAZ-89&I2$;mnx11HN{$b+TAaq0aF(_}vvQGL8QS(MLEGe3eJm=}-cH$jW z@1&;P_2H$&mtCnVOMMxywy`OG=-QX_6>p0! zAG98HnEl`yW*b(crV6=AdkSH#54R@%lD)1#F0P0{c!a`&y-)Swo@^GWzYRH-?tqaLI>%g+K-G$AuRYqvA9 z)M3JTBjSU#D$lGlpi^FzPUBO@!3EXJfoBXtnMCA6db>A|NJfEPDYVXVknH_+Qwfln z*Yu(iVJLL;Vn6j6p5SZjfxbl@oHapb($bfH)b3e89%x4R@tr|V-E zVQ$DzKEj*XnV>WlbuN4}5sTPR>0R2$2m^%hlJW#QW(h|xH^bkt7_c(r%|J;a3cq4+ zpQWl0Ag|a6lVkw7)BcSsyia9F{!9sLN#+=XLf%c{2XPeJApS+K6l$0^jDXmXkn`7b zGbLqjN(nWfjf^)r_V0EHgE})tv}*GV}_4ckQ4^Gc6eKolH(id0>ojN zx#$HcDj;*vk_^z;42Pk_5yVYt)dk{Y%;%b7#s&H<^^ap0D()={I-dQ)tr&$J6A#bU zUEdp-rk-{y1yTY|ERTOa&xdvY01{Y+Ml`tUPj9=Gf+&%OFfBtg1m3GVvafe#78<78 zC}Y@NNzb$bzZ6J%ayJfW2Kbzg%8GsYc1;Fbow~evil({9a!3APzH@it{;Abxm$m<@3FI#E+lfiYBb^X5=rMo{r8kIG7bB`^ENoyw!|Y0ZG*tAY zc2hyRG+ND0$&j`K@T6MiwM7?c)TQXf2X?oUXETrkQ7wR?jTH*OkD+(PWZ+=ffhZ~F zhB`~|Eu8il3uUoz4KfrGBD6*BF$Oz!yNpUjpt_X1WYO5rxztdXtjUa^D2eJM7y%jQ$E4%*cK~K znIgeD*sU5)k51v)RYzX=B&9iuN)vGM?bt@9Mbg+}D5CC3+*G*IJ~Y0MXR$m;F*oqi z9{5}6_bAg)uE-LR(eK!(S*`TvxnRgvj5eZESo4NR#eZ8>W%i>yT@e?k+V>BUHY*;KSF1>}=hiV&P3x zXI)ehf+tJuWJZ<#J#R z$dX6kxQe=d4Pc{;p((`xyF%@Z0T4<`QVfQ9Ay7~0I*LXhDBbm}OUs*Lq5UhnNOwce zgKUUs_=k))?pmdBVvu!U-|=g3JZdSXbRHG5_F#E-1%c5z5*K_YHM(wzvwHyzpg)9{ z$~n51`~D%CYZ}b)oQ@kwi|YQ$r~2AD$Zgue zmS{QQ$MnbXnLzt*r@xr$FdJPAe%IMsXH*!==A+f?@u8bLPKY28rkmguYFGsP4!?AO z+Q3oIiZfAb=@M^#@enQRK=WgymNQ{^;e92d?!%|}h+e-S1<#L6dE}1_N=3$(WdxA2 zc)$_S@$ZxR@!)^m#yLSLcnTyGqD)_gt5h<|=M;!jc1cq`K* z=T1;o*!fIH)sCFRE?g~5%ayvzI9F0w^yFt6mA2&t4-i=Y$py<4V_<-i7aYM~yh%c2 z!E@}=?cxsEvGwF=CBV=8dg`u98IQ80dkV1W_K6A4E4{6qbeX^{_i|U>2ELSr(Ou#pX&48rmC|T^rjN|V4=2)-lo{|xWYGHxkHlZ5fB@efpyGu z;FS$|4xuzW0*_Sy>`bhk8ej^BknQkw`LFY1Atl*Ay3Co4u%JYyrdOnjr$Uu7=mc(? zJx634E~o}E9}=wTKHbrvB=_<4JhQSPfcFlUy5i%yo4TC5?F$@v(~wyU>bnRlmeU>pTu}3$l!Fbn+J9DiEeS zetQ9n7Q{+41k`jP*(ABAQmYBvjoDAK73zlxvt@*~U(3Hf>A8Kt#zED2Ac8$42RKjw z(samWd1Pr@X9kpUB&Zqqie--Bph|inWuRB47}O8t9G&?Dem6%25a@~-lyv80JS9;4 z1D$B~d)w7w)ph$_K6sou*zX_JZ@ZwsI!zdP?_25Ow+UyR@~DC3aj2P0n6Y2G*geRltf-!;tl;l$tM+StCOI#eV4ofuqjGWBw`PL>RE*S& z>h%jp$Mw|WilgU={v=!!7gBCWJV9cL1Qw507e-VD_X~r(g0g_^R=j8&$36P0e{bIm4N58NoR0*%VBQ$-Klnsj( z!<-&Y70_Y?AmrHVswRvjhV=l;yN?o*HWgt)I&o-OY98flb)*#cob_a8@R!ZAB%5VP zvdP$9D#i+NQA-9s%OhID+LR;C`Y*!!#PQ+*{#tP!NEs(#cp$Etk^$i7M+*pIIZA+B zU#1`yo(*^51Oqr4vZ>$sy^&jQeU#EWof=eda4f~f^ySn?-daA@=;hkb{4v4aSh+7W zM;(caL#uA&gWUn++u<<~9f_TW$2n4>Euh$JziGFDesGWRi*Vdm_pW~&hz5GD4Shp$ z@*(iG6#DW-@&4q^a78kf2L1*Faaqd$I^{$3^cEinTHqUq;dG3!8(KG)Sfo#sptaO9 ziKJS)`a@RbtMR(*<^3z8l=5UC%!44&c2M>gP4fttJ&G^NLWk7Ebjr~aPt9?3xkI=Y z&cvS6*1W+*YeAW(kcqL>Mb_A<4Wrqg_)-ZbXLkv4xg9{GGrDa)*%8&mfRjcpg#A30TBZ$T}b; zmE{k(h(m^^NrA?RxD7)|m6K8&H4lsy1j*Rp7=idaaG z8Lh@Q(r73f01qY0?h6VC=JwlSuO-Vau1=xL-Bq!NHAKo4uW2LlTzy@Vc^J$6d@2P9 zIXN&!KXN;sfdfW!JdV`MG{r*sKcj6GUa-`9he+KXQhR{6`k?@l6-b=;-S`-sd>Pa5 zIpA;TRe<Ev})BJBg`MzBq^<>hSC_>3m5L6Z=LOVk({4MQ6 z7{cyN_)3G0fs=4e-LpJEcE2G2zPdbW^>Q$?D9@t#nEa(-_Y+u4!~SRxdzA!MgQ7zVvfI#o!m%7G{uUfA*t0v z%rB#gw7~BGBE_+FRLhBD+6{`0BR#wAD~%Q1MTPNZbCLh)XVid;xLiV#V8OFlYv{j# zTFq7!8W>OtLmu(+_*wy4%q)S~>;0+2yHAi)2XLVqO1%7V0gw>szkjk#80taS_D>we zL=TIEl0T?cE&<wHrO$KG6U0B0MN?QDhbmquHI{l1~- zQ>~0imR)mdfe4!B%5=nVMw+_W(4kce%;2{gzMjgi)j8_4pxNu@r|R+PCx^N9b{yU8 zLRV1@rHLK=#h}0V5h4zEckeV-7X&(n!58RdF68Av_g>q~b1{mzcfwcv(*B1KM8^0S z@k=iEYA`WLc&z9hfn>8M&daY=8ayvH{&GnB&%$I3H0#&3?)ama^5@m%*zbn7047X@E{c$2M!v{EXHJPKX<0baL z>6;Ai2I_NcXGeu+Zr3!d7?`@)BbUjhrIm8x@l&%Uh;i6i;Goe3gf)9FbM=p?l~ zGVvMZNnC@$CvV2-=ZC@9o8R|({Ud*WX>_^CBC;^uc<_tZ1Jg~5p+~6I`o`uN7j?yF z)&rn}5uq0Jl6MtF{UI{h@p&(G4lLUFRR#Yn@R$4QM7lT^C@rtWQ$EL_2-dScv35 zQhKqiw0+=lxq3ViEEX6P&?|ASoubpz-C1cN(6Kp$Q)RyV&UL#H#|p{--9t(pTw6)) zBu9n&Yy^Bt*hbrce+edg&Q9McKGh%o;2gA@Ov&6;VnttWNau=a?>@ZDq)qGwFNCA>o`Oo5LW&a#=9sD~l6ttKVM(KY0Ri!3u?PL_el(dT3jHkzR*)H^ggDgE)I z@UJ-z*fo3kBcf|Rm_PBe z3#5%U&xZ4k$kDyiv#03Lg?+;nVX>I9XJm!MpRe3L$9k&JD~2jW(%Fa!eV4%lb`F7W zIve$alHZ>d`D^@O+J zJoE7NOW(PZ^kMgO8lqbcF?~t$fer>HA*wuf*z2%6Z`R31^Spqnm!mEn{}#qvt#)(Z zrucNn=#B2(2tFb3o!@cDRc$=17s|pxxw-)+Dj|Nc4A!`V7R3CTx$^aOMxf)J z_~m_&V=}yO8TNa~`gRiiHBHxT#xZ&0Y+s=LwFgu#@zt;4kduJ0gAbJKrb_)=>L|^h znwZlKXM*F0-|i2|`V-QM@<+x%-K$a~&jz^1%WDJ;AY8GYwERnl3)xPuE1kD;^Qn{j zk5S|CPW*`Oea-gl7A^WsdV_8~_=3>X9UP-g=cYd{APCr;U*YRGW*t9&C_+Q%@n-F( zQD@E^fCXIi91wlu5eMq^c>vk^J;Q>3wP(1Z8NmB^xnqYnue>uAn~V0(I?3{a(9*e} zKGc!=2|e?4eT3tnEaOM%PZ%(y{_oe2Kd$#1abC}~;o2a^{p@bGVnIT&<}O&|MMk7XVmkTtO%cZU9X3k$LUV}?>GATXZCb&$j<9&?wvrQzgb zSyW_x*{%ZFglD}U!w!waqdRXG?6J^oWBXgbn!=jZc?=(ciS!|XhwSGsf%4nAm07!+uhSOt`99xO5lN)XRy#uy;o*TZFS?;8HRc|_}NWRvIdQ}IIn z$&>Sa$9oDny0bYTL1*?%fFi!P;~o!I?U+jZ;n%(Otc_z+bxOnx*SiM+u@S{pEF?Ek8feUs2GzB}`k%T_W<{ zo0j=j$=V@(e9i-|YT7LM1@S0_!M{@eIk;1j%P<^*k46b&U7p5d0t#2{+%c;qd|V33 zCuyi_np4-83b)gik_GaY@|@ULw_ofM-WhpL?wX?OO;bM7(621#?#j>KHR<2+A|$6n zj&yfjnBq5JPX^IYJ+W^ydVeBftar88jDMh>{`nV9aoqLj5f<@ULJdxIHn7s`$lO(^ z-8!!PM%$kS;YLq9!1L{?#VRY^w68u#i%f9y@JXuOXsE-V5cVx!x*Cj*&donlF4tg1 zVw+rZ@4xA5wVu*?2n6X6C9x=>Y3UVdA~5fJa1);}23W8Z>|6yu9v(}-(I6@dy@d{& zA0a4xuCqyW_w=j;{xZ7I5Mp_Hy1xH=da@)#>HhQ&6RE2E8N(`Sy(=?d;i^skShUvd za4TFlx~M)ZHjrNu;=Gf?dT7C`;+I)emH{Zoc_99t;s^Qs8-7e6LDU4j)$SpJ2sED$ z=6)*MB*_bXQXSNIMfV@Yag`Ge4b!mPny6h#oSxL8HD@KTx}J*fGhhA>R0$iB`1J24 z#AHY+MTZj_6iGrSK>3fG) z%juaFR`Acu}bU-F&3}YQ~ z_NRJZwf}0a*Q{%07eB$gD1ZL@&ClzP6X{i49UGrQE2H0kcC|_{rnQQ@zBG*q1sWNtfdg18Gwi-B!2a;(_#`SY$!gQ zwY6dK09$H*Z*Q?<3Fk(7RTG;$MIAG_g~w>BK)zEn(@90oC}j)Dh>zV%Q-WV@(B)Pz z%27=^2K?z)nydXxg~Q?yQfIv9KR6Mzl90MG)|hvGm+CVBkCWpMw)bVuf7$moO5McA zgq+^1^w#d%zp<^@{o8R#DdYs^K-Xd=d@%Zc&Nhh65G$a4ExKa!ng$Ww6e!A|(|p<% z*c&4tLo47WTdiv%p8fA6QAq#D=ZbcHicc@9zmL60edMoC*V#G+d`gRe(8s<@(y**> zt{^*eDDS$Tcri`==HCA3_ER?ZwCvqt_QIwc?N14I5%{~mZk&k)JY3B=sL16M0BimS zs$S%^pF=`Y9lpbhZ(-YY9pS0WO?076Q2^(rt6=u^W#&VFIpn3L6WukkZJh0 zBq>_s1^rVcH#Vok_M;AU&5-$`?~gBX)^J`O9gJTjAKkpkYj3|$9j|a6}LjSH}j8LUi#TfQ_Mz;iTyMYZG0P~(Yt-~0WqP80$_GSjVI&vH!=fV}Em3+M5d z`a`PV@k7$4ujn`tl&BFXJT<2;;7H4e(rEnLtQKA)GWmNt`Sw zk>u%7zaKBMC+BV&O%v6iu-BBOK~LbIni(*Ar$o4F*w`;dGAsQSi^(wQfzpmpx7yV&8ueKbZu7_`e*&z*7LFE1WNd&$ z6v}d43_`~{*e&=r3}uiw6FP4;a$fxy=|HSh5Qb*a*difM^hQBNli+QfWFo5h!(gu> zZw=#PUuN8S^?x6PkQ!|5*Vd8RX2M}FP!O0w%bu-r$?>D*+-w&mjZ6g`!#AVg;?sxH z9>J8zhuBPBmZ5vVsIi`KDIY%4WR=U;q(+BNug&kg!naVrO3_}PU!imY=RHi0qN^C} z)n^wGOgJ+M>w!xwyNyzO{u>(Pal_#O$V4M)kkq|xr|)H=iIPZZzt%Cm4vFURED|e* z(&zDhcfyUJMkN*jSb}}u@!l2ud1A+|{7$jLrt$MvW;A=6h7xBqOQ^@qdBKGkYT>$* zv;WMvv;iP=0-~Y1x&rR9MSf-JGuLbjKBETX=k*~>0=i_9ST>Z-AT_45ddB$7hh-tc zvHW>8YXNVEQm^9c+%_jIWed5$oko**?SCtl?%&G}^1u4!ye?;>qN$zv)z{ePe2j1Y zY6kH5@5Ohu*ne(`o#rtO7Vw(=cJ9c;wgBpJ!ZjBf_8W$AaC{KZ0=cn8%{Ms%`_!n> z?Tafx>{q7EmImlVj2|4ONRKjgYwT@f;*RAcJo5%16mmlFMAhv-5W!|bwZ(|o+PC^I zDaxdhv2@DDofvoYqJJjI!3tufdtS97C})9RKf)RwOn@9Qy>uU44s`7Yw*cX2UA*vm z=GSJjsyjNGhEfk1|I0&Lh{C%KZkQr zN$;>0DueR@`kfG59ZbB0BL_hmyK=IZ249K+=3!{q@A5vey=?6$6 z80WbDrBlGRo0EVtcX`fpE9Y8A?q4}va2BaJ+q<(+K+pCeZ~G%C@`$9fje1S;ISw^> zVm}}_%lY>H$dhN{SDuX21+-dscpbCmgj2^+uSXoDtU6uficdpsS+rN{s9=PaA^ebW%$&6GI zS>!v-XO7J#bw+rMC2&46jSswSwU0o{EI<&6l&2UO^-GoCev|&7hj2bey2KokNFyYK zr^JJsVkrHF&)2r4eUlETUL9{=3}SVk9J+CJ0eQ*1Ih<_OOa(+nZPMC1jELL~n(3f(u|k;?LCf9pDjU-Kz`Ubo?tvJou=7^guPHn0D6L8E>VeAU#HxI(JL(T-!l zs#6TlcG75fv)~uMj#7@}>u=JlFXcwfM_Jw*|C^Diiwkpj{b1!2kFJ|Z(ENlUU86aS zw(-A_{Zt7XT9EybiaXsG#T(jWcf=8ecFj794Jfjs#f&(=p8hz4`&_w-IqdJ4EWpX1 zeQ_`RKf^Q4Orx(&}-l&%Ljk#AhUYdRS_`t)QK$gB)%K%lD z@S+NNvS*e8@_I?pDP-v`NWb>{OkXtvJ|z-oe5EPzk)zpjSwyjgcQhM4R^R9Ewg(7X~6X83|XZf;AsA9vB9QZQcQNQcpS}1`1wd##e7tSmFn$lR8GEc zGh@sCVxK)SDrh^4-Iomy?c*zea^2H`-7lPvv8|MUWvc8&H8Q3@a*-j-8~}DguZSJ* zdI~HM5-=9=nZ7Q12||rIJ0~jv!hS$if1W#41li_Ee>06XaJjb z^+vg&JtTF~PZm2kGuxW`9#FYO0FrQ`3k2qgj}tNd62+Adn3?S#ZTe!~AIOvD8Mluz z$#?YDCVNPn-b6b*G$yBk5Oj%Fj}Ot4TW0 zqXv<%Sl$ivhe~Oy>f=6Pwo6)WhFA%<{dHz$5bU+1I9OPJXY*QBR>9ojRVCX+Z?ccW z8__Q{NEg5UAKR@8hWong4I`qllAF$KEbJ(Ka>K-iBjn-UAC@rbq@P|eni^)c;!d8} zSWOL)`(t&s#}RcMONJp8uz^~d?mCrQG3ta^I?Mnt0`S>T?vDSMiJkHLyz5HN%EwQf zlmTIW2DiZpz=#x?AW(t;g!Sta`&h!#Gp+=5AcQ?ndJvLKnJ&lRDBc?SPg-JR%RtNl z^RnBAmTK7++*nu-B!0}Y9|ns42f{1}W-cwc_H6DZ_3YF2&3**L;&&%nin$0-9u%80 zzq>jubMQoiF7r=p@gL>uWG!C2?UTQG-}d7rNfzX1<2hZrbi2RLc1Ja68W(-WSKHb1 zbUF)k^vyJR`&47a&44DQSq7_y{fDr~5v?B4R$tk(kT+JA|MKbrb%9Jr^Wrz>TJ zR>$4Jmo$CY*@N^x_=7dTW6AQZX2E!M0`` z1I8UC5QqbiQtfNoi~0qJq27;W(L|w@U$**`hGcCF>FH!(kwXz@d|j4qim&=xMp#Ej zpvF#45c5pL^7`Y%Q{im_ixyxXDXAAjCDkKe<~bF!_`X=)F2mO* zd9~lpGUVokT8+JnexZ;7aA?`ccay6*gd!oYI?B3evAp$TvFLsnnxKH}}Jw=hQ?kvTa z3whX2&Ivi*kb_$A-s0RWUKaNF!xzmqPt@58ka49w>l5>TTgIRy0b~6KTR;flp=?yd+(|1!|{u?=}Z0?>BmP2h&A*M#n3qRWn>&n-V4rRklD`plp%FE?jQ~V_%nYa3DhwArr z*RK(|cNgtT!~Z_o8vf?Np*ZBAih$B!!8vt=_3@2uhT;ykCFatneDxTZE1|N#?pMow zk3MJ_Q4#s1x>UH3QxNd$GCs=||)av>%*fu_x{t3!#;lOAg}) z*MoKM*Q&N1G}~@>NVa9+f=3^vO8DCwH|lqEM{PGcCp(tD4`^MwO3?c250qz~a9DLk_hbSu42Tv%r zi?2@FH$0@Ht&%XYv=snnjYeW{R~}#zW(2|;nDbDpKLjFe5<5?Cg0JrCCuOS3)B&+F z4&^M(#-CZ0FzOLnAfLX>E~udi0eWr5yd2Q$cHcudCS*mT@#|Zafp~ON*ld=wEU_{Q zDf}1Viv@oo%~@p<8vg1;N&EQDN@2_PIr(a}v^nB{A4bi#dYAZ(F!2O6LjTYc>iD2o z7ELFxfb-IBZy?_{2Y^Hwev61FLZ$s9M-81`0=np|e=jupiI6aqEoKA33?d&e6MFEx z#A*tKDe8{GvCF%I&s?qBkKVhuxgq?FO8+^_GmxROHWTQ8Xz=#OzMI=y6+C1=gxC}OzbnP26pPI@zJ)^lPuWeIpYVhf2;VSP;%n_ zU#Gj0Sl))5&$8}K5+uCatH^h|;ymg7QLPmEj(4*hpQ50?dBbXI(Nb zpbAs<*#FU`!Ux98Njh8L{JE!r?~#rsNl@@Ys%|6KwNt_MxwR!}i|PA4Ju2w@O2^ix z`LFfXx&LrcELvaqG`@a+^SyD)8#ueW*XuI8kwO;VBvD9S{fx491WXDe9kaFEUhTNg zC^L|>m+n;L$irTren^sFyfxGS1yh}dD=%$O0iyP+!1e<%8Pd8frse;xJt6(XTbo&_ z2I2$Ra;};wqy;k^SJvXV$Ov_v^UHY zJ_;4X2VkR6#=}sNwFbl&HrBUHF(O3Ip_=c%6=39aC1f!JW*$3@Ax|6>5(kKVcfAQ{ z(EVwHkdVd>h4C<@#*U4cG%VnD7p5CbtHVib1K7fmN5L>6{LfIm)j|C4xgaJ@lYzPC zI|!U_0;ksf$>iA8P*wncEUdPZ>R5Upp9I&;5L?(&4)=DQDHG8t zf=XI9UW^$f4%bYfYFyR?lIx6!X)*BxQ4B1)A|J|!&;QFQeF$R?`)2pkZx%Kb#D+Dr zqXn+cq>x5@cDAa}UH$3&vpB2N3rCA6<)BRpX#5-jYTnP(f7Iw+%6txBX*{tzwA|aM zUZ%&{GmqV(ML@A-B2gxMt)<3F*>re^W&E++5?D5Lh?*qXv(c+CStGZuEc|nEi98E) z%i@9mN)8ptK05wOR{_nY-$CwzzhzS&vf(w=Gc*TzR(0#26D4|qcq?^sy`QGi|BAte zrnFm=xv6*KKAVlM9LsqHj+GeXz4xr8#3E8zdog9g z!EC{l9i|W9qoO%_j6yR#R+tvb?4SUW7~592CF+y3WF!Nt+Os;$o3j&BW2QfY3{dG- iTW3tde;+3QpTl28{SrYvs=@ZZy1KHqQk9}j*#7~dc-{E` literal 15193 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 diff --git a/fonts/lucida_sans_120.png b/fonts/lucida_sans_120.png index e05ee0fda520d88f7af9cd05be81e588ff3f72c1..c106feb275cfd579e247e1516665d56068e8ca28 100755 GIT binary patch literal 16295 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 literal 16596 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 bf0>M0JQds;-wYD}J4j`D4Y>*#^Pv9)h$LDh literal 53771 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

5=HmMB>A{zr@ul0X0C^Ahk-BL75jFJ+ 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%0A45+ipK5*gMXTKL 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 diff --git a/fonts/lucida_sans_200.png b/fonts/lucida_sans_200.png index c3f883fc53d50731ff029276aa989e2098910d12..7b57632b81bb239c5fb8d1859f5c76689bcd8b38 100755 GIT binary patch literal 69059 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 literal 76914 zcmZs?by$^O@GrVH-QC?NT>_F@K|ty5?h+)Wx1=;kmm&>PlG2;*Zjc7)k}f%Xf9E{s zx%avEkNvE7y?ebYXJ*ZOW+q%kNfsM}0s{bm{Z>v|4FII4M z6#zeDG4D;0pXv}-HQCpoe1vNEsX}Kir=|#iHwyr;U;u8PUcq(%aOVMF&jbLGQ~*ew zGaFUKp8k+iQP6nvR6agFj*N^XW+wLZ^c)`_UtL`-FE6*WwD|b=%*@P`)s}5`5&*)E`BwUs#>a&NL+vkHY*^FnC{*A$p#C_BDX=qo zNqkg8arA{r0`6-9f^q62=P=RVYdD_2I{*J3uZ>ZE8$PwT@5H1+3ot^3os+*>KbjZ4 zZ?A=uzP^}4M>CH=1uv2?|j`Z2A?iFXl%OD<*NRy>FoqUSffUiEeaKcif3lZgl`c_{8?KCGOX+hhy$>|aK<(;Npf-#U$lUf(a}MDQDBNJ&I?iutA z2}aCyf9j4f{63Ls^>5=h^&iMQ<3zm{9h;tn3~J%R6Sr&L*wPl+RPpLRIe@g)!si1d z6UIZ1ak$KU#Y&x!0FQ2t1X`_FVs;#oYZP@DKN9oJ z0J#7yFa{Or_z}MBQ@R^Kg<9Ea8#ZMLV1AoMtMj* zn>PKNp_i!f)k_8nnR$D)i%Eo4jnB-ag)5;*MVM6Mi4-Oe4w+=D6huCaNXaTwWBa=O z@XFWVlm_rL8%m-9%yn7@be%4oN@>CKKn+(_hn$+V&vK>=Ip`6eyVh-V`#57ykWjAM z7dncR6fp~tE(A9H>|lEkxJF!+SC{6|1v#_}i9wC$+`H1Wakzx;*~Et+B#q^f*Gbwd znQ0X@uc}do{V5lbVGlxA5R-`g90)9aQi}!D0ZXv+wo~+cz?}c`BoqeBq?HG`&OgQ2gcz`06dKDL~x;L*Q|N2-rQcC_4 ze|83s3BfBwjv_A*?3YI((&JEZVKf#MkNMG`r=;HnM?KAY4UdHi)j2Iv{9|=s*y#w zHwTrbSOFdolYzTHT9XuKVriyMEZx_!4PKNq32c2yefeI^IRO%m{#;`%FJGLafgiq{ z8^Hi8KEi3(VgEkw|qGsneLV3clxRwzNEU$3(}2&*9<9Mwox#q&h;$4{9K}A<{WQ5U(96C~WS#JW?yJLh z0_>xL@_Es@&&y`}+7Xe)b@0KPH#5Elj)c7wMw3GBu5o90H3{-xO0 z=7iKb>@v3pn`gv@ONo-hneII>vx6-&RV5F8K!)PN`p8Y@Z^ghiuI?M7>h9RCly%Y= z08Ikf;Z&8<{r(mRBkwflis`m<_=U{Eu8?P3eu<;PG>JLzDgVgUqDUKA>5G9AMdYyr z>|ZikMPuXW8Z&M@nv`h~KT(QsfN*h7dGJ_FNeHaHg2po3=Ayg1Qvu4gHCjPQ8;P76 z?uM;5%+iMXbYM>uAy;^g0w#97ahMT48Ipi(4o9hi_P(3^*}U!7IZ!7=y0Cpv$&AML z4^fcs*e#ER$U&kBv(-hMR)yqRMD~-l-m$&zC6P|oWZE1n4ZC%B-rK-%8wC1i_v&~e z#SIAHD`snk_|2SX8!to&FX6VCWv1x5>x;*{q z@ei{OK@RhMKB=dJ|5||nx)Z{q*%$dCEKzxo6de#=N+9mmUIl;O>$xWno+9a zJb!5MeC`MUlghUAVkgLc>C=P)NQ<}$Nvcy47)Ry|LFJDKzZGOaJHfG-?zf2t*844@ z(AKrT^gs!DtVp2QI2d)qDA}7pDI7h%h*UG{WmimB1^!*|W%oUq?VwBCQ1(1RkTlZ0 zzL%&v7wN6~@aYC8h`L8h6L7hX{flW0c+40n=2_a38LMAgWI@qu$D;_~!qiLp2Zf;W zlM;aPg!8R>8fkW@s2R;yd3=uH45xxJq%#kdTaI6VP!VOMx+D2(e}>7l0`y z!sA}58nMD%sYyd^8~^ZfJ@b4W8Hz6-qS4iZJJ*`mD!-P;h?}BU5H1f0TnCa_bJ<9L z-AZrYlg!$EPTT1G{n$Ych zvsrwFP{HB+9#|jZ?uDo{6!uXg6|-)N<(=OKBib0AJ`=mEEA!_*whdGR;gLd$myzZ) zn%yzKO-GGI5p4Wk;hH?3#+L_pUb4f0NBZ|XDmYAIzLN!Ci0jpyiG$1m8f(JKt$Kj4 zgbVu#0#S0yuWa?d>M9y0lIuz@UysVcFaR1z&~@%1fhn-xh4ROn*A`vTmcHAWV503h z!iZz1hmD$B7C;iK(x{*Dk4wfO6HWPlTM@I(3%p)*hth0t^QccDk8` zpn`TdgwAH3mLDR@(I1HZ>$_U+iiQ{e`f8zMTIJTWPs5Q&0z3`}pDXCtSfDSswF{0@ z)nwE^^ErN17QLnSm||0EaX~&uEzvqYl9R0fuo1&c5m56Q#uLOpt7&e6(0+Z1@~o-* zeW@3~rG@0E^~R8m5%Hl)vbmrF2E-bN@)1V6)Pj^eEx8jhw$(G8QY#%Wwp7eWcxeCKhQO10Q^FwGlX0B)YnXzq!e;Ai zuh2zU;Y`y5?=Vhy020d3SBALv6~@#&?Q5*NL-@Al7Yp>-J$sefe}P9Tj2V}17)nYW z-HC#S&9c5JgM3NUDL_?xCI>$fZ2Wk(Zb>&Q$t)A|&H1fdIyWxDVmO0JDx$jxX}R`7 z?SrP%ujSYwjTJb>9ys)I12sx37p11PgCKsFw^{lkkW3C;umf6bYDzt7 z*gYXK8g{qjzzT@iD!RT+5>rKv*^ewFwQi_gNGn!`SR{|eW&40U6LE_l>iLR>O(<*u z`-m_pKMS**ok2jCAYuEYVd5Q>Gf3ixbnkmh8T=7>x}u2N9^ZhIgXVmL%2)eVI17+n zG&q-B<%WJP`ZXPpW{x_t%%&+KS|6^8Hky{UE^CW+VvG+^u_Za&!I3CIg>Grsv59M9 zKO3#597rZf`IIOQV9|yfy%&qHS`HEVmNg-c`J{N0Z>Cp#D&>dEmUI*Tn>G1XSaaG{ zF8m2PCF>;&@d{yDo$qd}T^SZS>G+PpcMsXz z0FVp1Rh)vH=7szl^PXXXKnbY{FhCka3d~p*FmT@ck(%Iw+svc1tkK1Nc>3fYtEFad zgg+85sDA15n+R6D3aZiBqlAs`8$6S@m`St2A^l)9i8SPt{*TjXaMxl}zUmW?2gs|I zu4#xr)kmuOW8KC|4GuZt-BTbiiwVU5;yW^TY2b!>{7JxF1rd<`SgHPL~bk@-v-Gl)_Ynw?t)ybODK zf=)&N_VT&nsgSwEECN(5d5;X~yT7A_>y~o_DW%sS&Zc?+7_RL|qknL@2Y8rOep;PM z#{Cx%K-S@)zeYas?&LNmO?NYHb7-|1_eDG^m@tBXg^95i9FRl;Z?;43PE7}U zj?jMv^@di-Nt|BVBSw?_`NUX0ob3GQTDr@x>yyV*Q=P+D+Og!%_X|+L)*$koShHRR z(vLL8SFdOK=|6=WH1_4JajH&Q#W8;q#JoDI2>IYL$N9$|@a&-iSY7vM#W?#{n*c`Z zcg5p$)Weu`{FuElEDNvMOI^^3UD8~^iS$gyM=<*NP~@YI9@2v3%L@k7TgA0ilsQ^l z#1qZVG9`qu$;*tpyvoMPdJFHr-$sKQG?!PF#3kpR$F`}>BmI7;+EpAh7GzEiaC^{q zEttLaM;p6=o$W(l7(Tp`h+wdln4!7bYP$EeE%8TXhZ*~&q5w@PEr-YTy@1HANoy7B z7wfZE@?x{m=h1JLm!Q3zRP5dkZsIER`u9m|5yr6cxdVl{e_M2@x3Ul@=Oa^13og*Q zF$dWq2ICYh!{T~RFhv`Avp#xlZa^z%Ja54N3%j`Af1x&N~NS^gph z09|IG1&iVHS6i%>#T&jFT(zGaDW+aegynv2{#k(`k=qb7t~*mdnZKez>AiFRuH@P~ znkGnR^m3T4S-d2TzT=4-=m>J^zTJ*(&|*>$;$L#|c>?IUr~cr3xMJMe4=)$u?Yvjv z?F93$iaw>cx8V)(5e~}_vn;H+oBs7cxR4Qe?fJ{TUqxY30EUFZK(XM7fk{&p6RBD} z#b@3`H0_yN#P{u}sr_7$xrG*7Q#S5R%#4le=cYGgw0QKrnS4YC%?)|g-9nKTZp<$U zb`)8X`XZvy1dxKv7WH@o-*~9MsAeynZ5sV07v*MB@(>}^m_HZs-m{aLQFBR(P3Kq* z6=YYJ&9jtzp7GPOx39np5FQ|WP0bkOO_$@CNSc*L^NZ)no@QVW{cO^fU8E-vQq)}B zY4Q6$OI7^980D`ZJ@W$z7$aB#u(ZC#Z{l?IH#9$`*}tbR=FN6RIm#b@XV5Egn*Y&V zb%8b}sePc?w|J8jle~)oPMB@(W;8Z9$7ul5ncp3#EJ%=TJsrShES_=?Bj?VxQ^uu@ zVPJshrjh@#|1kCh_Eeq(rYUzf)w~G3pDCijYD9wB{o@2D#NHhyObFv2osqqfNg_=Q zU+6!$j@3}WOE>-AV6_K2Uz1$w@$~iSVEP|~t}^~}35u32!)_;>o5zROo6$2+L}kW) z3?Eem{3+-{s-;t272iJ9URK|%JwZ$$S}sex7Jf(RtHs@#o9ihll{r*VHJ%V2G`f8b$Xb*MKC>MjsG44wDI6ayREGR6@RrRj*CoyGt*tbc1A+I^=Kze4_o%MlXf=}251CBGkZgADLK zQ(ByGm<+8N*6AMC_kSV&5N-eR8iH3F7E-mL;ek_9B`HiwEeH{8_@3Qfuh5M$a)7s= zgRILTO{aGWfik~+H7!Rd>LORf6d%$^r*}{Py+*l+0~yyQ4O5+;rC>v+9tKO*(h#OVs`{k|}GuV^)D?~Zfe?@?r^{;gxw+-bR zolo4`s0mP612EY|~ZH#TyJpj2lJDt(CQNr}bpJme=J%RhD7Z(a|o%GUmSqpfBf z0eQ7q!|#R+1cE4=q#z$dvIxP6khJt=;h#}s#IsFES5c8)+&e=ao>*FD#E#JAJ1wI4 zh}ItOBiDB$MTHRVdkJKi-r=(wDe?ru)=@+-?4lGbPewr8aKCVbJE0$~Kummr}7IF!p z!!g6ND}%q@G?9)gvP!OdSMza|N=f&VENWl4(j9^#v|2lqA|m?lUwqIq9!=E0#R&U^ z9v~v>{m*-M?jRUp6>5Saf(-l8Q8voj;18WT$Pkz$Ssn0i(D=bLs$Kb}ql1dS?0l^# zyYvDx2JpG{;jL{_0%&#AHjK=gs)ZDIR8xy99`yZ2g-zp{t+MGu@i}$0q0$=J?@kB1 zwFP^!u)<&KGT`Ylf42FQt%&H&h_AUAv~n!3058G(qJPHV@j+U^C7+|7C^+FFAO^Bp zQn~si`vMJ6)Z#<0CGi!6xcd)EKsl9rJ)bdKw~I@+KVw7#(t|CF$!qE3;tfm%c-P~0 z^o+V{?l%Nbl^Y@ZM*>`*b!eTE9-yQ)Gy4<^2Bh}qb1r@OLd9^hf2KR$FFlUj-}zAy zOUJVv$>gWBh7B$%Z+1mArWrhv2p*J9^bNpD{Ee!War}s(6@GE%k-o@lVI7`-3v+XN zmoR{|U(()F+ZXPi{}TLCj)d4_m>_8p1X|zh;KP&s&GkjPpXV*rPkulkvkf1n_{6(l z@Y9Pv{dJ2A64LJVfC0}|_Gdhz4-*Y5X{%pEvV(uN<9}rh+;NG(V+8e9zSQE6z(lC{LzKtP>ushilrT z22+N>J*dIE=TG#)zL1slkb3zkmh-RT2OOSZB(<;3cg~60Pv(rVZaknx0b#EZeIc9L z8lNzq1KT<}E$CUTXd=fQW-O{1oKrGd;n|#8COUBVH)@X&f?GL_kLw}-r*i^e3DBua zQpBASCpgI>z0E=e^=;Cb#@zsaw@ZJM<72fOj>M-`_tQHcnY27J|=(IGgb9BV~S_i`h8JvjI~KXh1TtKq_| zy5}ti{?`70T+MBKV!#V#ZUPJP(b_rfsX1*!jb5`89Tgh!Q$kv`T?T}3xjkmQb3!%o zQr7;oca?(&w5mp!hS@;_BQBM)Bd;Mc4i=;V?N^y4BZKafMaM`72B;%$m*Fg{cff?6 zBC!<j| zAwAGKZpxw3Kjv~MHe<|rC0jG*e>f6pY=A3Hf~Hc0fceL3DrEA^!2a$J$5&-SO$~ng z2@>n;7p3K#{2$kEbOR&*y0J5`{*Ab!)ARYm5OJDYo_CA@@XDfD|Fph}a|#Cc^N z7$bKTYj9em@qlIq|5p=$3(kM-kq!y8G*^u(AbYDA9aMu#qE`AU3=>4~rUx&fXN<@# z_iQ~gR>l@>;YrckR?OYCtffT;4Zmb28TQ}$k1*-@QL1oAzmGo=c<(RkLfU~V{dKN4Cog+uMpcZ}h(8;`BJ4l;ML$GGJA6jtW_&_gL+eSCBXwTx~LR<(>~f1qa2` zk8NHW4=1mDuXhB0*)hovww>TPs{_yL0MwgDakRk<)c=oLSUI$pYJ7Q(7Gt?J@bHIj zn>k97AQ>%MZP?v@cw2!s*VK8X&$3Q*=a{RsPuQa@9#3+q*9U}yQMw;=*_R=usAf2b zDGtaI$=BmXUK$5(I+GhmFKIKc`rtz?{~o8Ez31sZ2Jn1Ke`Sq%k!=?ixq+o)bdVKf zqm^>LVb z>b%Bh1ZDgCK-8Z0P(R{v>Izo1hmgeYwE!X(F|myY!?l+in&B46+uM8$v^Tv+rWO~| z20KdOyV3Msv~1N7?@ZME8GGd9L*L$>GvCD$U)r%iU(A(VSn)miSCa<%ubzWa)K}s$ ztJb=KRkp6Sw9+Qu7kDFarABfNaJCDDcZUdEs?J6pmcl?bTLN*TPaVcjdh3j6eea#A zx|?TC);G1C9{zcbmaXh(A4L*Q63In;3lq4pI)I9|Tis!$$WI5IJ2uZDL*{}Fm&URR zZ673{{WpZ?kP4e8$xy9roR{9^y7+cT5~&lVW44m!lCOb0eecj)Vygep;pgv{mnfE$ z3Gy_QPK?EW3tq%W-0b}WN^|so_6?H@K)hR5G7g~ z7l5luBoDo_*K$1g@+AI#v+fHfSN}*D3M-iO^VM109O=r054$OsF>1+23-OL`-6z&y z^DMp%6cuFqtsv2Zw28d6Li|FLh=I;*Br|#|^}FWs%)o-6SXtF|$=KiFFvzOf;$8)Y z)|onZc3*K0vPZ^FveL1{gu(xqU}?bwKH<%#E!voflkR4Du~Iam8aPXH6De+SxY64C zjn;eqiiQ*Q(LU0V)96usP769XK82XqW9QyQHC6_!S9{OYM?bO;`OSW7o6s6zZ!fYK zJFhsq=Fa4E{^)d+kHy~``bskHy5mR4@bW~my};Z{>a9fxjQ!!ZCph8g#=+&&kv^Sb z-EW~~5V4rRuA<*4+)A7N4JUs$ve10INX|lpb-w;<^P(kjZS2eX&$Mn*BhGpH?p=%7SR0|0 zSOj=D@xcFliame!u~J!r`I~5bZnYhHk)_Y}WF9eH2y-EXxg+p*u)?-RePwVYZlRTN z*5!NYz+rP26g16sk1xi)4y>@zN{1Lxvy$O*TCr5D1Fl9VLINGD91&jLr2;X^f#rag zopX>-0gtfoie^2pBmK{TtXB27V9B?(^OHbGYdnv~<<2y)q7zs~UCI3Y7h>5xZIIvz z5Ai{_R%^eKC}tL+KPgmtU!Klv;46#_hQ-D^M17)-A~BTFE5z$S9G}VeLO|y;!iXpf z{?Pq!*I>QP&HigOU%yP&n)#~UBlGVZHB0MXyR9Z|mVd%sT)^!t$^Mh#cPA#dg+BYM z@y$?N;qJ6ar4|KNpKnl+O!DP>Bn9ap&o@8m?k@3pUl|4nBg2q&ICLS$*Tj)}x$-3w z+7t4zha3)6yy93O@5`~=Glu_h#(9!zvfOfd=j}8UA3mh;*PL@wHg$H@w@{2T;XI2O zLDX!e$ebj)^?of9qhB?N6ZAK_ADdR?gJkyBR01*T90~2ml?1dZOj*k6$EK~|i@nb0 zfXTB|{=_Qpk52x8{yKXsDk^{YYQ*UWfS0y#qP8gQ6XnjJszF0p^2)m9Q7?4aLhWps zU_0E&r@42b9_pc)Ye`}W@Y#qG@s}q^pnW`C?kGEe7IfvL^ zVTyu?%DDD2h`iTsrTO$bVnV7EpFX;(sDoF!x#e zXB!WUDX>U9o$J$ZRJG=y=+K=`7-n>~A`c^fx9bJdMBp_icG=#YHUlyJpNJk)lTOl*%BVj^3X zYW2tG+nDAkJSMC@H|&Yuzuo;f17d=93T@kR#s zRy!D$v;Jl$6Gk5;*nA$huyV8re&~F?`;XkiuV&c6*zi>@P^tNuRY|KTfdmtqd+v{b zr3g#^Vz5D|%$#pPpolB>wDD}&Vv&AZXgqh65u>yan@0gg2*_CO$8GdMrFC`^9=+k*&3Z;& z`1f6vsNlhuczo@$C_a{nXfKI*o~GOBo4mvp#EnGBtN7$l`3paDLSNWp>#g$}tY@N& z9oAj2=@wDlN*#`yNVZ?McsPB0D}=uX2z1RzP}HVeinu~szncCyY9m4XkoqJ7yP0V% z5tj((HCt|)5@NUOd;)uvna4s)%TZx7I-=OCo&C4~=3#muZfr94Z}8Yp4U;a5IbD0B zUqMz{iSQ+~jCXClvzQ_7Asol_qa$8^)iHJ79JNci+d+g#Rxp~U&4-(`C$7dZIC?sE40JUZCfd{&oXKj+Kr zI{~sR;l^+BtvKMV=LfXjAYz#Bal%i9x5@nJpZkh?X_YiTkrq_xXZ@5c#>jjT_ht@) z*MLV#%fMSc*(;S6s=9}cnXE?WR_6V9fhAqj{{=Gm-?+Qly00s{R@XVowvRuwRv`&K z3Ba*BUK@A$yXeh9P>GIQJ0xAh3A>ztZDlF%)7x(t`hOHsLHn$(0ly-z0k#qO8 z{IG@3nPv7m-Tsr4?whE<^3_>w7<||K9rXxcNf>-NPUMTvP0#V);1Uu#U-g=|o=bSJ zhAX#5tWPwuDw9AXJpR#a|FDqt!ti5kcSQ)A=U?N%AATLOkjBmQc(nRn8M(<+4l4mC z9ha7Wg|FZAY8OYbLTu&L+0X3_*)NNh0*~1B1D%HtUXnXqwEF-i!Pjy6jttYqq{~s` zp)%HJCmT8JSR(GXt_-WwW4cNA_q38n*Hr!C!}seMQo2)jhw+b?-&JnCt{r*bubDhs zNye^cNO9h-?A~2!hYmO$o_JkBl}SGIlONr6ycn&n4m=C+FYr_n$-n#ATX3$v z^l#~>2u+FkY*QA5qnVgSH2-0MstHGHG`QpYhqLSO6F2-M+Iift81+@7tSPF0_bSI! z9`CNqW0iIb8y|{OzPfYziD~qLF>-j$5v^n2Je8=Y>zRmzW`4$K(B6PGz|) zO3kgA^$J``)01o`_N{b^5e)uUNVBkHyy(=53@R#->?8AAygjQ9w%L9`T4>}*ya%VQRninwyK^;&cvr%J}}TYs2zgh)>h zij1~K3%y8;-MlOt8}r@wnVc@&k869-P>n@pFZ1^WB$N()4wR2Gj!|HNlyQv<5HvX13=O2YqKH28(Iid5Qnk;AAZ@es;h&@OS^)JOb(jj zeE{F1xh+tf^I^OS|3N|2)DShwzHmrY6?vUA_+-m%FWDQTfL4z^fq(whar45pkz%xv zWi*g=`u2Ggr85#pqdegN7PlOW0|q;;0Qx)T${qC8e8}@d$`C#RAiYbWRghGqodfCt z;K=IBXL+fV0us!kFWF)gC1u++(uwH=|GsA)L0|146hF>jF};eOV%4uC6OO97)*%13 zt&k=8-GJQq8ySw?^erDntg$_*myswg1W*=^Feod)3jt_x2B0u3``=CDt?pyM;gCeP z`q&+yD;GFU@$tq0Q{xl?T;ngA*x)!2aY9JE%r{I@eW&49$@D>uSU}p|PwL?mNza4p zRV#a|(1_l;p4toX*XxWH|9U6BBEkqo)~tbvM3v7!CeW3H0-KUk2C&Wd+WQe=8AUyH zszYI}lfH&_-X8CD+Za)8WkM8i0sNmuV`io3pW}#QX4>n<1I4PKkV_xPswxc}7XhZQ zKJsLb8rUvjJcYh+PR1R=#4_gWr!sLN)V*U0t{rZdzdSdy)0_qupW^$D5>Jz_A1Q$_ zBGOeJnOu~QL&s^UX8Z;g=rg2XE@)Mndu<~*1y^5hx~`ZRPwu|JB9v_x8B%cZZG zC<0LY9Q<;$Tqr00a7fx-n9${}`?yclvbfPpN291|5=M}j@{%XzNUQR+?JKkZJQGca z{&?C4$E0$ve|K*U2Tz(}nA;LPer3A3*!UxX2ZJY9rqo7+C6@(4H3E_!0Z3+3L?oiJ zi7%E3rmO$n$qIf-L7(2Dc5%jIbW8r7%$whBi8CJ-9H+Xd%@yJ1VqJ0XuAmD)kWar~$bg~_Zbh5G3 zdrRViG0i|OU;>?^--mb!{(QhE`iY;JbrjZyIb zZ7fqTUGrsE@Xq_A;Zr97Ll5|betiXC)lLubP$K2*Q3$O3+2(zwc>F-ii+>91G$2?C zn$^+?|H0BJ>O#c>xsx3^C^4KjnxuIvM|{@2T>PiMnf)IM%or1-4J!i!EfQ?yjcu?h zhf8O31U8l_0vJA!0x_(ac~ORDJHBSd-cMvFc;K0rU`56y^fktadZ33!{#v+D_loR) zo#>9y;ub9xeuKau@VfdQTIJuU;0NsI$g=8sao?5armzaq9u?#|sN{tJjq*-ZgnCFw z`c+pOAy6CJZ|MjOSB3tLDC$)Ea^U{w|~(R~!$cD~BKPMM0Pt~+$a=`<`ql+r)h7y+po z5NM+*&$J+sdC83c$Kr}x_EsjQEopskn2KOCr}@w~BC8Lww@jiX(?24Cn#-#C9BR0CLv#81=k*Nj_qItCLCaNNn( zCRXeiD0|+b$LV$vPr+3hnaOB8A~T;%=v~zYjsx*GkC;H^yvtf9IN-tzom;s|^k8Ua zxh%5JegZKbT2;9d&+x{o880L)eeZN&gnZ@W{j~Pwe$LZ);{1r?8{e{W-YEN8NndMo zC!hRfYLcR6GPu=8fDP2i5CpOG;EPCvQYhU|>The;59_g=?p-DS`XlsSVzuHuHZ67h z7cFnInw^TTmHx`9FHAaC{O3rZG28J{;XR$5tN+b0eBaWPo22E9IpwKo+T&i=Gw*eN z#*Q}cpTQ}t^VAYDZ;86feN!(Lo%)=<3_mp`eW;(kH){KTOz8jWhyN#crHzEfx$-u+ z@WR@6d)cV-*g4Dz`H#s(wC)YNkL}$%&Y`yl#~2yy#w0`!r+X`FglnI=J-*bs;>QlP z3${v)=|=<~I<}`*yDn zyojX$9^MP(ktl%iIve}npv)|{?jJs;xva4tjwOhFmX6M7*udrwYtVMaY&VF*qF_OU zN9k{8XmZz1&r%_3TjiP35~tJDzxMv-Q?Sn*rlNx>#!L78fLG>)2d3JTK>8Br=N8Kl zq#?-3S$o8i!#f{5(B>`qUoy|!k|PU6J*trD5+_eGA8Qklrdlue_;@s)hyT9R427Xy*o;Ft<9mG{qx=akSk)0YoOd1gN_!W%)3<5vd7qO;Wkpgr876PN zT3AO8rW&ht)ZIy-`svu&gTAF|Qa|DPO)OLAYWjY?ndKkbGI0^%B^}!&PmVPy`$U(( zs!arHXR}u_Pimok!{;}UlD4+L^)ly2>4&3PHUux~Iat%|nwRi_0uQBQm0^YZr}3c) zIX4K%6P~~!W%&2*WbLU37>O`)kuWz%c_atA&(0EVX!ZrajZh4KCxqq_hCZ&>}hMz#RlM6GrUdG(D z-~YWw01^w&IL9oHGFju=gnaahij+Rn;6O}F&wO^bDW&qA&&#Ujj4lkn{#K7n+y-&h zUb|v>zP8BO!7WI@?%Uvm4)@WU=^!=B52lpkO&fiv_Q*pq`iZp&&1DS|7An`ZIFHN= zQiB~vJ+%PUzQci}vT{WwEKD zOGnfl1q;yUoMl1H2*Pn_9rUrY5YwLTJ-S>z=(ygXD<16h{W?0}9B!juf#*~gERsJcmR zVNVbx-;_9!h<|c7PDKJJ0U6u769Uj>?k;qjE%FP1OlhPkdqqT`H9~45)GOBIOyMcyS&2k9#I*#qg< zp?4R;LN!7Nfj!g+CWJ1tpU*KkEZtq)4F6bw4GN&*<4*Z0-iGb!f^W13N7g(A&_zrw zq{a|Qj{xs|?xzHU%)OZPL4j>TWD~9TqjzLXJr_RyU(d>^t0S)2$Ya`2X$BEb9?N0FV|G zC#&BwByh5PlK5c4@BHE!%ApX`Z8^f8hM~C8Z1xM%n+;oRprdUH{0ta+T1(Iu(pO2p=k zpo=G1CUUrHHeM7&x_>!4E90vB$~&r4&3*cEeOb%{34Y4EjsZSbzQy`l6Ttzi%p{Q( z(nxpYOlwckX=gY@vkd(eu=wtutbR+go&)M`KL0ZN~fuUrGa-6x~~Jk~4!N|pO#>jxnCUXuh zfUXB@@6NN*+!1Xcln*a)vk$G%T(h;%Rk-urcUgPR-j-0+>7AQOk*jEj)sY{|yujxfTZu-!GI_FH~TZVFy;X?qQ5=Nr=#S}yQ4EDyf6$Rww zkSOS;*#i|(!DUof536<%$pP?uH=J3--y=!iPU<8nWv8<_ ztSl$oOyk%;s5O1lpoY{r#yZIbfvqSAmA8Ix0&xibT|5)8f(lv&m7HM{*dZfFe-GY4utWi5OjN?XrHI#oZ5u%4bsD3E{ke1o3|UNC zUSFoc#KWmZZiN3m|DlWq{Yjrnr2SUC)~=%h89)@i_DUj{OWOy;ARM5O@%fe~X==a~ z%IBgYu(Xo$_^khmXL#TP0#;AuAtP4z_c{vjzIn_Ph>7FPyXUvr@BAa|LE{A4ix81` z;aQot_-`%-9S96=jb750%ReWHWK%N0Dbu0j4}U}d>B*iCKr0Hf;z(ru9Ya=WM1N-n zf0A7ZARnX3R3uiqAUFN|DI0;nUk@sHEDU9Jw=6TykTG$4)oP17H7f&+TTYSN|Du-F z(6=>T!v*HdWR5CalA9C>YL(KE>PoYX^XCvjT#`zl?34M`)}1pTb%8MAO-%z}Ik%Q| zOk2AOEZQr0Y$SuF7=OO*d^QbdS;-Rod#UmvMi}?`G_k(8ojyJGglGixg{h>cdk7a5 z#Kzi%o|nxa!~OYtrZlZj51Qav^3O&jz;$|KxMyfs=q=T@F?Nk9Fw-(dDl zQiLv;A1lsGUui6Xr|Zoum$RLq6UKS4XlpD+q!!y@6NaML`3nJ!!Cy^N*-h3*BYjMch^C+g1b&`_;bXUi}id}Y3ayKSzUjT>N)l7H!MY&N zFP+KK5u1GN@^>ztk=FYsE=AKcv!08dzUE z(Pa?XZ$kh+06Z+hrumMzE?ze`mDuP>`_zVcp}Vy5B}wyX@wk-#A^3cR-g{sbRwBOT zIJUkNsNySFrb~&Jd@%7_1pP`nsAPkH8>RBMJAv+61B%P<&nwLrc~$=Ys z3_GSMx}CDgvYU{e4-zm1CDskdW;G)-Thc{ z6Q+ITpX?@9Rr1Hp9B{YK4JfFKdRhZ^4D2QxjwmBH#uVkqFo>V2yWds)uYF2VCT*m> z6|$pZENTdp-;fX8BuTrQibPqHOunWpR9gG2D({cyTf6E`rLvR{0masE)WXXbLKb6r zB0Lw9%_B3Fjt;fF3ElmG_RpcKMg)_Y;Dyp4slOo~ z(ob*YVkcFb8Tz`gv&ZRqO6y(`GSKt>Uu1oCR8(E~?jE|NyF9dIt7*P5ReAx?yfuE`rW(Mz3cvWX4X1$X7)aF_Vd0^?25fNpQyPNT?{Biowdul z{wdoQWOCT{Vo6KaIUGLKCpJBvw3efhiw4DJ>5N@iafj~onB@1%rO8-n%6i(RED+&7 zTtE|lZ|SZ4edGZ)LAI85I+@NcJG5)_i`uxL12^8YKnFyvx(RF_3c}PjEja|aeJxIv zhK6b~VRE8*bp$1dalxE5X-&0+&FqDUW!iM9K`3D2W!hx$F6IPU6om!bCo_Qq22^~3 zQ}ww0BC#-4Hsns}Ljsx45z|Cyio<{4LAeNUvBYJQyB(4=7wyMws~z_3f@dmH`bk1d zTTDRxnB+nV&E9ecxe7-sm*m47O}To#qDmhml-+~^0!1+7yx$+6RJy={B~##U8ogQG z@LcL7vRB^0q1AVF<8^EcD_o*lzE~r9{+4$uK_G1l$EVt?xxSB9bMpcr^Di&gxhSOTpDV8E zx#2I5Fg=d^-Zn2?{ll9xBYbG{lJ^tR8P&8S`D(C1!*}bcD{DK6XL?{`SwlqRzGY^F zfL*@4)$dq!H1lVS6We*A11?AigMnx7EWvJM+WXfx>Y&AY(!s%JMBu|Bln7b1`?S4j zaGhqy_sWuLlycJ)jJecb^XK_y~6PKbXo>3p=#6? zFm)$Y_1&CkP_t;@3bmH)@$mxk5233H?ZuCFvqjH})856s`tB>U6rxW{Sd5iE*8Qm3{)E!JKnCd zWM#(s?)gfL;J!h)bbTQH!3y<<8Oo2}*-V2@ER#GCVG%DeW}ox0H(Xo^gC(4d4oWrI ze+22Jh9#wRTsXuuJ${MV5=1*62VQG{RYLf0SF@K*KcqgUwfmbcW@J4D2jr*#=^!*n%^HT%&67q!gGH*D^&4}$sfc;|2;hs>Y zsNlE9w%9!rz%OctU6L4B`l@ugw^o^p_B#8x)luu4XZ5OWjQFd>^sVe8&XIm_#7HY| zt?MOx+4@DOOriIH`*2-4v2@Bz$F(3V;M@WE)2JJM$nH|@f-P$sA%(-q%>F-$?q3Fx zikpt7beENHwEOxy$fADMmNmOo4l5fFmpBFqh@k>$X)o;LCPI_rK)3Dw!Qp?Fy2)5@ zpea_RZ6XxZOgCLblo9r}CGa=(K2QXeF2%e5;{?#k^`#bmcijd346>sgg2vo87xWTG zCQZkdcB0C>3suuYho+gEJ5q0J*^MxQgdLlXLR8CZ*Vd7?=xgF@>KRz<>`F?%8y~J` zZxZ)a%o}&;iNKga7~8XT)>zy^Q?`@0eH!#>mnqjN$UZ|_B z^Ge{rBE5g5BLdtP*<4}a5<#E~`O25eN>2!Y>uor^B;JQb3D&C@mGzt6Dyy*j`hTuL z#s#zRQ8|HB9z@NU522VuNb9d-hW0yGcr9!f-R+2#mCC|i<`>c&85uFxX^y}caGcdd zfK8DiYbS?y$Pfev1XO*tbu)H8t=8Z#i;c3hcxJ6WPyiv@;}8t#Z)EGuqFk;{klmMw zoHC6Z+8mg@zA^jzoeR8;LRFm5N+XP&b_vXIcpILBbh~KfkCEcqnek-_v~3Z9S8p-X zNs;RPC8R`4YVPydt63i4VJM^fbe&SR?C7?XFaUbrKRf$pmyG#>gZgerZj5TRux9$w z<aon*P$jkOxn(@Eg2~*woPv2!;ZL*HcXjS1U!sNs&aiFEP|X( zUYLFf3=$9ycK$f8optWZB3^b(y|dkF8!S z-S=fRqN#g42S9Qb$I0yeNe}{v5RL4PeZMr*2-2-Hj^P?{s;^AB^FMSbiy;HjwEff# zk{%rtg^3;)yW?%8rh0BPi0|SduL7 zW7GfiQ!c{TBrNQ|Fo7kX<=yl>wb;VzuPX?^Dl7aTLwLjbP<#wq*zLXCH-|21KBi;8 zc6WI_U@;K0b8S7!-NXKqr7^ru{2MEt5M@*r`Q>E3xyJYF{cHvF7BO&3lVM^B!#>_xq*+_gBtvUIEVhy$)T8o+BN8Z|zDql7zB zLvZ$Q^0>zn$o~mM1@Aq4R7RfUyAe&Y;SJpD9juZ6B0~qCmz?3iOvlw*|1nHpttvyaqe<23`R$SI0gFO0t%y&~;@Xw&h>Tg4PU89u-HVF5V}dU^N9cvLa?t}P^MN(Yo?KRlLT<@*i-u<9iK9BmAVC#) zY@s1`RxL)i`=S6#?PFuNk}>5)d-Ne4;=Ek5g#)x8hv!;;N{t^#jJ*I6%OarCnO8cb!^tmw~rBFGKlY`kuN^X?T%@|>I9 zgm#bL3MNn9lB4qXj-6m@Zyw@p;fTU%^3u8=eha*=8OgfIsq^|5^_-iH1nA>sEdKC7 zwANL30Ac!IwsQymLV#K45S5rjSB&lJka<@_nfKRWy>uh6Ll3iXWzWOtIhkWP$-IeI zz3!wjAeT<}P87JzFP~$Q+zmd`Wk}M-7c^vA@4uf%hU&Yn{NkVz97A3glWP!K#0*)v zQdSG;qT)=ml+;qS9IP9)QR>K_&qH|^N-GXrB3T-jR*#qKb!cufc*RvddQb~BV;W{H zIlgt9SK@d#2`4FdiUWv&13TE*fsMLpz9~r(Nzv^N%J>9Zsf}V{Z~M#FkN|O&O=RD~ zj%^Csw)SiW17a|T46dHk$FeX%9IKE}xM@2VY(&b!BdbE!RmWeQ`+XZ1Y05WIM<8kOzrPZf$F=)5*RAQ}q8%QqHv#W^o$9vKv?SPD$qaHR%Gf4%+Bq<{V z-}%k{Vg_ZE4#)3uNNhu}ce@cpDWcGYZzd!3==b3r7kJ6HXmjOrY75DBi)dDqc9;fU zXfL<&5ma;X`Ix_&`u$xh8kVA>Uhi2i%zF;?FI$GQhT252ccOs0;9Ad)uN$@WbZz6G zMNSm}bx+}-;{_!^nUTpC>YxCU{%zk9SU2S;KAQ<_^vq8EBT)tmAy?VnVSA|k5e~I~ z*Kr|~ZWWg&g6VHDM?zH?zdMc7YtF(}Gt3|L?b4F(6LIJ4RF-&q+{&xS&?J#mKDnBh z*W@p*r6$y4lT!}2#y^{4!{6N}meXiZ;UT>+Rs1`K%fm^(BWYtDjzrK+Z}8)dy8>Db z>PnM#$Nokc{fr3?dDJNhV(aTvST}eFz6*xa+as+IUcAO>brCn$zk$SRSMwdC9{_t=M#%U!KBfWc_xQ?+dsDyb%Yh z6cLiDhrYLx8n;Sjqsx<#BLDorTW%xxU(ysUL9nvCy2 ze*_P0K?6E6Fp_kK0x(sZ`Tp2x1oJr2A4&HhlGa`O3-pl)NnYX1_GjX|oW=Tiz+~#b zC*AnLuwjfc8=ptWq^2aA^P!UM+AqVL5VYSp11mh5qh@F_nCUh~gZt908XT0rQX8!b+q|lyHjyM~Dte+5FGZ8nV92vT z&?4F0VcEgFw;)z63i+hP_g~ELrlAQV8ZrDVeLrL4z=J1XIS2F_V9$El_Zia!wQO8Re3)k2+IBak(aHR7L$G?WczeLh-22c^j~|GSOejMsw>vRG z*3mm4oYG0@cgVDdxgvTWOA4Lbw~av_?Q^euV_;HdZ!ym%Eq(qCax=JezVZJi`n{3B zXcm`PUc-EzHJ$Ewf^nnIj$ESq&n#vxc-S!hbmfJ)^{p{Ih7;Vs|AclpNMl=V|M}?A zfB&7eBP5z_Xr6tBy$qf0q{dAp_`;EO-T52erL|nFjmWPx`1MmgQr-t|f(T>Zl1Py) z%A4n)o2RwFX^CZ~?Ii@lPvU7ug|oE#g8qz;Yf@Ly#RA)pD#Sn*L;7`nx`S_vh_}Bd z>T@aHpv7^cex+aQNmJ#sw{G4}a#^G*S}SDrQR)PO(qvr1b^R0dG$%dU2&8$XSbHuv z&DF;mdVICr_8Jof)Xh5v#sHk2Polf}m0o*Y`WMG+65uUT1%V1@5e?HjPMWa2@jfBG^dNgvpEIZ_zTw^A3=xYfFv7KiCT5It- zmcU5?fEvZ}wRJqQT9t5!$7M}?mA1@eYyVKsH}(~>dRlcW0VF5Ze8x@RR1KBnHsOJ^ zqFp3t5CB`+L+`ZsKqHHPwg(s9fk*wqP|3;r3#TC_QZ^$2bQW1b!mn1)^8T=Udt&a9l{uEtCE`o3~%b3)_#%|-(4x^ zCHAbVMHIildV5IjRjpo-hu|nlmqSauu&$cX#`+j6>5_iST*HIqUCh^O60tuyZXx=U zJD6QF3!kx~;AyzM_Kw2Lrf|zbzys6U|BHOl4fL22nvJN z*9u92FExx=I&X}x9t-D%VM4plsOQ)qD!p89m}kiM_1}Kci-GgGim$0#o0WdSb}VVN z5Ewa(7P~n5&78G~0TXz*ee&9{rWSQRCw%&3_!C54t|CG=%m)A-gv*NhUB}}ax#iNX zjqM1JhnMYowVGEFq~_8`ua5$IziJzb2TfHJ4t+z3!%ndo|AtJvZ%-QZD~vzD`*ViF zT0P?2Wz%;{My}2)F$;`-gLG6>lCK9rx!h61-sMS4>;ga^Gx70(66;I) zpcGL#s6IFRH4%_3ABa_aFf-qCeV?u?u~s}mKJJ1sRpG)?{wb36m`n+Irj=B@)uCXI zEuIqC@ZM1MBFOm~ze@e)J)r4o%=k65!7qk)o2KD8<`W&1|1#{-POMwuJ=e`+$CbKp zYSjlzA0C^-WCLRgZKpt{IvH;nUo?khF}t-bl`m`O#wxw&)+Zd?DFZ7B2Ylc}BcYO4*C55dl(teYVpE_?MzYnj#v$ja}(s+JsS!rbZ?ZC46TF@Wd>+`ViFyymgCc4Hjum_S|n{m`A6&cH_UfPu^Aw}?{9{T9MlO4msI zWZ|m=MSgE33eDDB6*rYDE{MqffzE;F*6X=D-_<@@E~+7VL>HaXLNRxQ;(jF_>5lIf zGA}^YvkL}5V$}z@b{k$9!ryZ~%$IzmgoA2Lw5U>GvVMK&Ovd~yQ~ca4x4@J4gS6dBDt*VAX`p#w!#~@%h5w56PKg!+GZtI@PV$vlo?wHQZ66PurZB=zC>~U!gJrZ_?OTk@@RUv29Jy1*ZuZR!3uN ztLnm^&v2UR@Y+PiKMMr#Zmw=HFl z>e0Z6jk_^kr0rl7u}Up*VFAf8n4g;A+;tfa%w7UR72g1C@bILKrMMLI@ogA(*#l1+ zq($wn9Rs8nr|B<;@0Jw7T3i1zEE*g1D7YuAInJUeT=UKyb4{T*tehm$TJYEOH%Se z&>8rtu5k3+IjS^;;Rh3Mlni}f9C_|tR{1Ha4s*~PWK!A-DL!79f!}!F{zL5W#?JH|cQTWOaxOsnN zt)jI&Zr#E2(F0KgP<}(M5t5C|X%j4QRe@wzTQ9}^#c1ePd0!VKe*+~$*@G>h=@Rc@OhF1C{>0&-$ajLcE}!(``l z4v?glppibUncZ8l;|{pPP?DP z-lc6;o)qA0>l6XpXy8QUq(4i9`Qw820&#}DIRf|ykF(@(RQZBpLx@k~S(-jmw|#~M z2fQTxt?0^d8KdhA=V`DQ$EhtnCgtS=-3Mthd5DLKExyc69Eni@O<`&)9w#2;YK(2 z4+PM|)n{9hnR7{-Gr&lo+RXxOmmvO&F~GrA`|L5wq=N+7cn6e8;FXpFNWXm&r(mWfsiNG-UoyB_3yJFd~CUGUD}g zUIg>eGrr)bFsr;lMLe7q8HiQpVM;QSjon=$A$PVAuhpM#ATirW2)*ii7Z)1xSDNKIVyATZq5@B8oHd@?5+2 zD!1UXwQ0QsCBlCi0w<(o_XiZvPZHFwv6=Pd6&No%=Q@AYZ}j@**-L?4=yy1V5_JEF z)^V{%qEAw@Z8y%%W5%;)PW815X)cQrl}~*~?E=+fkjBQ)mBn?LK%X>@0Cy@t$y&07 z`E|;UIOxOb2Fi)|?~f1?=`37@XxC6Pibb*Ddg0i03K z$4DWerkawjM?0#@EuUTOR_u!%b&bU_4a`V$H`ZUhEA*M`s7W|EHETT)x2kQky+k+S zCnRrh>U>e6E#J0s{~Lw+ni4Z-nd%_66~bK9C1#hz_8Yt4zW(ytsFCaeJapN({H_t- z+ar|-gPSfbG2+=fRN)bT?zx{gM?-ki#LcfEZAA5mKhBp$-HLe|H)YNaw?D0WsGYjp zT#SVjF#mtq0{>gV`(F_KtBrf1sD%LUAuNn8SjGA2+*xV%_K5lR9B?VDQhpH)aD8I` zdo=3995r_P{Jfw3(^9H5s)d9tRoq;l^b5y=n3Y)-uq9)i$o;?ZYxes}&Q`-Ys4n*Y)Z z@eL|1?KV+#$V*yOB};pcz zy8Jo?4W$~1cK?D5vYOjF8!7LEcV&0)2+|6uT9A!ugbZ%!{MoHW)5k#)xWXCO+H2Z z;EhK^DXH+1b8fUr0RPD)lN7=~6%p?J3!{QXZ+Th`*5s!{IDHx<5TU+_yrNzrHYp0| z;>O-x-^Bg{a$j|8%>$Vpl|EPxJZ3t!FQVk&zOms^07Nmqq{fyTuMHVxlRN9=xQik~ zi9{Mn2>x!v?K`&MJ{78>3q$_pNDg|MGT8zIM4w@pg(&r{KHfk@oLkHw}AJA}C1=BnW zyP3aE_C?T~;p6j-%c+uA_KU`k4CS6YcxLh|pkifQcJP0eSFFt`Js zEf!-8w>ovJ3|A5yq>c0>16H9dbR;iG2>J)}&*k8uz6P}w?6%VjR4}_+4TJw&4hk4$ znC|G397SZO$N8rGu9t-Zhe87(CMafbwMu|?UdtL@Z_vl2NB~&fv2Jz2kbT^!R?j9s zp=qVouMyTCHZN{Y-)gGPUcif9C53(Ih@d2of04Y?#kxnUSzxZS`~|zmUb3*Fh&%rH z=RqlR)~_Ono`%On8pkzlD4iP9;dcI`6=c6n$|}x}Tafb)uRrI(MgJweBf4tF;lFl~ zEj2(bfOd_N#*`=*GG64IIWX*)G`mh!Zk4Om4w91L^2^u+jKR^v5a!Qnc!1v3D=;C! zD{Z*OQoJ+{M=?i&u)cKn2_i|bl_8xWg`c~)4e9FrZmFk(H^!i6q$ZGH-ECev!>ao@ zujh~h0Iq4bbwCZHnu*d2ORZsz`IcE19v17 zN@U576dX|{BIJ`F{~$MMRQviCmqb|A1aM_hPV`|{-5tzN0R&yTq#?sDZ-rk^oi^Yl zx5>X5JL?vC(XcVGer{$En#3ZG(-t1M8JBO8(jSjZtxMn2)2w0^y>8+whc9sd`NV-l zkX%#>zKxEN^uCOBeOW8~y<1VNGDadDcYvkaYL|Sd<;M)fy*>6Tv6!5rT`a$uQ)GtE zu?gQ)eb2q+q@A2~-{j?x{HTY+g>5DB(vNf##~NR7-mvE6aj%iQw;56yB6cj*1o-Xet|e z5vNr3)}nO(sYo{ZD0e-d^B!g)n^CTz#BIQ$8)!p-j&(^1=~NER-Vg(^LX3xIRP~lU zY%CDGo}aSUnydL?&+gR|>uJrl`LB0s185)1nwE%jZ5)y#vKKG}P`s|UL08EyiWPO1 z7mKy^r=nB}YU!EG@d1mE@qbX(A+rLe^rIJJ?L7tL4}t%ri1zZ`DfVLdeu>i3Rx*!1 ziXLiU+8|Hfoa2FU48z;@+qGDDC~-trk*T~Yj@3tjt=_9TF0yB-Ul}Ymg0lD{UuNeM z81x9AYG10h@Fgh^gxZsu-!L9-YnVDix>Wye3d4)b;NI<~i!}7QbQiaeuG1UA>jbZ6 z@Lm05|5F%>Br)W95^ZO9VEi$+4BfX_j$!LDar_LoGeRKjw4-u^Hn}+C)cN4O3R6P)&O)+XL3G|X`PaK9D9Qi zv7M?MfG-?#1qY5ow$8bA*t2+Bo>{@_dcyA>7_i&4Wsf@G_O|BeoduW8wj)HP{5Eyto|G!CmD ze^vc+Yj5LY>1x?LMt1-~sNgUDKkY*;!_cE$lBz`a|uXx|_*D#m;7s)DJm9+;H`o zlhHUQZp4AO-~xI6!Lr6g4?b`nAq_Ezw;>-3Ns@rzTvF-qE_s}#qAX{|#_n=UbW2te zS^nQsQ%6R3HX;qR3bV%TmkS>(LUdMZ)V~&h%h{Nq zJ`9?0lBI(&&{f>CKHCr~0dwk3&Zm>qkg$A$U^7&6jaFmpApXc-h|yd!O|Ls#D<$KS zEh3~#i}+4`MgX{6=N%!Y@3}cBJT$Wh^3A2MXI>7BXU^%JTV3k`;f`;%)qk|EP#TsFY~C^5 z3xIMu^O47Ef=grt3D`LMP(uFPwOH?W3vf$W(xdCi;(Ke${1(+4>;*@cW<_ zAYhXB6cdk{-wI}qmfYp{ptGu69J9ui9PTLA>{d>^H#fvcst5{9%}fwrN1Bg?breXE zON((p|I7T*P|!7Y@NWHrk}=gL-q`y)l)f%Gh3Q_zL}76|@2lpsET{>>eR$LdCm&-i ztjasqTc0JJLeJFZ${%O@YW@-%OVAg-@~y0XK(V4^Bg`%q_f8DtaCx9Ge~QHjQ{nJP zwSE=T#@Fw_L}Kz-XY+XJXH?M@Ok=bP3-wg^bA*mmLBh1x83MP;2uwpdk+0o97!3P= z6IWKu*pctzkTw=)u5>ivfRiWZZm_)tSmO~M|+27iPL=Vw9Q0%uB<}c zl)5bwJUa>Dy1LCS6U`Jmkq2YYTt6v(i;;b?>Wm1oIqOH#o{MOmQCH`_zu*2uKUW)5 zp&@m+wtK?-INcl91NT=Pt31sdI+k0Pj8_rhyXI9~|w;~~S0mfp7l18>uB zOq9UamOgqrk!U#u7|!<#&Kr{!@!d=gqB*%PEy^xbYSA8Tt4E<`b|-&#lkrlhw^7cE zQvYcgoDf2wJW|I`2a`X4ls-DJpCJIn+QOLfib1l4mw8G(L9g&`j2cMH!gGC=;TZMK zX0Hxz4LmN(aAxp)j^Zf#V?S{+P-&LM0z-(nX(xk6gn<7mv{2{W+*fV+>0cd@V z*hBB4{{oX%-dZAinUJ1{*$B&{!`MA2|FJO>^4+)^8=>**YJqOY@vy zwB$$01PR|pAAgviw2I{Ul7{Gi8u^7GJF_l%P$Yz2z;UF|_QWkA{IJC{@i@=wajLRp zMg4*Plio@qf>u`BDZmj@UVB14$!D*G)xv%B#4`*#v?LF#{Ztid&v|(%-4P@27zu5#G2M*IC%r#5SapUcT12JdiBaM|TRzOO;!x^7Y z13mwxU8dTbOG2hHbsl&qcJcNae{Y5^*eU8Ius@IDnTNM*m)9AvpV_sp^nf%ZW4W~m z++L^zKv|`34`VBUI>`mI@b!X_m79+8hu8;a0e}>5Q z{*s#viG}Z)4=a`XI@k{%y4|$$mDzEvjzM)l#6dlnxSR;bS+?X?z3C=HHFv2m1WcT- zD!4g#I2HcGWiU?aor95D2D`WbU%O#@@0?HN;GgGd=C5xB(5!SmIDh=*bZgw2UrXx} zLB+=drxpa_SOAHI2NQNls8bbY7S`LJimx^dV%!DSa?}5?QY?_czoB?1%I!a==bzZ& z^=Pkbmklx9wc_}geEJ?BVko;s!4FLOz=0_p5oBNjWG})az7TDwu#N9rm#Tg(fQACOkgPdNrNZM(p!!B9s)> z&=gg0^@m+vCF!eXmSx3i#QPW~o(_tZA`%dRJMOFLdbJFLbCYxPqXb;-)Xx7b&6uq) z^jAZbj2q?O{=1s&s7zxR`SzSF%vg}<{gbcFKCAW>1pH8Pz9R=7mxG^K%darkUPKR)il&O zC4nGz+tz*iW3Iorw;mG6&`Mrodc_p+B^F^iLyWjmAjz_S75l9Q9qhQjCcBh`TU7~w z1K$jEV{QILAGwLgK$z5aEhK`n&@NzGn~6``IbIACIRY4l(4h8itsx0`obr zrqp0+N-cOVEohCdqbP3D!RAAGe*`0 z?j^c-lv9f?7MFyHg>ZKVJ(Ngrw^r=0we_`@jUj9285Cu#C?8J{KT2*&%Txp4+f^i) z`>!FYoKzcmL=d!V+#L0G1{t((79yQcBYkowa927f`T{q$UEeWU;pMihSM3f~k39Y|25He3jqs{kkFY<5ewTi3Xz+@L9NN`kj4D1a1#EieuPp% zpjY9(KFf+&uocqOj{uaV)O*@SI)R()Q!3aEYLkL6Ea8b)Vo1C23IUwIG^vIOj45h{ z>Wx+MD>xCMLrJCs*fuTCY}3|0GL1u}!XT>hf&z5St}8kbKYaivLJLgsMAFh<4WFo$ zZ%`q*_WCj~lyrYjvNi&+Q)8=ww7_{R3NRWv^4@MAIz|F=WTpdfWG&2?-JZB`8MO$v zedxd>^Of(sjkHI*`^dG?(+tnqpKM4MAs$x2{`sYZqR14kO3BV!y{fLk*JBC{pB!7# zKgTM>i&_4*kS} zwb({lDT@Bbe}`G0}S{|;AlQdZ((>|5Ob!=DlwnRke9 zj;9re)6-$#vzjBwL(RYJYz()#qk%rVMEd-J3>>+^ccp3>i-}(TsH4v=?H1qSRBWbm zICit(ANA(T|Gi7lUV&S~IN=hQ8XN3BY-jCyY^AGyPxKvsei~WMDfvdj^dTh_%ifnt zhxVIHhx7(}O=yrA(X(!-~@F#{io4nM$*jmX1nx+jp*5LhXJ5-?mQ8 zp-K1dO^(MQ5)^JVIq8j{%7!p%2o6h#Uu;{SIMseHZX7Mf+zVwR(ieXpU1ANcdQ!Fy z7SH=9X(l~z2%*L=aD-_fg@U|v#;XH3eQPc$e5>Cucjpp1m-5f_%Z6~~zWEEQ5@%6D zB(<5gqFEqnqpBb9NQKgWZ?+=Px_$49&Z|aJ|M)Ads>(L6Sa>q3hPis^E^)XRR`8|j zWW!p5@CNzk<523!!ihKNNWPobHU72Rn{FlZb8Xq3Gs+5?&IgQ;F1^Ox39ZLNV0sso z&r-y$DaOcC>yVoA94Ds*_P!SyX)qtH`N=@rtiB|cw_g-NmoyFYQVrw_t0+9vm;|I7KN!fJKt zR-&&lR(x=xI75DmUjM7ObyKjsI=`rGMe|wTzQ9>ycu>F7eW`V6O1zrHmQ?n0BWlW1 zwklwGpa!sd#`7qVZ|fKV%E0ZuML3%O@qp71BIPp{o79m**i5e_e z4>$r_HwDA5J8?k%PNQW^C0{AIgC%9=)w;*^K)71LxbR#Hac6BJo5HaJ`;I?EGRKPJ z872!hOuAGV3RgHXM{T~!@V>B>Agaki${pEdlA!D-z~^XjGfsDA3w+f#%83B5m~uY% zJy`as_(AR553&zl37?kYw(b@KSYeuK#4>L6%6s=f|Jb~_#XN1rM6$}i z`7_qPNA+yfnb?MH5SXt;@5LS(<}J<*P*d95Y9it*b;q-eol*s6F&z?dDXd_D%1tGH5jXCh z2I1by3MLws-#+B|{mv@WUs2wzA9<-=Vct8?=~~T?g0wx6 z{cHc@=B513q3rR3*c^KGe@yIwqdrR9Dz8S5cBD~V*R1O+e&T~93?~yTAk}Z_s@!t* z2T!QS8@=Z05-R_J6})o8VxRs@z43a~?e*+~pbFOGi?`?Dw80fE8jT1kc2nVI;o{|x z$lc$JEoRNK zEnTMw*E$N|a3V>XsgO6)=)ThD>80t=ZS=`nVT>Qh3CKQbxcQ!F@KN;LAzNKS&z~gG zBd05QQ#z5{;9pYpkOUjSqU7J^l}*M$8%wjEDaOS(bKw{{lB&^A5gnEh6o2y<17w3H z(H&y&^6s*A>L2L!C&ZDVkhX0B481k0Wciiz9pc}xM)lbHlduU<{0X!FY;E23LkD)W4)4P2m)Wf#*y9@;*NDYvG%tu8BET>1&p$&{%E#G+7_;_NOw$lyyAr zf~o-Edgs*-gx_ODri9=7lD2Yc?NslIdRN3xSnQC^H(?sH`cwd;2u zD6ENUV~C!;r99|z>46s- z8i5y^u}8-X!mdKrkd%j&O$cM;yFYg7HoET|i7s&TAAeSDt&Vsb4R)InPYtA@2h8f^ zE|#_lv?SMpf0Z6VQn{cX6YzDYi!ab$Zo?d9JRhnpNOyCA$sN={V`YFOxd$ha zVWc!>B2t+RtVMG8Lab?taY6_d&nMB`^MewGkh}}#!_RlvZTkwd@}i`YO^a}DI3Uzd zX-m23s0Ao-f4^x<#2BOqiy(rp{^k4aAfuxS+0qsFg}5rdtFr~|PRnj#=SPRV<)70s zV4K%;P~Dx=?cm^>TWSXisnL1Xs#Tk>D=VTykGw8tU~u9cPwxo^7+qJUg6sMzT}h$- z@gBJfB6+>Ft~v8_Ds?vsns}3(oA!s_HX{FVg97<@;kTCPu39|hhnoB2Xw7kPYa4v+ zf zTnN8i3-?80hA8)$57akJYQ!!1N}%bQ36DXb(#3yYDg`Bv{V50PMn57W8axBy#|eOB zQ}kAL+7u@+&8lWPA7+2GOYMLBGwVZbopJZ5`22WUw5NlvRZA#v(K7jS&H~L`G!;0( zTrx8{I6LE!?`YAG8tPR?l$;qD=rc?5`}x<8yHy!O+xIPEiBdH~nVWmZhg`V+d?%gz zZsRT7IeYg-b@lNdeDc|pMLFAsh;i0U?;3YH(#o<#BQZ5h|Z={3KRPH`bf3IPJ67z=YdGj90BNNaj0D6 zZ-M=W#<>~Tf=yjDZ)i_|ZqsJD%p9COY=xPR_^xku^eAO_d$(+wT(nKQKKARze!}VX zl|JZ?{6w7T_)y+goPZRAGXFGzN1qa|56jxJF=ec+i9zYwV$$o9i{eoOlHL1T7{6KA zn0`;V+QP@Z=^wjqzi^_%MAl?LOjWAg8QN(B@C|sV zXi&6`gan~Q0OfN1kg|W-NqlF~-xE777Rl5nr~;ur2>>lD!h?cx1dhHA&J(X{a4Ku( z<;C<+k~F)vY;gPOTDOO2=fjA|s&vs0S2vM67Ilob3;W#`@V18vM+ zw+|_8bk(L9NsLX_e=~!!uV7Gwu_*$ANvMabDB@3$dd&vnU>hNu=Ll$L=)wOEI)FHi6k5Rn)Z~wftz@jDyX`T)r1)0;qLK z4hpaL5x?oZujMH@c)iZBs?*RCQi+AGOv7H=z2`B25rMy4BsxAt_Q%+WTdjUTYF{gC9wGYD4+ar!OU)BS3%#g|XEuhnn?-&(?O z1zE6uM4$>WtboR0IJ)^{8qqesiG5`C>+t`g>no$$Xv1wM!QE+bm*T~p;O_43TAV^5 zEtKN!Uff-Z(-wDkD^gsFJ2&6?bJn`+-hZ=_yc3}Q)|YA%Crg^0I1v%2xJ3I^t9 zEI7z5ui_)oJic8vxpu*)*)FAAM&i7&Y)6=4*q?NVt;)MDqv}-8_QUE4*+cCiXX3Ct z_7CA`H~_2P@#8#8sQwHOz`@r$0zfjA(6~@zLX1J)JkM{r1vHJYnXoedAp#-rJHt&p z^sJ9$kRctNT!PpkVzsHr&Ck2=O4?;ijdmIsPD2VU5`NWoVLBs><}M%1BL-1Q`vqtY zc!h#oFAVtX2(Vczbbut2^y8h7i0d1|a;eTX?G|~zhmtaRhtfO>B=CV}Oe#>d)|Ove zkv4Y(24+Pkd~k$nOfXt4QwI-jZ2&Wrk6y;4@q~d=sDJ?rtcafNawkCA&;0%Fj@Gk6 zPK;H@-QsUC_hiG|iuEOowVT7E>@}|9w#)sF;n(Vbl$x$+A<^{?EQi{E0GrE>-v5gYW4MkbZ-9kSJUN8|z2>{q&^AqfWbSnAJIK?*#|JwYk0pL2)L+ zRc-l>9UlKFkROO5R!Lr+Awp}#au2Vs2iP_;ubu{G)Lzkn#Wyl?mggUZ0HvIpX$;fW zmnjkBDF?oQ&!|_f05GZ)XZolY`z`zsW+RxR7^*)P0Q5{pW=pRA$$$UHrRq-r6DWfyjvfDk=q2c1nC++V=i!z}h zNKwigLux0Wiy~Ql8r(C5ZYyLXJ`&tebeY{@LjTNTn5fl2!C<3!A*He>W1f6jm>`*{ zGQOlRm-Xx78gRS#J`U<3{~Y#ZpHuHZ^wwOi71P!@;7nd{gB9+{#N(U-4sdGYgbE!& zzz!*nY5aIO0R#Y875x-(*s2epq|eNBD#5=S&Ia`i^FUF6w6?(6Ui^FyfKm`xq4zAZ z&d_qV)6AE{$4F5f|9dmLcmVTgly!jN3adtI1ro2od7 zMEBuxP4+8Xv1)T0aB$Ezvai0<3;^ZGxk=qPkVj`<_X+XVJPtu=T5%=>E4AgFALM>8 zTYcKM20Dz|;|hi%hf9lC45L3S1!r)bUdY1C5OaT$z;I>praE@Q|7h!kx<4 zU*FDvun8NOXxzWMi&HV9BthvRHAt!CAx8Gx!T&kLy=o;V>*zY_vmSr>=)E&bEG4c- zY14=B_%efG>A%gz1y9j{xGfs9ex*ojRV0EbA71ctPZO`zklGzwiw5ljQ`gyAYbNbr z=AtNCwmWu}%zNJ0w_}lnoZw+5E^HnY&v@?oM+j|^N-@Fssgh?0irGC|Adk3*fa2R< zm>Z!IpHZFkZHsuL3Z6w@sM|HcPSSMKt~^>AzXZvPg~)DOt{$InCjD&Ko|As~4Iowh z$PNbj1BL{m@w@`Q^E-TkDE>k;R(+6@^ndB0zN8DgCfJ(C9$fpHnhYezQ$Q| zBz+gv*_>8HUuB@mA&PAS)=jl|jL0h>4$y9Vo+%1GnZ_g2CR?@1F!w(jY;BfmGiA^h zyNHXC^M7Mplkj1MN6N=q(sMQCK9~Y!Ar#RuJnkW-$vd2Vn>u$k>zv!8s)*&}pN{BO zXc$J~&}qu7s~85bC-#U{(Mehp09zPUg-E6N7>UF{ z?;RZbL_Pw$KK+2Fk13EB0k`d)%hQAe9c8nd*?eXMen=`OXW;>9&GxT2WPfv#nY8Xz z;d;)$m;YEf39lY9&nOu3oTTuu?jWen3&y%+29T3O7zOp2QGV>060ZIg+AxbLBm`L0 zsda_8_6HGHXTqtwM-3MB88%iHT1>d`Xx~$taS53+NuanTWJ z1dc7RF71~1aVv#^WdQmg#Wb-_fe7s#yJ7*jotfI9Ncx|Mbie582+i$j0WaS#5Zn3B z{+v;>YeAI+0zg1-|IQ*Slb3-*X1{r3Et|Sy)1n0&hg$V&t}CgR0-E*#0;L-^PRjS6 zv_9^`i77B6wC#rf2yI!$lHAO{i#mcljYfsnGM4S?z&C)_-w!V)3H|AI7sh0%>G#4x z9Es`a_JhSG+-EV7<#=D$za7);;0-x=WjN7@F4xu6@c`J-+|4If6rA9jFEdRm-&*Y5 zdGOayd4A_ITDq3Eu?qp8eoQO_ci$A?SBygvU6A$zUErg*eBa--@w_J=2PlyUTcSOn z-$cJ-QQT%5C5%rkp_$>`ns$Rqzj~1ySJd_3`k^yzhJ3z62UOsU%8@BanDt&$zfRxe zIz$__zIXv<>+zh@7@9hN7EXTuHk@`9F9B-*$rw(w<;k`b(sgBY1Hgd)mwlqRY2@n4 zH#5$&jNL?M&zX9s3Ou1;eucq5w&2eWS*v(J&q|UoWdU{f{3J&PRS*lod+Beo4EE&<{tq+yCU2`E)!w~fwtzU1PJ;0S+=@u_ zWmjzHd$8v36ugv0Ys8PLL?98$`dRmjPK4T$P{H@$YBljDOmJJRSf?4>{sd8t{f4Uz zyi@*pC?@S<1)5n+$+3~y&76|ZRH`lDhVJa81lBl`$_Rd31AxMYYNns8XDsJ`Mt|M@ zvdD8-TOo&oP%QDYATC$%^>>i~8CXrJRP)C}+2-m-!i^tmz5eb2$JQf(_TwFFGM=a4 zRX{Qs)?dxzNy+x~)<(|An{X$7e)?uC{{Rf^#9={jhrHhRN^&tVotMU70tqjh+SxhG zz}=IVN-7);8&dzA`=$+N>N<}4c|{i1aeEi=1FlWHH3v3SnEmXf)SA6>^6}^Z1 z#Yj;5@P02R?Vvtw-aSC8`)dX*VMfS_G2i~q*8R8o;%;jXy_T+WHY&MxS||BbQhQ#) zh8_bkF5|k02MhSfa)$zf`IPYC^tUu#J<;NI?~?6fS*(j5gVi>9v5{G}2L-uVqa85D zBtLVlHH|JWTnSCgjAR8G6Yi`GJgQ(;!6bK3f=;Iy;SpYA0kj98aZ_FVL+4LsK&{ui zIKqK5GX-$EY2#8P=2&u(P_5rCfP*qK1O-%x(k;T(l*h`~T?J+>s+@4Mt0dwoc~ty* zQ332kwU#%FFMkX;5kmA2>CO)SAAPXT|uQ5cw(lQ!BLZ$zG#zx`Pan^n(WO^K1wqIZos>G;j^75JR zE=Q&vw225M0dm+ro};e;Zg4#q|0ze)J}G_m{%@NPcp@+b_7^l(H#TADC=%$2a0@>F zPvG|dz*7Hvt1Ej8+#U=kfnbYTM_}5u))5hG3;lJa7r~g0i{7-QHIWg~Pe{}2i{7a< zr>rW*F|TzVoy%*Xmq&OAl{B`hOm6A*1gXp?E0HQH{37lj29!KCGy_Iv<~cHT(xj8> z0~k`-ow?ao=*0Zz+1@m@k7`I^o%&8gC%jR+nfvv**&}OVfVs2XclEBfQy!i2ps#rg%zJFl4`S`-VM96kmU<{eo0_RIuPcb#KWGzF|4Hly1#Q3@Q*KHasVb$v13~^Dq0j2w-b8`S0BQhba z0R=s^bm@6FDyo#K#AA=OU}!+#7z{k|k37=?wNhgP+^rS~`or z`#UYr9UV|xn>BFAjtJB{eQdCG=uL$K>{INfv#+<09tl#88$4Q~!CR7`Bp^x<~41IYbWZLigNloIoa*O-3OlfKuiF2SAmh^;}eK}8%yk5 z1A&s-(99q!_LUt8`qlbJkOE-V_Wc&xxwQrHTZP4MuU?wMQt*VPR^9ol{)QO3T;$*y(oqbt_Y968UA|zF zzKeCF`b2A>pu6X+0Wv$PufUrcCy|>gt8e}3i&)WBmv&=jG%2DgfNDb;-~ozpT$IiD zluVUAmsneoQQ(t}3^eJEo0TX^k)8xB{n9;ovF{ZVBnR%wfn!FN^7=u`%fH(K<0Wt% zN9*C<>aj{Jdj$-(!nPDSKX-r0`YBuHm=q|Ni&EhD-;Y%XVgaQJ=b3Q}u+$Sj;9=P7 zkqmId7sRx&6e^PB`o^-fLUceAjoSf60!rSh%f5e^6=BX?&m@Vmojnx#nhOW51oevN z+^?hQeza>0>EHPZL#Ipk?kj}tL3Q_Hf?aS970MNy5*+$x%%Hpy50-#12|7c@pk>TI z8T5yxN=u9k{o%M&mg=jYcUkjRMo$ZAvK1bdP|!U9ejGRkV3SpqE?4SCqST(LZ!Edp zeDM!RRZ-E)&`Qzv`%`kScN+rq33Jf-K`UL(kY7125#u`Av+`U2Bcf!dhlK)o z4|ZTqVQi7bdClWIz)QJ6Wx`G+oqvWN;3%R=yM|WKXYzC*fUT>saWZY|`tk)(PlmR4R55Jybw53kj5r;WohFYJ~>uvLtm1$CCh|)GZeDuH37Z7EMapMs`w2lY=l02 z0#x-3Im_)qS=lief%59UsC2Mu!7m!!=W;()Zr!%K!FmqLY}E`B~Xh($juU z3arAa(nQpD#8ZjvwQYPeK#-H+wGvYtJ6E<&hR512QFgS`Da-~rfC_$J+~TX>0ZXO{!!tepBb zmCPG#KIy?h;vk4UI`x$z6SQRO18DQMoIL(ZM82ll>O@!Vnt9yYX+0ySX3!mzTOaS# ziSHYt*~6Hx*%PPo#s%Z!gC%KvV91J>Q)Z^S;+f3)H0YTwPI_W@i zV`Sx6G3;Nn8mU8^w%);tzbxAIDvV3*pGR5Psnscz{`Oi5nii^HwOh=0zFhNo|Bhmy z`)idQA6G;|$`xtJMd4zN3A+gHmCdSF=yx{ZEHHiTL5?5v#4)N{gLE2IcFh0MRUhv7i8ZXdR_;olAzB4|G|p4Kf@sk- zxXum{jlI*=sYC)eCKt1L^?kx?K5-|=64NtjS)Q1|3;S$|wpUH|nHy8+syRD7EMLOG z0z`+HC>%!LR?;-2Zp+94hJ-U!ky{X-2_~F2wv2pTIsb+uZ%p6{8<^&(e*@GK=9}8A z_RD=2tmkUTqlBRoCW@jz!Z{)P`H+KSq;by~-XePX%U}Sa!dNOY z3WD;Y^{9d!y+`d zS^b^}2)P z`CDcXA*d&Mm@-IMO73@cnwF0wG1CYiIrJ(f?29SQ zBr}EoE(wsgX2RJ!EKEfFl?Su+nH88czQ+e<31)2cSxGtrl1kWfmyJa%;bH&0_XA}( zwc#wMD$Y0A!fI~{Y>Z#tqY2C39#B7fMbonSn1VK9sWE=2f_lJ}PCu9~_7TmU8oXKd zvh9jf-y0-lFSx3C@xyY{W|D{D#kiToeyax!+db}!tuX*lJ|Z4xSt%Jz(df>WtocGJ z=~+_G8~M09T>$!PY9BQT4rsP-IX;nLXjSN^t4b{{h1GL%s~=TuwkeyPbQ?ep#*E+~ z2B~$#oSBGu&t)Xo?z=y$-EV_i`A>!XC=CZ_Jt}fx8H-)^?YQZpjW-{U^hSS@3|9d4Eo69iUjRE>`~{TjJH;OtNNb#hhjZUi7#BY_9fd1f&O8|(u(tlIW;60F7l}A%sY5z+?7GkOd&Jr)^sgTpUm0hF zuvFE>^2NB08S!@14d*(gFpwr=H9=uJK>{AXHcdv0Z^K5`zo?(H0!6*3Hteb1%#Y07 zoFPJ`l@qYXmf37xEQK)pnp1g6ee7CDfUZ0zib2%E)H2JzczFGRL`B!X@ANP#-jpfA zP8GrvN9Insh}$sf;0ZB9n@hX&;*9{3V*aMoj6iT_)GiG4SZ<*Hk<|T^4XcnHzThK( zR2v-%h%(CCua7EXwRPvQ2N)AvIBberJgIG!dp9q4wa?{z>gU>fRskm2V}nrrxmZL^ zQJBHcnUORJC)0_+rx#IdKjWrxPE>bII!25G_4R)`0W#6N(Du;?CnuPZsOA4gWB1D! z)aqydV?@$yr9bS1Es|ybH0Rv0S<&8j*I9j}3QOu1eSs}wMb2Ag-ZQOl3DhKeNo($; z{GSI$7d|XE-cX^Quvh(taa|uj`0R`nXMD}$=#ONH-MAb-;z#IidoDKKMjDo=8v`H*g3G> zUfEZxX*0SI?dWp^k^qCU9n%TB+3~7VA2)z=54yi5!T`l9UY4}^#9mmd&dcV`JoowL zjt&>2Q@&J``qf?(7!RW$(pF!*7_%y_5zAT|*Y4Y^r*Ctts+N5Gu=|4IW?IIhm zy^#>bFAUP%m_XpS&5zX{HaAN!NbPafz5DvPibEZjEZ(Zwp!DyBIWt*kwiclXE7umjpqL>yH&=sf$_=c(fLcT0cwZ{ycXG4i{T z`ta5{Ax01p0v`=VJhlj~y9QT&N7pCwgLSJ!)Aj0@!Ll{H_=&>9VzJN6s%<8<=d|vh zvrY9UZy?*3UrfRWk9$tT!V2YZqZ4IKjWf|9k#Wb`x;a8I&hTW5N?TrvA{vajH$~2s zl)h~JX#{Ny;hOIR^6M+UPs5*3xO4JFDZUQmN^5V#7rA+e0vkT=R(Q(Gkh@)=7GGbq zF>B!WzL8#+ub0d8=ukG@ClFBS;2~wBDfr6a#PIk$A(lxq{rYtIdN_Z_XPsZ>^Sqb4 z7Ju(LB+y=dBIfWIv?BJ}Tgii)aKq+&vy4;coL=Z-P2=F&4D8AcICTqQQ<-^7gh?uc zIq9<-$NZlD6c4>`jcUPz$QgxjW)vq->B@q8Zob@!Tf+(o!D<4|%qz7~g>lZHeU~=w z=)TfDv|dlI^+Xi}#D>-#T?(IiOu|R}ur?W*gO~7<(-& zGk+1(fH0}Ev>ep^&h0OvQZiu-LxDu9OO7(PysX;S{Bo-U7lB%}xK44zuM;3B)v`wn z)kp%y?nY?XO%k5q%i2Om%S*IunOsxXWa;0CJiYyDA2WK3g!8rRb0te9ys!U`(R7zg(*PUxHX-?8Sks zeGEV=!NI#!&m@aFpVm!Cd#&ugMN>+ONm=S&jeGTDX3R@axrwn)qQ-ccCqq7C+}~hB zQn~L#hRz1Vy>8Z-Tz#Gy|FD^_l~fv=q&ibS&WKVyoVe(Iw00g~BX||GGl`;x$O=yw zW!Z1bB{?$52Otsnxg99U#n9-$3dBeh>3DpL=s1(9YwuTh*M#8$OUhmK5|I8vffIN2@o$nm&f3(4!_L^y{Pu0?v$=ezcEp>h4 z;wVsB3zyS8(-T^C@VNKRj9Iyrm)p%IB$OOq`yg%A`yg!}Uzw4={-;4st+!LbK@s@p z@~I=QQId9oC1W`7(MnlIdAFcCuHLUCzFSA_WWaj`-Zx|J~<(qeEj^%ZN|m z@*=^C%HmIt^|T5bA-wXI`^MGQnp2Zem(BZowm7_v3fcLIsP9Y7rIz(pd@z36^tzK2 zZ`NSAtUM($D-KILgMT+ap)f&CZ%kIe6AAIfUv=6<*OF0XGDhhX@Hll^%jOd4+ZHIt~(0w)!hvN!h7?}A`$Y+ zyXLCY+~58D7xEF&8$-;j4p+Za<)b6aheZy+(wDXFZ4x~d49fTCbRg?= z5cC}o=a-lmph(Wq_(4;;K^$~0L*Sp%t5S|e;H>?nH`;EHwzcP?HUSOLBiRsNH&7Lx zXCr2}{>qw)pPD`RyFX=%c*;;^{0;y7H{9bBU3Ic#mIOg_zZ-x2GF40?F!WU7rfR&_oM$68U64Pflvsf~Jl%-!`Z&`gwp?Ng1zizXI1K274Xqto| zJYfTsBC$UrDw`fL$@_9QnV{uqdT&<*AnoSJ$wx z-XP6^M_2Se;jkZ!3Bvg=4%dwPnk)LXcjW-5aRcq1ez(rnEacW4C`D7A?bVqT4qic% zqRHlK@o2pr13~8D+NS7_m5L6|$yl^LvffSnPM7jYhtDt9-OGmQLe2FAxWH11PpFlK z)nB5V3fX`ZCz%V_OP<#Q+2E30UNS+_5CPS$)=i^dUfg-nKi{@FyJzP6?yf0|9E7J7O}rD2<97O{s?Pl}SgA%iz3dn&93 zNYBIea$#eqR0l~+tx~tCQ!?^pXbJ1b8{t?k1AYcek@vq>IAdp;(1n0IfJj29U< z-NX2=o*9^kAwF;(L(j>(&3nGMSbPrnrwW4DSgaPKaS63c1#YTK;I^-5clKt1AQ!Fv zh|Z{P#*~_v=m1DL-|loc-#5pVA^|_(^Fz z3JEZqWCjh5SY_}DO!nUFiWX$tneiY2aEn*~_dW_;V19sL? zelO|xqHq)>jYl9=F^IGc#Z1eJf)T{-Nuit8nKlNvuXR6I+zgR?u{~Rw!@k&9o|_)kI{@Z2Ky|l>F*KyftNC|c>QGK{1s;fo zJZJ-(UUD=}TpyNHUg~hum(GHCC9i^Bp9+rVcU+&KyVTDcK`)krPkXsR?n-s5FRCuD zEq`)fwcmG`UOd?Edp{2=2-e6Gn8E>mWs{_U)F)2^Ray~ckXf`hFSlgYn#I@@6BON8 zj35=uzi9ySo*89f4g8 z_sztgmA`_XUY|-b2tq>CY7bU*z)T=^>~p2AFZevYI8n+ns@-nnH))fTr`vUBs@at%UhVp)VDNfXyQHP9dqrM9 zkcm$Y3~gQM{55m_C;K6!cME>T>d}m5!A@}jFe?m?bia({vG0+|piLv+)q7>%yTfNu zE1S5w9=KX)frF+9g9b4GQzPzXQ*_`Xy85!H`XBnf{Y@LaRw)jBxPc(W!5>!KuW|BU zs=CR9=3gTfimhTYMHluk0E)IlMChBydn&xmM5Z3m81GkfWmU`J)-~J?3$>1j+2u2 ze@4ue5ozMJvrGt^7IcGIplGh+gZ%kdc#h6vtF&0$Uof1=&K|@F{BHHL4&)fPzxa5(CE$!*awFmiB1o7U8}8h^6K9U*hM%Z^q0SxAG~X9`W+Lm8T`#xE74k-docWvhQ)ue%ctr)@c`c?h{?#X> z>+?u$@E=?=jqr64HYt@*%ttTR0{4+5dGOa3)>lLe{F@p0`)=R@_sfAwzVyEDOfVP0 zG&KuQqcCZeo7R~KbF5`0j1N75mfx?FbJ-@9)3rYpi1}9@;suF<0psSZR7GEG zhSMZk>hIvMy+J!#Xh1uv6>Mb7Ot_pkRGOU?@Fig$75C;gDoA9iKuWCV&D`mJY-B4N z{rv?O%!M>l6V8SesM%Qs5r6QqGGNL2t7Tx=Ri*uPuvnj6Y)L+Hb`f2g)7k(bUN3xb z5rn)a$rEd@EQNaCowl5qUU~Gr23BopI`E0FKhu)#&zTgQ+r;w+^`4-uiM}K$tvB-i zn7|D(e#4ftD+q{&;Nx1$Qc~B;TKh8OPYUx(5mxvHe51OMZ)>|V$)u)kdd~mX?Gvb3 z05lPutbJE-FlZv8Mh#3(BtO{G$aZBMabOF|X&!RoKfpS^eBzxybg@-9zSg? zfT1CZ_?Jm(4=OSGSwAN63^(wC=)r=8 zFfjxsWQXx8V*tm>X!1Yg{+z~*dkC=KwZ?(OrNG^^MrCniZgUjaQjv7jt;37!!%AP5 z%c;gcsx-XK`e)I2TpS;7q?m;~K5*VdruZ$DIbRTwdrw<2qH&JT7(QN8hyd|>9Hz2Q z0(K)0+R1iMD9u8?z|z8GjYbUVaW%N-Gvr_Qa!sP&W+aHR#V6$F?o}FpX1a0u8pX5U z$*N|!v=s_Os~j)q^o#}r*V_wwU#(;$KhZ7eBQ>qMnsw+md?{LUZmat5Qu7%Y{NC0X zDYRMP4W4FH`3OiLneCEPh12aT=B=K1su}S_vXn({3W##|H`lk3R>`=6AGZ@#Kho>K zr8XLqt{8M}BNpngNKv!8YhPIG*@P3rD=G04YIfand zkpM$g<(`;(%`w68sEMcV)DV$>d&Ho_SP+0N+WWN0i_w{Fsfr7Yz@ZP!QOc+nCjvK) z^lGUPya>OgMv-jH0)RKI#tHZU!sfS5CkJ4=7y9EQ9l7|sY(c|&0X%?Ij7E!Y(;w)$ zHu{%O@F~0_gpOMCi)@KdvSVIU0*)KDqzGl#WVjC|z%DdZp4N?ST2Ick_oY>P;)RM@ z<7P=L78~M5?Q|p17hU)mjB}(FGD$U?N!CeWojEElT*C z6?KngmVIwua<*um7;e}`4Jb_?=YSwPH7!u%{Wzh#n=FR(dGHDxQ0idqRiWHXd@9tO zO9UHHKTk(@QAq4t$^2z!giUcHlEW%F-w0ueH?lXJPNM++3Rtf^rq;uH88KZEK;NXT z42>xdxSS$7Zw`s9O%j+&`*5^}-ZP`)X-xm45PZi)KxySx$<$-^XBVs)MqLDDsGpSj z7NWA~_8sg7J}ElO!|Jbv|K`a3#eV& zsRSZV+%61>^vv6@OI9N3m^cT5DC>-QMy6gSh&vjpdn;PP!3ZDU7a$k7BzW|}yai`;3 zn7}U?+PJT-*_9Y)s502uH7u8Ck4yl!#;?<5asGtwOo_$&p__D!spCyv)wqfCFSCGp7e@QsDCYpPN8Xb@8_`UJRWdo{qTrS>C5yt+HpZ zmzul>bU>7a_99yNc30(J?=Af()efuLsVtMJ>ZhlwmFC{@9m``aVjwilzyX^kP+uQR zehBx!#%1?6QMJNEQEu^0AGM_l=MUALK|PMt^>|EFQ&g0prE_~k`E zp89XZQR-D>)WjfsqlY5H;T>jzyc3ZXB@+j4QCKra9@vhSyl2mO;F=e)8TILUV6N__ zkS``^B*^&#CVn5uV!(K63N8m4BpY_|yov9sPL67{3LVO#)1cJ<7eJS&tEECda68Kn z6|{3)1lfF1Rz`X@+dNw2GErfbJ1NE87nY4D2 ziJ%Q>+qmJs(Blzb353b2-9Uzj&!hD#2cE09ji~2eWqP;(MvU7Ics198qzd|OULYL>-eZYkw5k&eZM?Oqzn7_n^rQn&1-cXa|aDW4YNjMY%b~~Ull6~}G0UnTn+w`pzIar~E4!HD`AOL+QuitP# zKRfMSxEfu~*C3dEKoWRt(}+QadU3J zpRL~<(XK5clc}=fA@Tk)7HH-niEOTFdSiQxjNTFx{$Wo_NRD(@IhhKe?mWTFVj;3dwUEI#K`z@em_{Gz7S}0Y_U|E5A!clq(Cxq-ofIHU(Pek z9M=g*GM>vuvY9@CfTv2dMqQ8+Mk1;!mP}fd7>2bSUR7f|EP_gd#peLOWE_BcLqx$) ze!KM5c5Oxp5gL)mf9fzvuPi)Pe7m21RG$^hh>dq*6Fz&@eoYO**XVi+^cO$$+)aEK z<2n#k4HC-(J2@fG^Fz(wPa-M8vg%5iplPK*EOp`rE4HT$gq&U=6faPoL!tnDWjqQV zW?pEd-DKAS4Cxo1=9)DDN(7i^&Cx$dlsv;)s`Ph_=c?cvtQKz*xF;q!b&egw4v+A)vPCv_TV% z5LtwPBOtv8)Q*CBWXRUYKMyYT=M;l}-n=0YR_@97QuVg**sZt)cx4-r?JVj7q3nLN zBjdpf`g)q9P?x=WghC%JUHKpe0NwHh3^*9g?Ek6QI%{bMT_@6Ia30&?K7(^;-JjnAgY;&bq`*z=qE@#a0n-O0Si&^EX%9@~B>|3vYFKj`&yA`3e}RMcz%t(e59QH|1H9W>4H1wuYNnn& z@vi^J2YaOBzsuQ?E*@FEtEQ8WQ&C8!-t9<$o3$c|2AoI*_-RSn(!b#Rq^?}(`$_B4 zH7$F(W|9s#VC(m~ys2%$)9MU&A>sowKndyQdXZsTKE3+=rg*^5M&nb!NBD0fJ`B73 zXHk|8dEH=u`xnWHD>+hpNBfp)z#@q^!!9-24lU0l?8yFb+^q~Bm+*ic`ychztpNDu zqOoB-8^XgN%>U{j|Non@Z!FEn*3f0Giw061X<2$^T?aRWWy6Ovco!#o)N7Ntt3Z9O~K9P(~AF`*TS>jfvp*W7i z-Pf?3E^f4{e8ABxL%kag@zOj7%^K?Hh{-Mf{c?u~7WF&)SAXhT@3BOecV#nJ2`kCc zw=r^bpD*d!t#`;_m1o4eBi>UMkBB>4xWc1$cYk}LVp6o@LkB9Uow*BaS*CA?1?#;z zKmj}tV#W9CyS>BeD>_ymE19)FA~#$0o#8^WjD9!?+Ke_`=i%M6eldA`)Y%UbuJDrVzC}qW7U#(P9{L7zk|WV0wk(hf zws91#Ow%)uAja>C5d_LT-&je4_q>e1AEBzeMeD?#%Afg>0fyRy*&_mS*d|VZ@w#!r zTpKBry2jyQRCX@_v?A;p<|RvXdN{voAhA<>AN-%9kVXmalkik=0DR@Z^!_ zQeuRKs*si(Xs6OKW$R4N;?Zd<{-*!A{Pb*MWtgI@>b)YM+%%?dj}Qa5MFUW7+7SR# zIV-G#f_;tP9)paaKU-@CZ42ti1{U3u->+0;VFt&O5OzuulEkkC8dcn{sJm5E-ORM5 z*JRrp=pe9}t|Tq>D*b_t5SJZj2PQDJ6!Si66uXq&pVk?xb$%yN0!+FMC(%}m%%CfZ zxI{Q{tO!)u9NQTo__jsvb8-;ST~JeBVA!7G12Hi-Jx=Z5D<##HD&`%G@==y_{dew4 zG8VuY@ zyrV6H6t`SwuWBv3D@A-$iLZyo+;_gwi`=CFYBwoc0iI_O`wb40H?Ufki~$oK3f1Lotu zA9U;st6AkRZ+#+l{LOt0n_4=1P$v+WnEkEi8n&sQpH-uO9;BI+kwB6auRAcJvxq!F z1p=|YM4ms&i6Ag#D)>4fNsJ5_}72WnvtEBoW>LpA!AJWeS?hxvqO zSbqB;UX;?o4bAR9Spb^EbD%(AC_1Qs-Gczslt;fneuu>I>Ypx##{3*grUxij^9bw+zE>f_7n&O6*3^tO5(R9HgUa$dmBTf@FaM;u%D&-U4RvW6Z3B zg-X``dlpN$8o@G%A+to+ zm;mJ>l4MhZNX-&&guG)@9J3q(X~8JVN0R)lXd$jDL0kxm5CAE!{R^n^Aw!{I;t^#U zWi%E{>w2&%^Sq=%*ceXRMVkcZg9t(us{Xl8!u?i;tLQNKF>Ll>{Xs}{K`*mjbb8v-q6zWrcN+mNeC60{q{8kNG9RZA~R(E)35Obk?(d( zX;-jOeiicjBwNA%L)lvfwe>}PqbDJ_yL+J&cPU=n{soF_aCi4mq`13FON$hD4eruX z+?@g~T3p^dbHCgV&pUVSo=GNiCTE|WJtt?cz1C04Pdu@JxooN*p`Or65yLj%r=^<* z;JUc9=Kmu zJ7kSVx}cqgL93T7f`$%KMS*dLz9lZ|B&HmM<2X`||8o3u18EaiLKogSI=!1l5Nm^^SH*Dg=TpgGeJ>w?B&VcLLwb^x z9FU5zIZBw-#kZ)2AaH-3v-|0%%&vV&K&_>TB4-9Il!Qsdk9CmUXS| zFYVEU70f?+Bwis1IacmTjwB2tz1`v_=PJ}mYkdAHIn{;rePV!}7!S*qg`lVzg)$;V zRFUmQ6}*VgL`Gc(d;gQFp^CtM{PJIv7_Z&K$1%qoOYuziymc=T7IHrUMkxTGbTCfOrs<#PT&U`+CVC$fSnNQf+~I8Yc$>=}{jcYb)La!Z80ij2IU2zv8_=K>Yk5-B5{ z-m*Lq+jega2MCnKGSx=;?#iKJDVE@Sfbe~r;V?%0l(qsktuLz?XU%3+$h)qwbIt8T zQTin<*K^a!wB>+bgkY)mz|i>jHE>@1HBB;NVUW{ubP0Bn(=vQwh+W*mv-%px(X?XK zyS}_*xaGuqK-i;$1{-}0@Ag2_VU7cDnQYX!qLL-2){d*g}rNbmvI z4FG;PrIqlYIVh#nx&C;?3P?qTyXLSokZgIZqIXcU*|DpdpP0Cy`x&j_wciSG-1@Ab)}jE6?Bum8DrNuD z1cBiP#w)sVWQVv$9JNMr-!vqIF+@Ez2pBfn^F5>EJogr@5k6s)Na5^}dtn z(TFBv9H`K(K`sGDEG~%KhD*;)k@UFOeQ#U<)bZ%RFu62iI&~*V9IiJK5XruBE3hrd z-D(7|N)`)w#rc!t9xH!7X7{MPFVAK&DoKwI|0cFIt}px#0@Px^5_|p0HV5qU9oQTz z5$Czh2g4{U)pK&@oH+Vdf@N#zFmkaWOxEKQF03s3pz5lu;fJXH_LNbk68p&aCh$(> zNWaM&?z%f$B^I_S5n;LyW;&}v#VhmGJP+g2Bb)$Sc9hPy3dh9bxP|(tqJ^pjAxa~* zT@+7OeBg%OtrO{h=z4>!sj5&hxpivy5@+|QS!)2i2C zz!J6|Y9~h&;{MFHI#c|H&w-NRHu0Bqp({gAcg5NWb78J?QHnK{)LHv5rE@*`ju!|Q zklOWGLkFVVZWazN3~`LY=Gsb-01j5WrX}A-L5g2Fq}wd020G*Cs1x76V`z+5d4L8; zkuF;c#L!jip6(0?MiMpXd29dliWFkz(T?;6ccT3JH5TxB;oTz9pF9^)0hG+oZv!Vg zL+3<*Zxh75$Ya_+5plfXJ3DshrvM24ccI27yFK>muF!2L2)Hl$1p$Zola69XAc-1xkHEdZcGrU*L_U3MUNXI^|7vSc!^| z*c{|qeeZ2I-E0*_U5>fM&bWWvysXh0Ja{X0V{^-5&qN3%G4;QQJibU{OJ+8Tg10C` zMrJ%2ONB7QMupOr$4D&-;30fqT>qaI8th+v%opcQu44F|+gCI$6Ifs&`JG@bai%_+ zXyEMCdy`E(L30nhma4pPwX5(cA3cy%wD-P5Oh3X(CpIc?ukB|Cusy^}xS>UREsBf# zcjsfpyDJBi-9RtM1p-S*T(EbZ7F*I4p7ONnaj^7djW#i|mO+reV&1rUQaz&@}4CdL_i;JOTw6ypmFN^CQ ziapCLVg?HA=8$9=jlL066cMQ<=@nizon7XSJlD}-eG@64-u%%LUy8m+UGVIECMlAr zj6h3m1Gd|m8lh)~&@QE{i&`>61$9^N$~ux%hEo`8E4$okd>_am$SS}p${X;HCD6S% zqAOVv(3@v@a;&)K#T0~4((|LKm(g@IQTytf^>aiqt*U;11gvL&&~AmV8{~#_ozVlZ zl^CmwoDOosYBuW6U7kMg+y(d0(}cZhreUXBYUq_*A5!Mw8#aK3TJxTG9OP|4{~fpB5Ze(mGyjk zHP8GCvUJ?4Znp&iq|kRo6$ctqo#gmQPRb}K)%-0DFl2YxF(}3nSgDWBiMG%mOY|g$ zokv9X{vb3Fu0AYvAXXY#Wz{y_*H&ir&)eKfhHHN68vCuWUkxn;AG7c@BS%7&gaJUk zZy=nG*#+4M{|mC|HIe&jYLhE*`WF?i-ZX<(Aj}<{e5QLTyyWui_q#vQqR?9U(6W$> z!7X3GQd^r!*M)DD6g^|*PW`pp+d%+zS-OK(Kv-*-C9uB9ik}@Jek!BvXB)FHf?oY@ zJ(fVkW=2o1k8HlyZJ4$E^4E1>;SzSvBo0o65+(!vPR!~@!n15+;yscwlbJv_zJ(lYg-ktWjfANvxyB|Q~ML5LG`1mIhnwS zly}P_ZkV4bYlI+KwKgTUnZPl1y8LXhTFj*c(nWuP7wYJv|8EwhEoaIPozvy%M5e&O zqTfrIy9I@30-fK>r22eol)g?&-K>&UC>rx)uc${Y&mS-Cm}m6f+bqY5QaVf^}+pS>8Y>c5!w!Rk2vl> zPoB;7MGOSilTsIq^_zmD1aZ%xiGLD?HV&KhfV1a_^O5PYlkOWuf_Zb@1}VRx<0*}EQZKmy;id38~+e3!*EfaXsb(wccLhEwt%>`Szwhdvq)UKrBG zgSiS~`s`<6`&jtl8}E6n zDd`Ufb6?oVETi<2L5h&ka1rSlaI zwF271zSYyV;TosHAFNXb(woz;jjoCX zBzm13v=DY}$-6|``>YyKRKRi2|=M+5G@ z>|i#GO}|zf?bRPcAMjY5@$T!Yxg2b_m+gua`;hwyNwv=CwBK; zTdsqsKbXc(4A1YEVj3VxOOH+jQX{o2H}{}LV?jGokhKHGf8Pn|R^F1oLxK^^hNHclr^5f`wiVva=Q+e`31g0$D6N(wq$u(a_y?Z?H5cz1Vm{WQBI6fPo)tf zHqH6|W>FhcPBuJ<5?O-mOP5m!5?_z!fAjei5(QcMxD<#rmXt*5T>U2n7KP#<#C_)} zy9Z&MJ06!$-L9_fJ9V5YxW?EN@TqHc)32b<6bWz+`$IuUj09z?I#Kz(FzFxmg5cG$ zwc#rxbqe@{S?rSFL^ z1d`H479$MAIrvYbB*2tE>hJfAeXlK699uXp@=7ksuuXFp13 zt#5(2I_y!gwf(yWNzzJ*%Wpip>b=o`^nZ?EV8<$9s@h+EigYraS=>YZU`hLWYf%f& z_bUVzrhbZo`-4I4Pp=E}WZI`f5Zqtow;0sgXJ6+9of2S(Q5$xZ3>DQ&D+W7ZfF|N= z)t*W;2FO@y<+pQ2+X&MRHx_DlY5T$ml@xzG;kM=FX|<{g>i7fPtmUbZp}fH67kFUl ze^(2?K~U-L&jIR6iVh$>g|+B8cZcvx{0dx9(M2IPV*0FY;MYq_YVX6Vz*-Ab{%_4@ zx!zZ&(AS@zV#mNKK~P$3o{WRBZ%tj+Ay8(2FwoJOx%(WIEfVweTSU(B@b0#Nbn_=l zQr{ENb~pN3vVa}#PQ3)S#UjyKZQG0XE0%wg$ zHES%mR^RX4c40GSR0?AhRFBH6OqAK|ZJ^=tS{*XUXX#=e?uOW`q3Vzbz*=viGrW!-sWEH1~q>2Npfe$V)6n7*madO zQEtt|gD?6{ksic8Fajf|4)^ORABy-+iO`EAN13Bp6oHBF?~rcwZ~`I(f-eArssu!G zUImNrkr}-R0&Y7d{;dcmlUxvQTB5t}H{YvbqW>D1S+_g0F zkIWed>#&PnR{vRwnKRmWJiyoUTMo+^p%7RDUhzJ2CMr(Khn2sUdMYFpL(36;QZTkE2=)LKsXBXZ|i00X(#PjGn z0Gv}5Vbj-3f(fYY8~{aX4DOB-g_9pMy8y#~N%_+JDk~Y3raPDin=c^1Wz^x2OU`(1 ztghz>H0mX?iQGApCCUYBw_CfVAm)<#_1kjMVwKguVF zIJP`2rFA{8L52BO!K0>?u z?RzRW-QP^!Qji%Vp_Ifb6Xpdbk-FhBSvF6{iDw9%$7`Dlp53-lS8?JGh?8WBva zA@lb`K-}ecjF_8$cSbVR!XOv3a(V-L4dv#~?b^?4nfP?XVIp%D>8OwwvswA7!P>J9 z0Pnr47;liS@VTqEU{6v24>}BO-Sg43nEeJ|sCnrA@wNnj`(}PHLEi%bp2k_;gi&Q5 z>5qjS&b;-_>D4M30_}+0KQdg`2S_T;SXQ|iR_%h*G&58!B>x`I3ReCF-mKu z)wR~xP0gcY%PT9kINsr>BhnxFwF@77C6R!5J^&8~sCyGabt{>9;XwfCDe(*@{{zFJ z%44ba#Bx8;Ez-KED^xj?4l|2wHRugdz!bw2GmVUuT~xZ+6gVL=Jhc8bYLgoK{sDgOPXDzV7fn5 zLyVCRA&fd|(D`W9S<)YcNh+$LI4YMA;4#v6`D?a6GB)Y4dw23ngE~CumfTQBdj$ii zGIdZktL+>R9Vj!jx2zIl|E9$^es#z;g@54uqhWr z!0ba5=ZVTKMvqoQo8FLOzh^qAP-ekN4#EfEfoi6!dQMV2wg~karx^gYJ?g9>v6ceR z=pQR+%Tf2K8rrNB8kJV(iIj6oOf)JbpX$Gl;Cr50jjsqSxQQAXWgGpTmml}$H`NEs z*|G)^Px z3_XPO@4m|LG1-5CV=sI6tZE$i+mf$HCKec2@>Qx+izth#3SsSU*zT{><$sA9SzR*# z)m`Nw0L;Wh4-uOzK4ap=2`umtt^=@T-iXNy&R7w(fyDF0qVbH#&mi`$zmmW6_f$-{ zHg2_nR?cT{6ksW@fccZv$b33|!yr~mIz``6DCuSynr7vbgHa4ye&v1VSLC*wQS0Ms zxA7sDW@)7?QzQl=GjWR{;%@uoZo@zEC{8AuFN;F&cmTyKc|G-SRnaAhq(iJ)(1>&N zeErucOiH?{Uk|YeE!#iFea+;V@OrlexL%`i0nlsTVbYdJ+KrN>R#c#1V$^>dMN2H0 zM?xa+VzbHam8Yq;Mm+78Le?(Aj5T}1)%a%tHpCW5tf%iE;sG`*%J$_?mu#HR6q1i& zK|aqTA}XcWm?YRRXlm3^Nlai1A#54Y4~RDefIKhjcixuuSY)Qg4x9U-8>q5m++jN$ zl;{`Xow-PnqPAx5$gP?1KpHH-;tXZ6nF5M4WjwF?Z!LmX9~E%7KJ1S-cgfu={r1cH zW+NOBo{8u&-n(y|pAb2lrNjr=tUu{`4-WMu`cyL76aBKLZ-pLCrk6KWP5st)MB^?) zgoa1)uQ3g7^Xoutz=+3%W@~~Ru?w(PRGYnu4kfNyU{cLas2>v*mPh96QYlTdP0MlEfwAed!_{*4 zAxh^~ohTBF_0g;ZyqW}*;Byb%DxBa+ObqNwq+pEt%2ykt{vTG#3st5;0QOP zA>-yR6z-`XD%sH_P|+8?%ONQ&fv-%KOEC@@M=SO z^IQEV`2s(XX5JYe7yJT_S^FxvI+lcnrdjHHL*#m$fpsMFywJ6BJswz(J~xPdYoQ(3 zQigD+dlmVdF?BUYeMJyO9rH@tYB+G55^cK)&^}Lorz;{vFTyBXUmU>p{e!IN3~&8z z+1&A2bu{d-=rF{kH2I@gHmzY3J@kF4a4eE=1`xwnyus}%3S@cWiclY z?b|skLc~{6c#Xyb3;37g5SwxHib!v1p3-kGO$?9e#%UF8xA}y0an-h^brI8*`@H?z zl!W$Rd>8Nml6B^=OuakN`&{g@jCtlig?po!b!V&;m){*lqm5y7R`2B{jsBL!Svp5J z;~QCZ(HA{&;4ohyY|HH$cOyqNd(o*Sg~zm~JMU|)#N^)+Sq!9bBUyZt{V*JvZ}lPU z+V7Gm020_rv`PY~XbDN{_O$6|N5$P`-j${4QJhSk?*MS?+Ww#Dq!7vPi+Hu$rW0I= zMd`=UHP~E!Pr<)q@dt?t1f|eA-gwtwF)ZzVu+z7a#lHl$Ed& zT8V-R~7&;e&0Fk}1C|nmN2OFrW{iCwW56 zBt7ANh2yAanZE%p`? z3^k1lqL{Y%f_f6)W(-FNKdFl$Vp%cqC&OL6t~rK~5D z_;v#s_9;Cy$~i_+OL{Nv*~AzY@(V>u_KHy!arA#{&xvXEuNWEj*KnDSpAva$}|2>EM#{;2kn3e*+} z{U*^xrn)Swvl0UkBKA|7vkk!f(;+7Q45u zkfDrwAcMh_)TY-J;Oxf34|$be9E)EuH~~vS!H+nAUIo8;-OtaW_T@MyHa3HC zX%9>KHm1+KTh~ax@vbO~Ka6LUhtoU1JZB7Ej}9JTlo4QD%vaOu6?7v3L^yXAOByO( zMXaTDIH-H^4O88Zf0*`A2^hZDyvB8-s?6Ue;NR#4!-#W{hhI$GGb0##3MoGeokRpq zAW}&0)nJJYBie875oyVhQ?VWi{jZNv5%gj^BEPAo}6ifO7?RDqFiXK0fIOlTX2E`o`urU>SNumT?cYm|savnu|k}ETu5wl6f zE)QSR^-jh;-P`WFpyt!JKj)ZU zu!Y|`gZOvu$pB>!RT|p?X_YUZb;+em{~%=ND7eTUw3@q^6A#Zbdmw;$XmEQp7lU$O zuDAmYKb=o(xnCeFLlr71cAIz?x=4wSPKDZr;czfQKoVDGFx;X7JK$%S)uFrtEkh?1 zJb?LZ^XUXVL=GIX+v;RiD074>BzcJVRpTPI$%{rW=vAz;;Gp~-k3rF2e^%4OP+6DWk3hc*l=E@zqYH6G^P?%lai z0bELNS!9Dl8S>unw>vqR4pF}GV;K%fTb8#c>WeXaf*@uFpUdsYI6)KIU83@-rf0YKKk{@pb{2jt7$845mG_G=VQRl@R z^CT(O#kc)`%x@+$+CfC`uP5<*NN`lSRJ{rst2l|-aB@7 zqy8xX$goZ(5|q_-R`Ew76yMCzJ^c_o{fYOZR9#p>`)d>>Sr?@owU7?0My^MdH zyE-z}(!c&Ck^ivyBFD-FH}Vw`1g+a*adJ4QFOTUq%Y|j@F}!~GgYYe3cQ<0ke&M3L z(0-`+C6?2R0*^u07`5e#a(O#Thm zF1X*<+f<45b^rK=p7g9wp;--GXDy?mdycKp0xCwHU3T+#r+`O7<|bg(}$?uJv`VhOU2-Sw;(&zDz>1^Vyx9-4gNRoe`= z0A~Lu^C@hgs@}-hH_Gp2N10guvpf<`HzENXG;ncV%S0RH=!}e!>#rZW7<6~^tM&Z? z$+>#W5A+>I8wFyPxgz*Lvt~;b^}HoY9)kL4j}8|^6+o59 z1XQ0}cX0lcY(yb(f#Kz78w5q4rB{gyd z0$;;^`>S*%6|igyp8{xabg8u3Nyxq`nA;fu zG@dL2E%MReb3}kaIvvF~lR8kV3?)3+5ov^@O7~%wG+-L#j1wK2_0V5|g*jYNQa{l- zw4n3uYHN0?gxG-D3eJ}>)UT%0k;1%1+~sGl@2Ou~(FF|OJQ@l=SRhbXdHVAQ@k;Y6 zB>MJFL;n_vHyGGmy#e6ELkP9<{1VXIl!)|A`{VY__?K;tx31?AH^2-Tvc=$1W+(7C zfmvi@0$~41pJkfR3`*YUSlNzft110DTl$gtKb=>WRTf}Yco&=9F(p~67X{E!&py`b z)^QG|TD$z!I4?XaX?6KfkALQkyxm&cB1-*NKtABK9dzc1qUYKK)inYMW1y}V6(Ye` zUlua3TsnajJT$FJ2-C$^vKeyJDJTZ;Jw5+H7X(~~3B#Bwc^iab`(vrXz#S@)I<;F* z));*oBC+PgPuX}VmMYj?1VUJdx9pA8kN8BduKfe6R#}spzzWjINRV=CmK-Trht3>QAzR2JqBh*HUdiGUO znGEUKS@17aX^d00Voil}+$F{7uK4q5i-$uU)gNT&znjs0+HXRr@c^C>>Qa8gcKD)y{DG^`W)xQMyfI>7 z8gOkRrx=mM28#4%c5gGiXBIl|+hYQ3bvrH4yHrk)pL;03-f=L%>$}%|FRfQv`Z*~t z8oa_1Epl+7%}=Bie|izDfR!*2HXG%tiPef{zUE)3V=IXfOO^L0h^VM2;mXeQ`4NF` zKf`WhSOAK;wIc3@t{=M6J2+mJt2*b^Bx)9VFaa96&kB;vqHPG%| z#Sv4{j^uFn4M;*V%njRv8RU-daVcw?l377s-@gzThM)l6p?=63ELwMb&5fw@*A_AU zT(mZ*6|k>I1Z$)WB`?(aDLemL(D}a{d+WY$pSb3gm}_a&x-2Q>yL2XhffDyM`yT1n ziAtf)Ld4!~+Q$0~^i`-#@5#70jjAPQ*X}d+qk3v^v8H;+)FZ{~k<3||GMYjNu=8oG zM0TT(#tS*7leA`SbZs&ZnfCNj{;^zk{J#=)5}=AeSgko=ZD&hsNJ!Okp1IT1bdlj# zAz#~&$OS#XPRS6)Ay$lwfF;i`+do1C@NO~6uF)%>ktggMJO;m1s^wJHtrhntPeWvU z3PzxJp`Fp*PI}8qM3q5{J0ifD&;*8AZj)d4!jqB976m`ym*FIf1B^TM8gTz_9dt_? z$?+Fj1sDo=j%|fg)QG10MGho2#~`Izy)qR^oNLpBxk6+)nl8dAco8HD2uF`BOWQ?K z_n2P!nq|0+FL-qM=?O)m4C{tskztgX75o{i|7C$#jD^Djrxy-&IvsW|$q0CD8l@kT z@LG0Jn`uU(Z%IDLB8778;o@IEKF~G-BZ8vFx=>tbtkQt;N1>I|9y;>}mW+)6cHL$--21L+W=MUeLI3%?TWfUqc@#+kBT|OFPi=S9Cpi=V%ju_0 z|A$&HIqzYpOSNWtBY0Z9_CHdSOY?%;AiXXJ+1i*=Bhl|>a+c#rj#{YBaB@Kt!!sN4 zz7&29C_AMN8wBWvks^$#_7@%TJSGoloM`5e&Fw=1a$tHMhW?wXl}`RtCOes6;HGQT zCEe@79soi+S&i@=iqLd;0@4H#QC8x=@=UgVBaZOQJoi!s^B3Q}tKMn`ZkOjII1)7= zyb8*K#-c!u)9tEQhN5b(^@t^Qv+cqfag5bYf;{#G?Kvo8<`N`;{lAPGeCV6YA47ia zL_?s02;^9c$M1U^T|vYDwlkd~DqqFL?9o&|)ai+RK5`3;M<5Xhb4_iCA+F}3Omh(^ z)J!VGVn}*VV{ZUecFBb|kqF)QRkQUQUl2pC4sC*=&=s)hh6HH;g69-#a|p0-&SSxG z!q(SRB-}w~LjN)%N?i$aB^RVKJbdch8bOC`*#9$@^_>iCIA$vLPcO{}4^x^O?ZmSA z_uE!xHCTQ+yEN3CUr)6YcN|vteIEY2`*WW=2`dZ@B{JYGMld>IM5Q_agmw-uU6@Oi=$5c?D@C;eOwt0 z4JuBdDiRjfa*HLD+(JTdKooO(^7#P~-7>(pgiJ?=o{v7zP z`>&gfJoi6JW45pnxjUY5HYLRg>%#pTCYXdfT~Np?5clIB;7l#Fd)#X4TZ86%Tw`Aw ze7;^`?HfH+o{@;VLdl7NPu$cypZI_?tUYjbk6TOVPWp$bWbi1_*p&{`)0lhwhFWH5{~=%ZPN2e!Tbpy_ zN1c=%NX{?i-swMn^-QB}A00A-Ud?g)-tmz%7%Zunx~KcsLyGaePQz(4>87nq1j+kO zpbK)=APA%Vd|YfKuiwQK=i@1mkwN+jHiR;x0uX$m-KAiwN9pauMx(4{ubM0_pY87Qg@NfgTNl05*9SUO zQZ#R3H-F%)?W0U!7oxxtArxKTQ#?58sSDj(@w)Axh`eeODU=^mN<`RixntMBCXC(91Hh3TT+csb?1dZ$J{k=E3yRVvESb7y04#suj67d38hGc zeYKyHo5X#Aiv5O;@6$re$rlKeiwX7tvm3F0?mpfU!XLabJCuJY3u#EPYg{Z#<>Wn6&m3Pa)$8)^N^7l*z2abI14 zicA&p>=0m>@KGxGi>#+M*IzXoFv{pexg0IJf$3_&mqbwM9EWU18nb>EmIid)%um8> zYMTVH<4#GWPW_<8y)*)W6hLt1B<_C&r!{21C)Z#Hcfgoan`^om4e=g}tssK+rq9P> z%8c!|tUvf6ksJFD1%>mV?0=UbMJ8W^=P%b_9i!qoL6DojU&IE()?h--NGrw#SGV1x zyX1u@A0!-o$AyC{@y|46ZwnyFrFrLGqotE*;Rh`O{3j>o8f_Mfzic*K5FPTt2C2-p z&DIOB$p7oUSMABc`>cj?{cfnNpL=tK0{Fr8StG$?C6nvEDGw&j;QI78w>zKqj)m>a z*<`o-W@Fsg9(qNry0&z8Ly7pdX%b&IyINQ59kQ(G$ucj#WZ<->~%YS-U+|ec$9K z`R5j;D+)kN)$m#zn^rMFa3?z~4<;%AJKHH{M`OcyYTTciZo8wQ}WH&1J zq={bYX@ge~)55()iU?a-=UsQrRnZmwYsXBz6yIpQ#I{1qIZ=`KCVrar=DE$$%zRPD z;~#C^(yanB!Wxw{HS6mI8C?jN5hXuuPS~cdhP{X|Ce(P!WAwH`px_85gba0j3>hCSgSwqcaX9^&|x2mphiyFaI zNZX#^i?+d+3LlFvQzY8QLwIbxD|{5gj2^=WNnxVE{%ho2VqN8yG|ccm#QP6_^H7g- zNL|z9sBL#WA2j}(VVq67L_ zg@VvEetxZ#0M2)xb8?W;xIY10$sHG^-o(W$O1_q&Az!wSEQY*7MIr)F5n>$O&8#u| zDQT^r5N;4c*hMXLNUDh8koa}_S!%DLGJBp>BO?J2hl;eM0!q=T>B#c_aB&%!>t_}_ zo~;1$%#5&#UgKZl6uz&HLY11Y^37SqeG4Lg&oup;h>Y}%4?__%I{-9&>vxk$Hyk;0xO>Im{K zdQ>_mjw(KhWjNx5h+89+q)Q6HQk%a)AT48#0(9&svIp?HZ>A(XRCA8O^JsXlPtd^w z*H;zkNtn0a?9Pze+rw0JO2s}!xd=G{ZuOg?U(C_J=uo%czSj=$azumXQs`h!zY-M2 zCTNVs{vK-Mj;O(^W1n0CuJ-u|+&^KM4*q^3SI#}w0&pfuXkPn@Lp93jX3kJR0CKC@ zO=x_fNgedegs92(rfNo5i_Cj)C)EQp^A8rLIvTcZR zL;;e&vO&&NtL>9nNSnr@(za}mV%^pd8|hMZ?uqFbo1fw0@~~eNi+#~W%W{>QeS{cs zhXdX~kY5vw&2rb1n1renV$(QuST8}S88^zVJ>-m~Os|b_b zTFEycBD3IS*oPJ=XQ=_C(k{O5YpdfB&>kTGHGS3UXIZRxW-fNSYl_yCNUDd2@Am!~ z6}P+kQH(z?3djfGIf`ZT%7{NH=O56^Yd}4!V)41;FRc@(vm&sW?gAY+Gy;7|0U>nR zOsc9>*=s*{pEFRhs+WI0=a$5DI6x1G0@@}qu@hc%yh*R!!J%>yXGLFZ&7bQQ1Hn4h zGpp3hB+pip3alN!z4TuHner3JbWbs*)DuYPNQX}W(6e`wAZW9H;RqV4L^Z=2tx4k% z;VYQc8I2c#l-XnC)2R}$s(WGW%60xI^xNUP>|6dgq5SxXvN{_*Eie56#K-|a)O7!` z5RfXWS_@&-d8_-O^kt@~5<^jGifamK{+;%7!V>WZ_Lu(0@O946PxIXsR$F?0K307< zQ^v6*i5WR6Kx@lPLSP1}A1M$6akZ#>?t|aEJ({Bz@gBUVbloR83YS*)r5M_Xtze9FiW)m2aMig1m0?*$FO?!SS#VgsGQt(^q;_TzoEF$nMG1b?dc zMzP=FsOdU4SU_vd3Mr0LD5c~Fkmux!Two&Zu_7{yAPlz>2tfr{J)RpuHqN0u7~d|y zRb8Z;?~q#&LbDoRvO=2UYtE~;(iTi3|GgF6L0l|;WTO(o*mLu?HyHxO7ZHRCBm*Wo zAjIV~@$VXxp(a|OMS~W;`8NE;Q2g4svu6C-M+|b1g2(fgoM8)GntrEL80NqTE$~us z1601xaK&Rov#+uQsixpV`$7#E^HE7tTJA##NT5NfsS6Pm0IkKCasmLhdXn$*lyKcR z7^*l5$hT?1QAU6R?c}aYve8_!e{*b+iYnTJ;ti=;g5 zT0Z~smf#G#7~VkBQea0*@yJg^2HnHKBhj%WE9Qskm@i_bRd-z&ORhi23Xx_4_vnAQ>4CNwztpyBS*;_CD|)UW(2jK;eTHLuebj@Z>GeB!%{(3_9}LSHxz5} z0dolv6-^!r$+?P<$Li<}ZWxUu98S)btyyDDqRgFH{L@Q(QB=k7$5VYl>LjZ5*)aeok7oM)>mV-+Tj-%B_qPN>26?xiytT znaqZ`f&jLPH1h<6|L~^yxvto5&8gk{h!YxP4y%Rj>)VVjP#e{T4sFKi4>>RA5D+IwD(x`?0ziNR$Di6Z_QH^1cUDrzLHB22@4)du5UnO$ ztphD!&J`)D8awBW!X6L!3eE@CSm;{|s-}!NY&`A}PX<*3P-!rXwsusj{HAEM$1jO_ z(h02bSDYsB=E0u~_s9ti z;3}=<4G}1j9xyVxhy|eLOf;7a0E^=V55cEkO0Kq)z!p@Ppg0$x*cQHA^?(hWUC8r} zoy$nrJf3~T-b68UL*2wC!!<6Sb5DGu(cXv90<5pN*0r9cko&a#i#n`qr-Zd|>#p%6 zcBNAmqMF`26qxegejhCb@Hqez;Ep5aEwQ~`L>oZ^g5%uppKySoxTgRybLJaTO^|2KFHA1#4KOhqjlc}3 za9_rzEM`8qqI@xU>zW2`laaD{hkjhlohdY;8xQj*wq0dd=ZoORcux*0PzF+fO;mi? zBv8cl14%Pogl*vi;3`&|V>}3ge5Tp?6gYKj#(+Xqa~iSHFt9=ohFO^_wG5L1?4{tp zs!m$!t=Iwr!(Q`sD}ZbH)PUnZe{253E3|R-vTfUfVrY=nl=%D+2BV>%tlh@w%P^W0 zaHiq}w^36czCkRTZr2`U-Mk`|Pl zbKZT&=l?wS+%NBazuf!jPMx!RcDHACx~ICUx~hIvrwvb|N^6o{(~qq=S8Q!ncoVpM zf4kk~+!2&^lRE4nsIu>+q=#!?0nsR;wV8EOgV~mdTgxfV-ZZ^gsx8G^!4Y6d29ToQ zbe?bC;$O!A@YK8PV?NwUu4zA2eWgRVPwc)T%S&tV{WB^rkYNs2Od2^T>*~3|sHcAY zf_DiyuSafzm8qFo$FHn&J$p6IXJ^3H*OW^K7SUgFe=aGWgSS2|Jzou@!d&>H7besw zQo0Zq#9yUwo2J!bJ9STP@XiOpNW;YKY6Myf4ul9tfG8J~!FVP{IV(|VQ$Af2_~ex+ zM*BbQR&Jx&_H3gWzH<(j8;^M_Z?p+ldHOA)G)Lrd> zFX9P}s{v1PP-0d(Lcgu9*wiv$z!n`Bpg`tM2s;uCTsu++8=^hGPTssdOezk1!F7){Xal{+ zwI)BD$}a8D&LNMcrxF_8+^E%d?=WBFHb##)QUB#$b*!7zhF zEP1+>FOvC@_j_}(3hN>lW@7#QUOJ|m1^Voo3B(N%MAx>}E`Sz3$0Q;UKGm6SXwJj* zX1V4)&F&fIKU{>s;K7AGKua@+F#B2MmB~@CmNc|dVZZv5LULenz(k?uZrsLN+eggd zWAij-;*=r$#_i=OvWnqEiJjaW&RI z>4`$q64BgUZjqT52CMRS2NCpnX@i>tfUAhWIh1g-sDKp3r{|I)$inhe92%CaBo zJSuw73_6dKolXyIXr6p|CMMww9Fr>V0NN@yxmd6yC6`K6`w2ZIv$anFHk4!G36IMr z8|iO{qJ2lw<_W4?3Y|1Vv zq{^6F8C$`f@`6VJvR1Y~RW2Sir`0vN%UY>aHagAJy1csaV)#Y230A%N{Rb%ifR=5b z`ci2n3hrEf{)if^a01Yr!Ifoo$PdxQiX;)DX8Gi)GEpFczC`wivuF)!J65>!lm3^_ ztdWznPjxM-u^tY*bv$aM7C0wA5fzh{id@r6Xg48&S&}9Mi5X_z8D*=Z?7`5#ZM{yRM_vDx|pU+sh$=@dfbW+5Q*YUSTPXI`!li zKT^Axibf#i1f(0EbuSpQWA*{)%Ll!~WRcd7`b2fryspdgLeFsQ=yMFI45^$XeYxd< z)hzHrF$(?~+>T^-{+|x7D?%RkCNA$&;K%4WPMv+HHfN3(a}$jeRBS!S>y+fORA|7v zW(h)A!up#8;6#Be6%;^FXtW5OSVC5}(cmv_s1U&u0QyT9JR^{<{HrSx0=yBBR6Gd- z8zP+I5a=r=0Z-Zc1W^DX7|#dZn^qqULzwiFyMM1s4DLZAbn^ec2n`6OfO*y$U()>` zJy?dUI^u76w7w}6j(&adi(!0wKV-rI_-W}d3T^$R1MJ3>7B;Q zWI)ug>!zOe6anDuZ~a`e#qxryJ38*R_0jxJ@B5jN!{PjOOT}Z2;FBm@j>dgYAtUA0 zio2>LvC7&(mq3Wygg3`jfOs_qF55t{Ye3wRkJ5N zbLu6KF={ndV*iDg90@y(+oX;u59X(;O|O*xw)N&M3RWTnhrTmxjd z6$eRMILSdAre4NHcM0IH^{;_Vgjd&eY(l_FHJMbro0DmYi%?8sctD25_rX znh7JqxJv2p3@GZZ2k@KNZo-Kl(#77-e`osz?EU#B@ot8tr=hCs6ED6Adv0bZUZMM@ zn4)cC(ts9UH+Qx&5Z%v-8mumVJ zZJNnQ1&Qv^WPXN99=Hr~{PJgw@mltBveA>sQTSjgw;8(2rgww);YgOb$?tcrgS>`N z(_!_gKO4q#_VDq81J?^^^ASE5fH`rfQ~N9pUZo)WbL9XMV1BP@4YprsBS=A^0b!UT zl34d^bml>s_NCyTXfYeBv#%DY&w=nfcH`k&eh=gzYgOVw)g1StYPAU-+pOZ~C&|0y z$shGMzIe48*7?cKzErDq#D8x;(`h(a_At+JeqJ4!k8V;_j9aEef=J)D`2hB1)z~{d z>ILJP$4c4sUikz!dZ8E;lJ?%_j;hm4xl(UkP#~j#41ALPuWnN-TUGDHQgQoY>&ah5 zyE(NWvzB(h-K026b6`&>_&7odg?RujtZZ!EY0o~e27cex=>g*B_?qcN$lht#N7)+v z0$%w}I>JsnxA3BUV2}eH`4b6{x>2Z3Xz*l0T`)Qgk>cAG+pXaYB}Xi@*#cL~`K#xa z!strQaNLn#s)61_h*6gVxDAmqKZd(m*mQCrc$ysJ z=1z8;b-O6gZ8N!R+rA2QW|~c+gFF(eHOdi!^D|B_mNCD;E=I=O*7g#Xh~!~fwcKKS)}VzC|t(Qo^wpQe6E zkcyG!K51M|><&Ki5}jAJZ9W&5>wI*i`{>xVMmF?Vc5kE3$kqQ5TZG-MP&Lo5_y`iJ zJQCSs1=oq|49A)tBf3c4b*8_<)|D89@#6!3%~~k_BRG+WJPk7XQ)gT-8T7I6A2F;# z4akj*^(N-=EVNcZsQ)xXb`s2gXb$jFD0Z)Z@e(+21RLKW*m4PoF{oUHv%CL&J{4g1 z1tZ03aIN+!p(rW%OF?IVvCPV6ffGD{q7~`?HKr$`K$4LafO0ui_&B^?fLQe}+aWd| zWFMDwb)Q*D9VRKN$6-wbP%s3#AF}J_z54AX=g=CM~%NB8G5-!HLO&>Aa=~9p?B4nC1hL$i#H>6`}Oo+T#x+(Fe1_Sy#}+Wc#UvS zx+M>+yt=UrVF#bNEgPtitW>Wk%@0vz$lHdGGF`^Aof7!(F_4&cL}}v`B7;wpja)0U zYEvGvzlnqejVA6UuHPL_(^U^_YhfXUC#Kz*sdOFxeE8h+(t9gTkqqfMP8P{zcWL)P zzer?ww5{GgeuB1}WwR`snQoO2B;5$N+i9Yu-{bVk-YLZAUK zw3Pu=K3RiDjoo+wNQjA7vi39Y*<- ztxCTx5l?eGzJdCO-x0;w<5kb?grE`sU&}*7*8e;kT?kIuRDqjz>rYfxeLa^Y|6z{^ zWH*_zJ5cY4>o`$a^bh>c_eg%+=_^~^yN||twA!x@?>GIg>i}5JbYZogE#O|m!vK|E z3fli@hC#sXn|5WFcUbX8a6f+fKg}x%K=bLs)nh6StPtMF0ZAk9@AfW0?#K4BUPC&5 zTVBG614*}wkl#fF2Y9p<{fFX&D=)n6i+2*hu8sfw<$xIUZhdIdIxV=+YxysG?0-8K zv-q|EX92Nmv!!!W*lxxpWj5Zd`5ny$`Kn>k2+QenWPC^4c%{(SaC^29{d?37`IYv5 zv+7tX!#;ClnLY3a8*Y1C-!Uf{=dRBZZ0Exif`dPT34xkgFaX^*I2f>te?PVSkzf%z z6cdKMbOKuI?&v7AD&4kFIInDr(2Z%x$p|sC zVr#mE;ERhCMsCH@OT%oF?faV^G(}6N2CAw*Eict+mOd8uaH?{@xRp08C50GqoP{yD zRM;qCj2y0r0fZg=4PdDZq1$gDk{C)WD~m-J^ZgS}#@LkR;&#~E-LL5NOAK@Ypo za_S8|~A7)sS(9NGNI$fA^x1wZP+vWO- z{$uot9A{VW0JtM+_AW@76v%LvTj@dY^IfXC6+@InUzIwu%}DU~)X74w%pX==_^B{} zrvO#2GgC+ckSMFoPKtIzh>_7NT{B z+?|Rq)AmkiMsffQj$WCIJpE0F5g84GSHy5P2qT$6!rNFfKwIDt-12~%2*gEt>XK!a z*y0{og!AVDM$Hph_ySTN3NGR2>|8xRkNJgZHwpn_yK#bOBR@x0-+~D1R_wJ$ z&zuW=##?vgTdWCEgzEQLMYKEPSW&-!LA~Vhr=-73_=z6FWdLPdfuE2TT_t?V4)YLT zb0&!a4IyksSs6;d4*@ATy}i-wL@i(DEc17$*S$F|5Ui=eh?EQ>jbeYdz^k}U3}Lv& zC^itk(G@s{p~_U?-~|#Z2K;zEru3mwLd?4xKqBXy>>bz?HL|7!xbz_0KG^tX04IVB zb=Zo@>!ra4pA3xDrzXfA$jtP5*NbV)U0hKU@ zLIw8&ELITgP!(5CAc;$h10f4{tw}F}hCf7peN+c5|8&$Hq|*>S z_?Z3pHutS4z{6PelCs?$kjvxS&>4v+*CK)tix>jG^OB1$+`U@vpqL0n2TuCxK{^?c z4;6|#W7#$=SeSm}L+=<(II58``Gi6>gbd(v$T!}0p?kS8PQJY~t3-az+g(W%Q6p@$_kZXdQLulA;@=PI%-?R9IVjY1(?(Px-X}Do?{^l{g=ny zjjLh|nmq}v&;WfFfioh4(2JXvjt;`8WTNWkh!8CZ9Lx%1SeE|E8|41HnXqsEX&6*X zUQ)!JmVh-hPD}W8!pZIDT;x| zjn179Q&t{Im^7bZr5HLvw-z%Q{Z%#A1$vN}&^gy~6gu4~`~8g#U!>fTXf2P60kveK zwf5K|<;+|U^N&MwV>@}c4EK>-L(H-n-ORGRT5NqKg5s}EB#A|t;V8odzGm_eXH2D{c{W$9jZI*ZZ-ApXMPli1Zro@>?z?S#*{ zUbQ_XZ)L(I0`4?ou=?lE2y=|HF2FdWpjLD7w4M6VU9Pw(y6Pd`##YaWOXgd5P-1HZdOU!rKd+1 z&&iMHdg63Z@TO0Eq@YoX(K|2g2lcFK()mMM;y~2KOcadRGj!B9_}1W3PAq4C>U1vF zu*}X_6C}8+b&Dpsy~EU-JM|=#wTp7cGG#XHYAHNHsYV_Sc&7@OT$+pgUORgJfm(?+ zH*fM;V0Adum3gwu24Nyd7CXu)aufHnsjZAizQ0wjYbkyJk9$yo&VhGi&La~IMt9i^;_d>D<$R54GQoxqJj$mX<^BfEKRvQ39v)n%%RMiidTokE zb8C{HB+eRVcrT=yRMhG1nnfZ)y(?{Qcj-+`PI`?JLX|7&4%eNXyCh0SEbn!M8}bK|$3b=htz^3;Zy z5bsZEb%U!iBZc#Gh4`vwxd@B*Tzju&e2&H`5c}B54vY!lXv}IxLcNg|G*WB zGVoqMc=r7H^{IA$!L2l4m$3KYG>~P2=jf47c_Bgcx6FIChoNgH`9_J(JIBQRLB$um zvzJD09xJQnD^Pqj)TJntPMOL!Kkqs#Sj_;tvu1x?Ez8NHeiIWk_i5S!Bum4JGBL#* zDGqzZuboNLMuYRf6b1YtB|62B2phC~l3``&yBBQ0>9*y5ce zI@&=|QAw`ERt3u_=nhea;$@${qz1)xAMLYhD9KSDpZ@W@qoOZHt)-VkJAXD*1T#=D zav!m~@H_GI7OP%odmJxL`oYfcS!A^%3;bg=V6-Z4yUOr$JH=vMuE|DA;eb<6jAndY zeD)t5kl@w3ZyKF`bMZ#us+R#>j9tf&vZhZi1=rL8^{=vjXVmFx^a{WZYOVYWP( zxjbU(@`7kA33nOwSd_vR7&7{j=DKF>yY2zyJRv$7skA(u?#^|ok#rd=91aKT8CVXY z-EKK`tKE5ggAa#ip3cQ*Hwd}Q%GXydQAClKC3FmBA1qvJ5&KCf-j{LH@6PXlCdOSY zl^-+5+mX*EB}%ItRW{u?1uElod`K13%%TmuMSkAf4jjn)Q^9{tby?3Zu7Z;C zMqSdbEf4W6N{T1cCyU?b?SI`6Kl=4#I!rFI{y(B1TG4=j4O5?Z%JNpsGa@BaBO1EMUGx?xoIsO*lu?sD(9+jEv=g=xob@?|8=ED zoE=}K_|l!nDUYX|8wDI^*Lh_p$k10R1n>vHeyEh139A9Ll9L>UBql*kbwQ~Ru zh!P(Q)*(T^3BBg!3*EUEn#!^r0i>HEYjY{k)83Y>OpMBbMw@$gGdrJKG~pa1W_i%_ zyWX9+3N1%gNfvnEXV5)-KFVpYxE5tcqV-7%uC<+i@712##+28u&XOknP^MO+P;*jq zGX7KZx4xsc3_br{heUr8nhxRFqwhEZ8UZGdKOjea=G{06%4(76qYO#!g7 z6i{Ceq=dq6Z=JYNLdlNv|?#|nDYnDJ-S!7ZA;QL8SFZ{0 zrKc1;+PG^R@N_XAI0^W@bMP(N9LTYQ&y{$7i?IA=5w-S602acTRxu~AcwlhJFq_?&Y%7j_M zo*dC)RcWv~KvQ|i0`Ld3jaHvwNg8_O6`OpTu5&!k34bWH4-f){X10eK>We{wdnP4a z$A#jUx|(5UKHi)8%-RIqrIZ$@B`aJ}{qWNY5Pt@POR3E6L8-eA`W{H%6`~M~77E=GVYt8 z#pteY4ZE3Z zT1G85w(?Q<2RI8?h}Q0Zm{2+}d4IOP7HMQD^Z#=b4 z*~zHbGOhm)@9C<{7*CWcw81NU!POo1p^NX%|3X6_;-PhH3W*P){zSQ)8>JJh&G5Y| z@zWRQtyD2(OnJxr_>F;oZ~O07bVUX5MPc9E-z?dSe0W@`<}EU0YRqGoc-xrYqbwrs zu^>q3zMC{jilJv6OQk*<3YF*Fd3NHb`byt~mihWrrfO-jD_5@FGB(gChhsFdXMa_X z?(J#vQGZIxHML*%>3$~fx=@IsP>3=wB<>vU)hwORYhWKqZ9h4}Bh?N}sQd(gg1QLN zFUPukU-5maVTwd1?z?xGUNp!NZR>MM1kB@#NShbe=Z_GNQ?$%@k zU!1*)8G(ZY>wrAQfq{|^q_%@dNq#-hVT+>l2x@r~r EUxq*f-T(jq diff --git a/fonts/lucida_sans_220.png b/fonts/lucida_sans_220.png index fb0edfe0d0ed255fd8c53fb61dbb9a2e9dfd90f6..4f385f4d4ff4df399075108af54659c27372a3e8 100755 GIT binary patch literal 74427 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 diff --git a/fonts/lucida_sans_240.png b/fonts/lucida_sans_240.png index 5826e80d8f3e5e32ac31f1dd1466239c7020e3f6..8fc4e9d6b0e1a904e59ea10d88ba6eb85afad193 100755 GIT binary patch literal 83532 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

#-He$0 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 D7cqV# literal 94928 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

4129gTACY%!Tnvz{Yk-%ganR+VBa6;T9Nu_dX9 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≠`dr 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 diff --git a/fonts/lucida_sans_260.png b/fonts/lucida_sans_260.png index 13a9c89c9a80d792a2d65edc45091f732608d558..9bae8de5b0890c3b1b97b5fe682f27fa99b8f5b3 100755 GIT binary patch literal 93958 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 H$H@N!qYgDM literal 105072 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

MhLjNCNeI0A`7 z(p#6?d}w3>qw#Ef+YWu}u3oFBNHGJ!9^@YgQ@JjPIN+uzHi+f}Kn~~KrYsXsR4+?_ zZ++rYA;}6*NZ1R7orOl?ZiO7Im9;!!2Otwm5#6Wf7|=3lJAO2Q4cIFnL>5 zOUSFhP49q2fZ0jUS=Mz;zT5m>y1Sx@i_kJi9+3P}nG(q5ssJo6Qdsx(_C<&xWhFP& z45c;)_+h&<<(W6qIV~nrApcssodR^HbC4n5|U;42%qb%pGPpA~x#Bbs5IoTNN{;1S^mVQ4Qrwk-L-+ zadoI!XOo*(x^VH8Vla`_$gM}vWDl-n?9=~Il^QY--1 zV`-LWO`D`0ELBPk(b!IDGB@Z7nUmwg?q>&UYY*+aVAL$k=j`K#kBpu;7 zFtP;{s+&i^Le+V`rEWcDzRS3!hLohoww@oXQ^i4f3>+1yE3&oZO+TD9UE0X)Y1fkL zW|#5!g6aCL-QxobWY<~uK62pX6#X0sNbWl;?c}`NxeN3)w2{J*!gUo-fozJv`^vy` zj(r*ns#1ErSLJvW;rN?byO`x^xrk6OBkf*1$cSNDUyq!N|{T8D-UJNmoG5Kte(poS?l_WyhzPII3S5j z0Ob6{U4X-%*@4iE_tM7ys)0Bl!540dlwbpf^#QeaKvBq0g_M|bDq|@#uu;Kok$f*( zz&={t@C?k_hb&2{`YuDqale=PwP7F_%qA44@$eAw2Hc_xWn-2Gj9R>bDL}#tn;(0J ze$U>I?+b0at`}Q~?8+_f2Pci6^ntwpUXEva{X~nG{f7S;)5TwBL@I$IO0`$?RUhZ1 zcf4oCe`IMGI)dZAO%A0R(F(^fHT0uVgp0PP@%^(w%c=mI#XAyK1mJp*!xiwu2d|90 zcLzl!YylN$S#__m^qY}~mdV&@S9OYVebXnJBa$bpdst)ig~#{>EF<7Ua|t^@I=l_3 zc@I${IA^%v+qQGCJo-BJQu}H;=uu9ct!q5xb0A^S|Jy>Cv_GMmB%OK;TM_S_^9KOI zS7oUxkcJp01Xh>}?-wysb*vwmeFpXv@KujzF|v$|urjgOKVE*$4v4*6-pWFGKW*j> zPd*}`qAa#@2a9eQvUhSi51%9LWBW@Cm?w&#%$6F8okY!4cBV9K_8YhhIi?BkdL1{o zX!a{ow+K3(=6+{#sC?g1w25%9Ml3f$>ucgkEI?;8Erx@@^QTK!DFg;BkbG4*_R$27 z{ONK(+qroK-mL1}LZEz+FCx-ZL*x0-P#YIS&rs(ucsX(*l2^hTgz*6)WDNy@L8eE2 z3yK&SknHogeEp?K_{#>aExcP_J}w(E{2|(}GwR7%W|)X)>5$@d7bI&o4+0JgRp9*( z6{m?fFkbk8w#<#4a?Jywav}i?4oAiBq_`y&S*Hbf$q<5)ktqzxxyQ&P8+zi}Fy$;p zh&nEE`R!qhlr2@7B?U{1knt*@q9>OOgL!7FOJtN+7)^e{^-tdxel|8A-pZIm(B6kmj|!EKqssJmT7RA{$xK}p9+$ivh_ zw|@+-OMR%o6dTa?QAz;Ud{&WhlJBdMJv(Yupgr*#ENh%@1$8?Sf^7HI#S+xF`>3~! zt>5P4{{>fC7trm+{9TMXRtE)>ZpEAtql$E~pQEdswydljQ{;{$Kdqu@LI9(S#cy}4 zAFN%jdWi=25!xvlPVeeQVx!7l#HSNuV?va zs;gJes>D>AR-T#mlGV(x*&q&b)xNuEd{BwM^P<=$4p%@sbRV(Y{M>u*bQNG7Ms@|86|js{-vnBQ-+zJTh7GPows|1J_eIagZx zDO5TZn)Xh%X|`Y4g*6}Zp`$*XM}1}Bo1rzE4_9MD1;4X7d#K#nByEX%+umbhKQ+|UpLnCf4;5T z(5BBt;NbKJLIGwH{ySp=p#4H|pIrC6vh`8$3ANd~?kR z?FZsE9W1VAHv*|qIbpHH|Iky)4oD01JCCLEpPT$`>K}gW7UCeWXkH>IuK3}I|Lpft z44#q9Z|=zDHh>mHs!(&W{v)heHDK8Ok`Vygz(&SK3;t_*YhWWn*se`rF{^>hfVRS~ zf5n1k0$2q&_-TOY_y2v2SWu!eHemOYIsi5={(qV`Q3niwt8+sTF#aD8v{M;@(>wgg z)j;Z$|3ei&2N15Vi^c+cNd6%p(L@z+4u5h*A3;&tXR@|-5VK;gcx|Ym={FWbQ^NwJ z2OxiO7w63-t;;m(?mc$i*^l-encm{_S#k-y58J(e2+lo_&;K$<7Y88_*4}&sWIT1w zL|Zt=32H0+yX%GnH5tM{Sm(pnd?uyZXxSt3>@bicXoti$rI*HYGXAoANXk#o*$DCn z&HfYyoRF4DEQe!pmN#*Hx_GU+&w5heXiL3$WhnCc2!PDoA_!FMxpUA$HdE$t&Hp+9 zZ0SFGntcFBrjEGT|Z(}@HKLNry=wf5+*#J_o_ zU%8`YzbkUxB>{zTnMnosm113AWDy1U-~&zl{OGGa%*$kQ&PQ1g)L~E2;^Y@GAS1c@ ze3W)CP!NFwiTcmJ!2(Rz%F@8N@cUVPQ;oBec5v=+{#Ow%!VwUGPIdBN^n|zjM?I z2j!Oeha9;^d-y+|Abcgdbb$%VwDal9|KBJX*??=m_Kf0*ofDfYepu{(m7o@s2$)Vy z8C|1%a&~cswm_2nm&F45Q+S#y4kP9Rv|F%_(a{j)|2nIgAgcv@v;LLW@&Enz+mM9u ztt*l+F-oXZIlA<}lYoVT@+vNB6H)XsLU#e6iSVCm%I_oKg)%mpnKr=M4f~&MdetpT zXaC3ex(PQ-{#je%!9EITy#J*NI=!#?v=FP!V&VbYQ?8p(zLuQ<^wTp~>(hLo41Z4N zdB{mQV(KUNTf58O{Lc=yOBr)*?~-3Zf|I9MReHwecr8Kg|Q7#$g4 z$wFzLF{ACfA9(|r++hlsPuBn#OaYG0n>BW-O$pq?f8laYh&VupT&-x`h9j7~@T7h6 z-!N(bGnRnW3LfP21Hl#+DN=$GK@Q0)b_SsuNLPDlbptsRMG*4ENrGiPX@;z8wK8mQ zXTA7@3bpq8FY020k9^99A5QyaU$&ADRF2RV+J5YQZG!4f3(~?N({VuwuB_Q%!yN(S zf$PndaXLr^_JI-r+5ky=*+>>tE(@G?)C->#I<>0 zAM{#3XqU zNsngz39jZwjpEL}dJa7{B$(ED)RqU4?nufQsyH&)*lu9bqLO@d5BvAWW<{mw!;S>n z1uk^v=0hC?;-g220kUf&n7cHv8YvZQl+)wwa{S#ac*arw_v#0LdSyW|xnLj4+E?ck zf9fj(J%2;ib)v0#u+w@Vd$eJpSwvl0v}iJ(ffzA;QlJ>|ycwP-X2RmjuzJq3!Z&1( zHad;uW5bDdlRa|7?-vw>O`LN0v%zX)ZeR)|zdK}@7#U&=1dGW~unX?04X5Hu?Xh*W zTBj}~61@+FN)cBYRIB{d*@z33YF#kC4d^h#!&o06%VpmI;_4=K5^T5v6Ab-~SwLL! z#v~8E`fNgjWS6j?)#r4EwBdDMb&*DvPeOn~0YEE}$v1w*(pCj6oArBPe;*^EpSUt+ z;O7B8JtACLxjdJ{R)B&*d7^*d^NTBy54i`Pk=Y~WCHK}n5X6ajVcXW?vDA4(PV2=N z_!$fMe>c->L6i?v0F^CRF}3Fn%@D){h@#d4F^EiqY}CL6i(@Qepi95oA(h%+t95&q zKt>)yCpPA36ZS*X32>fD>D6BiVqi#nQqba|rg0Bun$7)QDgE$eG(~`9XBIEz?VQ{m zyD|xu;mZj-(OXYtjOm}S<&5s;E%{{?fg?N{x;NkQES-R;iaE36Wt&;XTWXc0b{xcq z5~oDLtybI_YfMjSgqruwNSl19=S*KqUaWK(0b!UY-jO)Fj4VLxT>uF>|4W}hY%8IW z$aC;kb{BS6EIYg5RneKcZd}(4plUH7sa3}2OHE+XpOmY7oQw%zj%SF->L`8K!m2j? z5$WS)qmupK+a+s4m?)*>H_YFBsxE2eIC`?Z45wYl=NV?U^aTlZ zt@UU1_K#JV@TU z#6u};HE+ajPqQ4k>ca=(_5SR1BEFpzqVkPQIi#f*Xc>vRpmjYE^-yPb@;fw;#X;|OD1jlc+I zwqL41hd|)%*w!34QsNV~8O`=e`4iR?7PtkK_ccSIM5G!}0m+!eb6;arJZi3_vVx4{ zI1Nw<$c~X>_8q6{J3dMHlhP?Uh>k8XIYc+$nnw42xME>^C9ecUFWcJ0y?Q60Dem)~ z!ffh?@0&9>!dVb!4v@Y=>LpD5SbpfhDNW+rGc zs3sDohSKVFYGeU7*Nr{+9cWMjX51ie!XQO#{x7rN0&>-*fqhU2Cl%l(^{DDMkZ2bZ zk*D(JVM>_U1#5jw*K#j0MgpGOL0^ZxY*s~xs0hoqp@go3>PegKIO1lLH*E~{^1|IZ z2bTU=R*7#J3(-fs67}>uJYgT2J(f>wV%II`!i)XC;8}IdQXdGv(#0QgT5WPU$$HeP&m4a!E z3@B(h;9??wD3`dx5Vla~3Pjh0(0$$1$M$piuVoB2qOr4R zw>&kJ1tXu-EU&FyPP5wB=>5b(WwJB9|7BhEW5Fha-weR*t{d=`Xsp{M$T_mEML(%U z?^7XV?A7;0j&ewj(w1T2wQd0dfeB8kUm1UR(=!=y;hDY!2FTrW40AD_UlE(P58 zsbISyagZi8;MA+x{KecD2BgUv@Z!zbZf8QAC=ks}27TCpLqsDnATxRxC`<@R3{Dvz zwt$}l(VR`g?2&8QY$_qt&yF0i6?JHtF<0x@{0Zx?|BF8yLRGStP6T+gGrHKpn(e9Q zuIPZ;!`_b)3Ri(X)J%=_ZqZpl^lo7sWOM~$8V@N63KXKO_(rMvZT5s8_Cmudy&|Ax z?knM&&V69`)+182O?QejLl@vg5OVDT-NpJ;{~frDrUFD)2$ShKAHlQP{lb8TC>Rs@ zta3qH9-5E?D&cdoHuqdTi5&UZDQs%x+unTl=AOFhVZA+gd&(~=iSX!7YTXGJ|D6$&pAunW1}cL5w~zuu99&P?I`LnIp@ z>nD^UnU9=h1B^yZL}kmM9gOj~r&r(V!p_mo+;ge54M|N2SwQ~o2W^P%4hAY0I`iey z!)`aYq27iY@$xVyANhOeY^6w@CMD9k$JH0|#8bL+lM;@PSNvs+8Z|u){D)b{*o41} zCkA_da%JX;{ay@~6!60mL124e+D68Ahf8L67rChjXff=P@@&eq(L0=&!W=1cD z06t0pb!)OOYn2s_lu{iwlc}W_Xg=VtR@~K?x^)^<>`r}z{=J3t+}_`(=%B+8$8CNg zX=*E?T7tgERiCr{{4kQzD;C#Q2v4mpYg^X=t2+&JWiNyJ;3}aoB586bzG%mX)Hijl z!(DtjAhxmNAD1U#9OUIrzvc8`_2EamtF~4}92B0ed#BaQhTTnSDz!+B!a$btDjhv} z$od;6A*A{9YPK1)_JsYl<@6HcfH8$zg>U`uEPfTX!1ySZweY)QOQJxfBHq-R4>QNW zF&JoBd8L9srwe*$L8bGO618Q491ZBkK$*CPav~X(dADRafNsUF4ZBM;B|4|ya8M(- zg`9}uU1`h=Dl@wY37eZt6(i!qi_D&iS7yQ)+e|N1t{Ir+2PMrNGdO>es*=j%&8+(b zac)KCmVNrgG62~d>?4AC6R4w^d*oZi`#&| zC$W5TXSOc1nUdKpCIs?Rmq_S011-C@KqQQGSK7B9HEcM$My_~lCM_i87b91rM z7oe?+U^@K@2SA4$vDVn(GF#RX>DW&q6zm{a11rkJ)c3q73ha0zrkae4=8);v@ zw?N)_hQZV*WlYU#*{B=MGYe)B7yZUV7=bQn1U7;krl}HFR;c}Vc8Edp3~#)=Af5#} z%m0_hLL%%YGN0e?r|zp*{QY#d8F3$r1(&9rBmbtsYbxAFsS9cuA2_b}i!{}#QF)>y z?ytk26;20K4Qk%>wY%8Qi3jM2coN28Bl?rqhvvaD3|4k3Zxp8ob&`+f8zd#9ZViEa|vX3k*>k^8qZK<(4pEC=<0T((s;(uJ~H_ z=NhY7XGaoa+e1U=MrBg2hELEVASOX2nQ1Bp%>Yh4vcv}Kz%gZzfIe}k{p^hF&b7@e zd8ecqV&dAF?B#XmsWz@nADW=Nrl18oe~bHT`ic?)iN2kmMA~tmq=v=s9}1;&1re60Jt1LS<3+F9SH>I z!>&dWrRU%51N7gMOCsc52eio~b3e(jOwHABR^WcNEIJ4n`I#0it#71qPSz&-d>c_BYH_-Xf+W|*G@h?K< zX(875bE`x~e}RvQ*mqWL7pK3xud65#kniWW^sf5uA_r~i-z>=fvNdL7i&>fE|8&Ll z5~bDn1REmG(#SP(7C$L6?nk&iX2cUt>9!$Xw^=gnhxMs@bEF_)>`vYAQik#QXR-SG zybz^Tx$9s~a{#%XCkG7gAIrIBXW)DSryskU+}4ZRlw~08&ekfc?4BmKy9z=GmsGI469MVzB6`r+Ml%!Ie_ z<(4d~eH`a`qkQ|i0-}DSeLsL5Y6vk1)H;9a8%0#Y|RDW_!f<0nqquV zi-%-4HOid|!!u2Mo$MB5Tv2!Z0X|3cIe)=AsEMj~j0+~W?1##W;Cl{C@VthoCX)jD z1GHoyPTJqbb6)_7qnco%8bzWNpK$-hyZ0ddOEJf*s#flh0(dL8D*W-BA5iv8sxdRF<53B=aLtNu4dIDM%STF|l>p73nlH zz|QfdoZ@D(-y(givu$c}Z)aUtA(FK4PuIDuIUro*`Y3W<{;$vn4#>fvCdFZk9eapC zYec5|%XDTS#{$WalKecs>Z@~Zw6S~blX$Lij^5r!8+^~Sqll6B+o}czWl?cpfgxGJW-x}uX5TSnvwAF=fNj1xI^RV zJ0JIhY1hw5JKHSKs6-W?Lt;omrd$0$dZCV$IUphM4%z?792WZi9#)1%L~JVThyvLp z2S_c`y-FUejsT05casl_q#nA1+U}GXj<{Q(_Z5yv{r}p#wx}kLEj)j?S0R8Ha3L2# zprAk!D+*$SHj1WP4HN_cv4C=qo?sdY5Lv5=fYOVA5^jP}LovZ3MhFmW3V6b;76KeF zL`Cimp@cv~fdBkGZ|C8>oyX3@p0#GJJ+tRq`(^K${q2f7zS(VFz$EnS!yGVnZjeg% zB~VPRDI_vCTpIh#?4q`xi3awpY0|H$6>OIB-B<`1J_KzZN2owQ|5C$zF)crV>4d#N{;frG7dRg~uhZ&5;y;Y~_7q={Yn z-&&$Ozxe=}RrdrQFb~T!#X~L;%fC!Oi`VM3rp=ghk^0n4=e0Qy7ZXy7zU(mvOH`Bx zI#t%tWk)2fbt|~D$OW9!MjS-b_2o;9Pz(LyE;{(+=S`yEboU$i*X?x!uk3foCRBi< zt4XNJtc*CG^f+csEs<>OzxxWfQHha_%rl3eg}bjDHO!`;Z><;az^tLHtKG;QvK7K~ z2vDD&)bS;h4)QZa@^>`yjbmRJ|7P)M;1E<{%xu2i*RaaR?E}w`N=~3rJB>B}s_}Mx z=o2mYS$_5FDvv9Neb)k%BUGg+Gv^C@Yd{jRwj5u&@d#dC2 zH?&ISlAtijmb(Ew>vSiHhl;nlrc|UWemLrKxpXn498Sb^rlKfmw&NdnL%_%{j}Sn& z2Zf0q26JZCo${b=Wnb+SvQb40{v)vbFxLVD%?c;S#z}W z5+Uj!hQ{r#_Z+|XTkQc`(Gp&>zjyT_kw|N)rSc12ZsXhKKBUp}r-%=@j>p$FKJJI< z|8lozRFut7)*0=vvL}6e%<+N|P3@HJYByJxqWQLz*c+(<^0H+R&V!$0g_dqh+JL{6bTCFMpJ5=n@~K3Tn8v zX2Dg=_BdTQvBC=MDAyhs?N(uztC}h)qtUVk5Dv;9Rz&8rU=<| zcD;?kbbmcthPQygi+p zJAROV8-U<8Fp{i7Qhwqn+ct%1rBz>iZ@!U{dLXuY5SyCaVfV$WKYcQfE_j;=vS(qo%;+cGLN>ZbaOG{qv zw>x3`2zpafFbaU|5L95rZP*xq zKl#Q?83*VAu&G4Evb;V??E-``Z&doT{~fj{bjJA43(_rPM;N25~yOCcpKHX)w=zZGug&Ak50;4>%v KiJVU_Ntm*4l@ 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≫h> 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 Z1Hk|R;vvZ<)7W2}bTkb$O4Km-|1W^%H5vc_ literal 114619 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 g$P8Ndx_d4pis=U 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 OzH-q(x8#D|z5fME*S(zp diff --git a/fonts/lucida_sans_360.png b/fonts/lucida_sans_360.png index 53b957c654f96bc8c8fa8c24b2f175ab67b20c61..eecf35e3380cad5be8f2d7bac557eb1a30cb0827 100755 GIT binary patch literal 143453 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≶*8sE@Byr#FeCl3}!Lk*U? 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

Nd)TQ(j{qZB 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 Mom<*f*Xx~q5uE@ diff --git a/fonts/lucida_sans_40.png b/fonts/lucida_sans_40.png index 954ac0d358b514ad760c4f17ded962f7fbd516c8..5c10c1ed306d7731a5e0de605e9588ce87127838 100755 GIT binary patch literal 7642 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 IM6N<$f?pA?qyPW_ literal 8487 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 VZ$Vhp{_L9opeU;*Qzc~_^grd&2toh= diff --git a/fonts/lucida_sans_480.png b/fonts/lucida_sans_480.png index afc87a5cd98b276f2e27dc843c59d2a2a5361b44..928a0d7233f17bbaacc5e52f805c6643ce05c8df 100755 GIT binary patch literal 205578 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⁣>@_4) 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 ~=4qX)n>Upc+OKUY^~c_RY*&6VtJ|cJy!b{b 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

!buDFt83jx1{Qt2 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 z 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 diff --git a/fonts/mono_dejavu_sans_140.png b/fonts/mono_dejavu_sans_140.png index f9f0d29ca780df1d23b6dcbe6249d1cd1f2c0ab6..a413759eabdd740bfeb7f71f10f48ee99bfff9d0 100755 GIT binary patch literal 89073 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%0DuNDv{fLgY{ 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:GysNq*!6AHU_(2L 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 literal 98222 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� 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 diff --git a/fonts/mono_dejavu_sans_160.png b/fonts/mono_dejavu_sans_160.png index 0b6af705da9c919a662a9ad523d7f2457fc8ada4..bd8a2f40ad2563b48e0d0d6e8d95f71c82ab1929 100755 GIT binary patch literal 101939 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≻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∨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�bX!DP#Eo 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 literal 111526 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 literal 134816 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 Kq5QSwKmP}KRZtxO diff --git a/fonts/mono_dejavu_sans_200.png b/fonts/mono_dejavu_sans_200.png index 58a61d5ea6fe41ec0c7dcea6bb7c35513b321fdd..68ee62681d5f8a2dbda2c558c97627630a705a90 100755 GIT binary patch literal 138662 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 diff --git a/fonts/mono_dejavu_sans_220.png b/fonts/mono_dejavu_sans_220.png index df6d0d1af595fb60b5f2eb590c3901e4fe839ad3..042d7e09455bff28e33e7f8eea06406886366f42 100755 GIT binary patch literal 152844 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

v~bBu*Z&*OC9i;oUu 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

K+4%*)QpyAea-RMNU0kc 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�W+JmxMI6rE|WMK;*Q=7Cs>b$lcwmB(P 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 B<6{5- diff --git a/fonts/mono_dejavu_sans_240.png b/fonts/mono_dejavu_sans_240.png index 0eeb06a78f09ca19bae7ed0126c279185c081fdf..d2d68c5bbee2c7612d0d8143cbcec9eec8e1ae41 100755 GIT binary patch literal 170247 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�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

tY^-Z8LoHS2C6&%{x-P0kwk} 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 Dlz$fB literal 187484 zcmZ6yby$_n7dAS315(o6rF2S3ZyKb#OG-exd!ry-igZefG}5V33X;;@-Q8!uzw>?P zk8@oQ*RzKmvu2)|wbp&Fdm`0U<*_ixF#rHqiV8BC0H7gWA_Fue#7$~i(d)mKt)z-1 z0M+rBcNQp!HpE?1UJ6tUQf?y}w3Z5*DggK~0ss#M;0Ez8_!a=3+yLyD10b9V0EtUx zvxX?*4Gnc=ZCS*Cd9 zt~@C->G1OK^6_%>aC2~CaAIL%VRIp~FtcZ{r>?H9t*5QLyd2}1g%9FKAs(8lS^%~& zW%FO-wUWFH)CM!a3eiA!Q7~{v+!g-!C->Vy96)FG6lEl}eP;GdX5SSsKkcT~(|CMz zz6>$KhjH}pY)`XL+ceYCODSN}A=9;QXZ+s_bqpD}Ii1>~1A;&507QwQ&kTU)n1J@t z=o3oSV%$TK^UeQz>HJm%i#GmXyX4_An-*ZPY+Hh1+VKDTHsV94b{G2Ldiw{q%~58d z!#*51+!R<{s>4VCl7x%#vmw9Z|8^Usrx_c&P{ZF6R`LVs3-a?&G<;oGG$2Y!r##em zq_TLX^7v>KoP&aUC1B08iLh0y@aA`xb1lnYmE#2EcVy6(CLuhz(?JvTTQG1;@Lm=9 zsHGL&4wfpF18Hi5KW;IwL3lvXH8ayiTfFVB8E5og zMI^YYPD_=~fTm4NqV}7VqC=1%~fbkYHKWJ$~S8arg(XhA8bt z6?_0Y@m)XGOV^RUi83zx#Xb{1NT2TgUK$HBW7dY6elz;^2}tuc=qFuv~F%-|HO#0L8nJ2N3+F4pfy{&KVZ1HceNual7BgBKeU4 zwK>siR4@hw6b^M+{AdKZUsVL5p@OS_!_+|CQxxUqiSxns7FW?=qG>G7^( z#C^NlVDUVY`>S>7pDO|Y(jO|&Iy)gCweL`O?6)BuLrT2i?>}&(vdC(`zMGKm+?-0W zQswW|xx-CI*S#wAr@!ACMJ6-U% zuarfyG=MO%Ec|28hr!H4dT`4Fa!pY{irGm#5XJq|CGc-dH z*4lvzimq&*7}WN9cF))+rvNe|gD9<6onF^S=H{472BhJu5T2aBn zck~CGj*bg9lmIRy__qE^1}no00gjV^yQx2a-}gzV$QX1m~V^? zXa&L4vs}|)#|LX9c+86LD_qr`DvG=Ape!4@u4kWOVdaBX9IVr=+XBC!pzkjlk8{*v zRp?d63)jeff|p89&qGBab|!0A{}7MKk3>p2d+$c6qOoRtfh4uSn{Hqu`XjI8O4xQH zcMK7GEpF{T1fGXhXy{qGT#8s<906>@9|aR{3e+5LN{yxYmZy0_w0xVpBw}!1H?Y?; zeh)5|cy3`%Cc={c@JH3xN)MZM6__0n7jYNA$)FKP_=kfW%ZX18uD-Z2gV-S32w9@^z{#P%+ zaJP8*;xsgMoQFA&{^po{ksX&1-r6b00AMBnYK#K*ot4;2bgevzb)xVt0W3n(d+4K1 zK8mX|tD0CCLkU*N;gvVr;;UmF6S9AqhTr^Eo$?Nklx>)_lNuIW8 zLin8;C&SmCgh07T+Xe^r`b~F_9{U#$OAlU?@hVyB%=IP;Smv9NF(PdbsLCRqXkWL6 z!`qWve5b@EqzAuRR-itYQ-eDYjckWSW?l=fU^H8)*A7(pDx3mn^a}cjxc1LfKX-yF z)JPO=hSraYQ)N{{Sk3E12`qh6y|+`VoE$ zb(av}w#N|=OzR#aGpd=6d3!IVqgQ0mts0SeENr}^eGUcc*ZsoZ90iOAa08&=>QN8^ z#|`&ySC)~;vZn39eey-^TnsE3wv<4D0|<4Mq;i5N$6kH3!tRnV;d}kY8_>jkis27? zJ2#*EYMqT*5sh;?w7407$yvBv?Dno(HT0bhALHo@PwQYVoeCR1Rny^oLM>C=3V

@ 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%0A)=j1VKhKS-#?-);EHfCeRL_HMMxs-phF_!K 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

S{puxl3{UmZHjo#Bmp`|>?A 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

uM`W_p9|ziA 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

eZrj?`~{U>gK83q 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

RXJW^}iRr6P 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 %aD=BY=nKLy049C0w6zl{?q_?6Udw?gN1 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

|H-7`F4s*p$@xbt%cU-_!DZjweR2@KGMX zs$7wOzs>uk)b@PbBVNJ`*Ri3DO7~DW{@K%aK}8na?9c2bwFu0mJMa5b9d((~)Jr_R z$kG`JD#Z-s&Ybq<;sArEF93Bmo3w!NH0Khp!+@BV&%Kgsp6!9=?sk4nf=NF-WywPi zM{U2CWEvVzmiqkI~vWs=`f!O3Xh?UGmVO`4SADT(@^6?w=br?Wi`MMdgxSUJ~L zMBN@n#om0M%a^%ee!{{>LV!D#WAQht9BCLKe~(e>H2BV+z^tNoXrquvC)bD89`AcZ z2yZ#|U8b()XNY7n#ijfxzO!h$@Qi9o$!TGs$3<(%C*mf}DPG+&rF4pO6M2vK%&USC zHafJsB-NNti_yKvf^XdRsPq`ak0_kx-PXmle-G00=5=|7%gNSBue^|7T{kP#H&U8Z zXFCn_KW#zeO`bM*|8(hD((mJ=P@CG85^|&CYww>H`O=*1TS$oimdYgo0%#NVjCi$- za>hS@ZhkHvz}MMozJS2U-d(xgO;4qI*_$LApY)Mag!DZ{#MB^Oks3CCe_!_!uVZjhR};2$x_;6U)NxAjDGE1%mT>lI5eDlO0T@ z7SQRtTi)GAWQf+x3?7*nae8(nO*RF*pL~d7t9vch@i0u3djt=#n%{S9dL8{Vt5o9S z80bwxHxMLUWP7ODyl__!>Gkz>Udu9+L*E>)>iR(Db)vZIi+!S~z?`jDKAh&In;lbL z()5V4yTm8|q2|+8UbddYZE>&iYi9S340|DbeF$M2S2kFDXG6RCl5A}_BqSCi)7=d5 zV(XX+z;jaIK(I6h!fAO^cPk%W}+NKhvt1Vyg=Ej2pGxScf+D@j% zPG-U;AI+d2fQO5lkDW`1o%^{4H;*unkT5qtD;JM27uV&qf$jg_1Ge_2R_5;i?+*k9 S{~3cG0P?a*G9^+*U;ZB%X;+f~ diff --git a/fonts/mono_dejavu_sans_260.png b/fonts/mono_dejavu_sans_260.png index 86ce54e1a6cd7bd99cf2dcde478df12440972797..3a8cb6c57aea9ae05db9dcbb109a5fa3574246e1 100755 GIT binary patch literal 190156 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 literal 210322 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 z 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�ZIIuAURy8r!&d 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∨;C5HDj!Y7y8mYSbrK#tz_w3Nkm+4`)f%;_!bA5 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 (!^|P-5F8q3+Dl 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

~-S zn=`vk=C|ZPe1O>Iy7U2MCj-m|S%0?aj`YMf6>4&3YFv7Q`9yb7aaOvN3`sxaOb~7Z zW5x$(0OMof1#KDV!qGW;kux3@(!kyOrUR+9Vp&IYNRrzwYtE`xpA{bO4aU&BZrhWb81%jEhQ}zrOtQIfj`k0a8 zCbO76cz5By&q$BVhl;f%ir^9%=GVXxY!bnvTJ1SD45YycWOv=WoyhiT^ednI1KupR zSG+yNS`M-CR~Gv&^2a>0LMIXe1RI974NH?nDGY> zfwRdNG)_x$D>v+BYquUX|IN*r!guH=EvZu9@ej-Y#gE$ezYmP_CjVhmqYnu*=#oHf z0g=;3qIBW`JmBQtgT?~#6hV3);=ww?6W9tWwfA>27g8+C-p9YFXudQ)Z&iVIlPZ|r z@T%dAv>uhZh%i6B;X^>`Si%0`aMag`|pj#TEXAVIJBOU5xzY?xVmK;4Iu*bQ`)z_BzPbH>+olVh{_f4y zpx+hFrjxK&MA-zqp!i&(Jp@oMH>bSB{BY%c>!s0zuVTowqAxu;hf<&iYk;L1f{u8= zjlj}dRErKU=cemPdk?(aT}ld(01dJkN|6zavE zq3dS!9jW~a%Sh8>x_15BUr~=Rd^17pFmEH4t{{)+faEa~%eBs9z99ikt+T9FxnWCk zp4!yJ6iaFp+dC@_(k14((jK2VHA$j@IaE0{@@?6bmk$C6z~ASevmd^`PlB=F==zLg zlQZeZ?I7zKq^3wk3PT0GUfiBNGckRnV7EKe*QUh&5q&nK|rJ7?lG7>ahy!y?&&OQ zJq^-vOcZVP6d^1>KwnI*SzDHy6!WdYTjLULs%Xp)A1(>kJlRLFrx5=p>avwd%7T^l z#wj}3icSe`WcHbCVy3MTgE|DR_+D;;2G0*i2exF7qIKxjtIaKD2GMJc@#j`$CqW3* zWfs0R)kba`ti7l#hcwMz(SrK zw)Uc5>HAOmmM)fvPBkEWZs@wc)QO@dgVHuu!m}29*P@TT^qS!DS^*625+$~_lT4}9 z;>YgbF-iq{r@iXu)Xe;fD@{;}7m<`o)AJT9`(q#^tM-(dJTRhJKNwqh)F6tE3h+jP z)8xH{PHr1cksaAaa~r# zTma5ypao@N**;7>?2jkq_^9V+H2x|n#8a2gzN&i7OQkxz;^)U=pDXQ;A8LH%jPGCY zDG+;?2`puwVQdlL-1pO{UfMwwt>(|?zKSuOPRUNT#J1mC8CSSVV-XZ?+NPYWz#SU| zKaL5Oy^03D z)UTeai#xpdU3Rje`wcFLyvvo0+J3^mb~|*}gN02%J`hkLAeZgDl03kT4FnAfzaj559fUo5z2PwD)C>lRG;&K-6L41=)GQj;Z!u?O(@mWS%309fm%C&J zgTg}6|5t}MJ5GE*=`NCeq4a^e?`Vw?^<^ z$EC_+XnQtY;!tZkmD#teeYwpS<{Cu*5IS0Lcn0!rE{owuBKD0Zo2C_5l`IZ04D2B8 zu~RW|(RVhJ42$`ZwIVDR|JK)E$!_zKuhfecMGn^S^X^af&ir51hE?^Hp@j>AKC`h~ zC2^>F?=JRF9EkTBW@tiOg5kB2wvo?-xJAmRIoaoRzvT8e^f8Cyd}%u~;z=v+Maz-S@mMu1~&oX!*+kPlVENWytxuNB~3l zn6yK)RxFz+*TZH`VM^{B>*f0Gh1M}LFnCGpQR)aOogum%PUCwMY$G>!B5>nJ3>%dA zPxqdT?*!^tkkgOPePrxdY!`8OwT<~_Z~yxhjt4~Tx1t5en^x){1CCuhH4vLtIm^(A|< zDGed6nn{H@eFm^|1q59w)tjZ;sbR?E7CZAW*T}PR%0sEhVbcf}Gw}h-i?I z-m^Bm@rqV5XIu7}-({`41ktBf!vhIrdiaM$CT>LYYCvi-ET?U-5j3aHnwIdG4zK;t zI~VACvAp_4_b*u@;fIeeqohZolE>mmzaV|SQ#!)G%%F{xk2sXm*;DU9Nc2`ygKfFQ zIa=bLBjJQdgW}9ImdweUCUUT^fNZ7&gQ{$FYCj6Aowf2SdJFrVDen)Cd~qFF{5H15 zT70S%8d!gQWYQv1irE`R!1sSSo%N5xK&qdh zA8&!@_(cOz19 zKXCwh4TS~XNkmViDZv=WwgJ zrm}4Nm9aU1PB)lno+yZ*F77AtiDw2&bOF1RfBb&@MJ+VeTSb_>NjJZG=O?hBy4bSA z)}HVNlgA83p5cV*IYVVAqgWu-l6KGiL(rz?E{Stk^wFVDehW@vCVun#6s2hl0||VA z-^)%Yd(c+G?+Im8k7vX7sr2BC|6HREU!s$rEil&Kv4I0ux_NHA1ra=BN+iI`g18y!023eT|jc;W&(*0pI&mB z`YYwEk3(lR-Y-e>O1+pH!mpW^ts5-d)HNu?6~G3B!T4@_r) zFZD^M>X7+o`P^S!U%j`kdbV{5y1dHt;b=o@@V8|F9|k&aZip;ElLcTZx(f$9N40GB zJP}`(9wzEcb3DOn&m@2%ynF#WzRY#|rl>j9$mbkPe9v0nu^v^-)1vnp44m!;D4z zd>$bT>v0iOSxEE`h8EB0IUgB?r0`7DvTe}0OJzhNQOog4krh^ta7r&9o?y~v926DY zmcX>L4ahDPtX_;Y@d54|BcCK-X&QpT}hSlQTLi+Ru?9}CoW$i=3OQI zo@YgGo`(my2HZ~W-Ltrsv9s8$w4*CyU3=X)J@N`0uKpTR(j{`fh#NthVTrLpGzUw1 z&Do6xJ!<2|iXI|Jm+03&j#MS%nD`CQgb>HqEB?ncQX_LoB5#dLAKxK;dZ5n%=lYHH zR|LZC-h2ef1|LwJsJ4t%;ee!TA+^Azp~NrJ-`y!Iu$mcz2c+oFS}Oz@gaMaZ#F6XaIELS?gJRew((O1 z=<=qjb=f+6tMKYUqwk(6ufI9e6gkmr<(LFr{yh-C%J^XuJ$lF4ygL({(^@FTti_!L zpvtq?apwCr{C%Gm-n3A~kW@;1_b|#-8~D#?j5*rwCO^4l{=q=cyurKrI#qa2?*7~x zd%ybEEq==?mkJPOfjf<_#v08TJA|BwdV>p$S)#eiR#M$uUtzi6jY~4!j(AKPEc}a4 zb=E=0v=Sf1P74_G9)E4TkR2X{$c=ri1OC3k1^Yw;6cqX{BqIm^d>9UV^;H~;Git&o z{O&3Wphi<6Kxr&OFdCG1*DXGI{^LxiMuXe}*(!*kyloUVOJdXJK~TrEYUohR0^G^7 zuQ8mU`B<_>FsSq>ELII`81?-%`^5CFISV7bKbUc=aegX}S*=L8O`IZTa9IEqJlx#q z^N9+DRE8d6$$Ss7N=oIg@-bU|zA&)<$?M9;oNc#@Kz^j$?Ucll*i#-eoi)Gcut6_y&8c>6U)5sB-2EklY zkys=Gj(3@P#N!GUD1PFjDT%<3(2DJF?4RFj=VMpc14gys;6Yd< z#U^IjgWF*ejk7D@?6KB;wd3{%=Axx+dvG$b6-o1+tH?-6Y~n56C58on^nHQ^@9Oj4 zTO$Yd>G%DCuz*EBF$Y#C>Xy>P4Wxh{P11?@1vZ_d+KJ!jb9Jp7W= zK2$0Hu&DBZ#@g2ZU>yz|)}L_+>a>X1`y1jXjHw_N@}>39-$508aXXk0vDP!*qTkOu z?N5aQiyKn)UFTMfEB$cgu733p)4l&IKJ51oprxFo*`>BW;j>GH!r6~%qInIOI5a43 z*x?{w)Z6M_`8btiM@)qLXP)a zpR2R&uH~N@Y6gb@8_|h0#%)YA7HE%1Tju%4^65t|5|F#q=q_D%B@@ta8hDLd9G!AC zQ`V*`og@OZ(Aan-5#oQuR5^2^nifAJPC*qcVIXhEY)wRjP*GaGV|-Nu0NKT{pUd~d zxtaBzgMu}hS20*1{gCSH>O#YDU7Jy3dka3+2<+Tc;z|#q?ZwjVlUnuu_FdN6m`V7piUD8d~!YN zBp_m@?V;FX8`@%FoCH+Yy2tL{;Gbheiz==MhNG=JGRF?s==5((`sHkpm;iXq)mAj^ z{d}_jJ{*l7co=hnY|hfS^CR}Yez0my29Dh4)LVX?t^l1>Z6UV284ns0mK6cBDMC8gkz2>t9^imP)2NS&I4uNH_3M)ZdqjjO1lXHsved&cvyi2VQyed zu}!N}$C3vi0J`4i?&4IV5GbSmfB{Lo+DX%kfj=;G+E+StJ^&-0y1Upxu~QC1*W5!G zqvx*kt}$86h^&Fv#_p!bW)yBpc#gjJZyt1+_r%Gd*+PQQ{S)j*!jE(`op0=nZ3*(8 zQ9j2)_yj0uwA9QYOfY^pfF!0|bWe@$$y+6%ENAOz;NY(BYH;WK2J`gT`ADJ?{rp`p znB;ADD2`Y-pV%=XMqfNWnPJ`v5ueo}4pd|9fn3QQd*b#?1~_PIGdw|*lU`YKpRMr@ z+H{524}@CfG|%I%IHu})4H zSy@Z2{G%Rn5Xo5$N!vFs5nERo`M?Va1qsj%ef^K_{xj7&=%$YZza$g}MDRHKJ<`aY zy=+u8fL<$qEB~Z+!kB0?=p8V9F!fA?dh+2T{70_hh_Qi!mg*Oe~77)qwK1Po;7N(U(?rD+fX&W#KZ%1L0W=sCffirYrz9}GgU`Io{HC1 z=2Y(8nPLt%W32VdFEjp(R^O`v=;8>JT=>dZV6vY}LoFUH@!ddnM90pzK~ZPZ9X8bbS&VzU_i_C@M4VVUHpheq z0EhF2btx_1(-S=k__0JAJyzUe@U zf=-L-ov^<>zRNj?8l&1hgxvdm$RFYr5ol36maP7^89(4jYo}&ZI_fWsqv{4+^ia{nbnl19uL_gb&7t1!Oht2TEn z<_ph8jdsOJjl-XU^jEA!fwu>GoqQd1$Fc``&S^=Oi(r6GT5!+ktna6HV1_>agt)2# zaA9cd9YF$b#XCL{hws`*htB22}iN>2J+7JT3n^0+_LlAt1P#T3hWvPD(&klCGW{ z)ka~OHzvf$S?aT80FnqJjfbu2PAz1eBdZ!3qtb+Bj>fp&KXuu7Pe%1LujYd*w=jPg zcvGjc<`L%#Kvu%tFIP_oT{=nBJ8L>3@ZRcrDgUWzY&b2r%l|r=F1bxQB(3UT34d`KZQA?iBIs@ZV@A2oyiK@=Q`;Rl2>$eKvk{za`=w5z}n# zgrpi%uZ`L&B$5D6F9dqWZ(Nue#p7Ol_+j|zPT_UE;WVoI9UjyR`AVb|!giyme~)jG z+byymO@<7iM;-?I%)&@C3H}PB|2vklhv4sdPe5)(Pf{v;w)g2JL*Mma`4>^gS*{gi zhzP=2pHd8j{LO zPo*FNT;CTd8D+v%D?i_VF`0c~|NAwenH6OQAwWT9U~zWe6Y_<0lwwlUrM&!DBT1{zBpqAiZBzAx1HJmi5K z@fS2p?bFAhyj?5lEI|0xAwif#Re9jzkF0fLBkc3Km%E2c&!TM@CjhKDV@S*}ZjKlA zmu5jco7imh8*|?2(RYCQ=&1vwJ@4FKs^ag?Qc@+xuCtXeLAaAt_BQtVU%GDa2 zx)(n4Z7tF=WiDIu9wjr`Rn;3Y*XHBH29IzcHaUjk}@3qi{xQ)ylDtgLajeZ80j zq?8f&Ru5o<8CM>-OSxdnO$atkA{JmNxhCx$D#rpI{MmVF6k+ze!~k`ekn&z^{Dpx6 zqS+YluSU+Un1U_~D8-~{c?|;;441yKwB3lJMa@4qVEyE{6guvz_C@$VtrJLP?k9z1 zO}2g%fG&m(e2>PROEXKaX217(9$aZf1LFbruyu3&k=XeH<%b*nZVk$1C2$CN0oBy{ z(K7$JPb`)=e~^Wh?&3gQ*{^3xx=X(g;+Kvh#H+H2j8yG@x)yRPHPQ~m9h_V=zP6fz zgL^G*Fv+qcGDOzs&4ja&Z1As{B2rL^`I$R35SwGnQETQVSh^qW{7fkvK*;r)HVOST zGo({Q)!vOwm5-=$=Cg<}EZFdF{}(h&{}}IgeAkdz9w_aA67=8_rF!9TKapDa8~%)t z2?qb^Fg`9=groj8%MtaGsK>vhRTH;GVDsTO}YizUl#H4PjxDV zXEvr&e|@%)A3TEgcj(GW^t!sm?X$wDt$9CF)!A?;L-waCHA$51?%(yy`(mLci1qmr z>eCMZaC>a`6Zlz%2W2FVKg2X9_e#7fJu(LXvYWq8?L6BzXX4VEJ&kjM)$$5)L*>2{ zU^agFW69dEE$_sGZtvyL3;B9`y7@l=AAY{!_7PXbepvfAQuxB3Lb(AO?htYpa&wv- zrk69v`aH$mDzQFT7OgWF9=OkGG3tjMh~Ykpd28uXNU);&C>zvE0|5@nkZ)9|Pot|P zKKA~#VMxR&pt27LBLY@_Za7Iw6Av{NCTmD95{5U0wh#-AwN; zXY3bi(_nQK3Q2zE$Z3a6V)Nz@V%Nj<3Ge2aZzlz{U+A_m3Q#o<_w5AH{6n@-+ULIP z2*&wY8s!QbvSt;|k0T+I(Kvugq{cyTrfWXK!fGvBRI!cwJs^Pg)3{F=&)1U*>nC<^ zcPbg?bA<2|U=F_2*RxMVRN;cR5|vI49U;@weN}vXhUFBIKtCum?9PdFG*J9Sb*zbO z_5n}>vi-O0AH8n`F_+UYA8!bP=dvy3`r}ogFqSys0{pWc1naY<5x`5pr8E6JS?cH2 zRfJj?5lES(*L~yK0RvOLDT{$3rIN$jjXptZY=n%9)S4krLSLLhVeY?@DVf|P{~-|W zGlsqb!1bG^ItBND_Qu%SBPMXJUCK5!te=jUApq)H816s`7IwD%-lmhpzB|O&xS~X)NkELi+`a}QK_USo zVU|1(iW-zA3$5|2NNFr0!S0gKwx1sv5tzb8N2@U60#8*R9Gy8EFT`qp$mYlchZoHT z#A2l>*b|5wLt*p!Sulsx9~B-!Xv@ z6DT~%Q;6!UzYPWDo7mHpzh5njH9){}ycR_7j0OopbaOe5I*)=}Y*o_5fWl|bC3q;YkRmW||&uIHgMXBl?&ev-%uz(PU z-8=ssF*l|6I3A+l?|%^^qw##hkpvmr>}nCa;wfz7sQ?c+GA=_LKeODEltXFOj|iY8 z-A&BTr+YnZM{4jumQD1Q>EeaAVC<9s#Tz@#mBXLW!#KU`JeBoO+whe!@UQ=VtAv! zq#Ba`zI`e(#m1XA7K2QkWPX$G;7q@OG?=a)y=KP(uYFb}&nivi!*6DO5M+f=b#qy< z4uHZQM$>CN|7$1v{ZM7 zci}!3ph9apQO^83Vvp~BtftC+h#hb}@fAVKdkhS{AgfcY@!{{O8y2{#d5WUKODyr8S?jhgoplx5Q`^ydX=&nB?zit@?Uf+A?ER*?efeh= zfy^zqx;@6G$WmN2Q9KsPMK8?1a3g(@?RgXZ1FPbCR-bWHNPyw1rDZG5+16?|g{j#N z)wkdfYdiyE%)DXwudYdHTGw$^?LKaoynE1c=kXQ!b#%_&6>j!6VMK&gi&V>}OZB+W zDRKB%P{|RlP-^eydRBAGLgCfW2{zdLZRHa)Qx z)NCx`Sth1Fv~hie32yvi{IBYTuc*n|Lnrf3$s>7KAkRXqK>+OY!l`gL?()LGj%(p{ z(D6AucEI|NP*K|vVoR^VfQo9lIMVh$C`8t~WL0A$^w&~VbABWT`pjNUIIFpmg zqh*V=d{em)rR+B`ZEgqKNIKfrIfzE=c4i5{GS`AZu>t&&Sq7Y-Wau^rsUhg=w-^4W@i<2&#kD%l|bqQ}HKv9l1=*xm5U{2m|FGqWAG0gR{Kx`3Ev z5oczvHY9EX+YuZtH=+N;U4eRIJxVZf6g3t4=}s=YKjC9?x8sZ5EKl$E zbhY~1x{CV4dkHlgA=NY&YkIj&MZ1?x?!V4zuQf-a8Jf6OolYli9@rLao?t${^n{!* zmw8@Ldz3Nthg53hQd$YwUfpA}hq;DDvRe+(&2~ukVm*T*f=qVb`7PnWN5xYHlZVal zEPXMSLEGe@?R;O!9FI(=bkmzSX((~gy`iygbl^BWUgJ*|K#RG1=yuAoo@ew#FE?Ji zvGuhS%)u0Z-D*0iF)4##yXJz4xV0439q*O;?w#A^Ya4DEQ5zK(UoTTagp#|kfI4OZ zXRg1&2#t;EF8lKI*)jq}N;-RhH9!d2v9TJb-)#V=0N-erX*ARZpo*Ud%>ST&LP(o} z%(*`z(ga}?pj@2df>|<_90Zbs4(N^us;_WVDU{87lY3TJFszIPfYVhhxiM`2>C02O znFt@}r~JfFewYFR2f^imVkY3CdSm1j7C!V7n$uLN1R46i0_wldl4w!Yhk{2C(S)-& ze(8S~LPX5}uV3hg!67KeZ*{&Ab&YitX*D^tZd)~h|J{w$;~<%T%9N!_y}#wyqXQZV z6bt6y9vE|JJK5xlRf+EzLw{L0!>m2PXX8CoK$Js-0Fe} zXJyr^GV#49|6T0LW+e8zZ$Df=ia6~s3TjM(ApEQFudAF7+l}>tC~BadP=LPGOz3!e zI720}%3RS&2LTuWs;}o=aN`Td;_$TeB|EdZJ=AV)=;yhcH<-g|x#X~%?{vwN*0H+1 zuX^5IogVkzC>lZ(X#2!omgOupx8zKaq#r_Kn3>9qyLRg__=btYW8?bF1oD<~M`zQ$ z1Sf)TzOQw#^L2w%(l_9b-a8^75lL8DOZFc!XPL~0o4YQ}YUZ*m=U2=$td(CK4CL4* zWo-u5mN_SwkO7Ry0OPM8PAY1nS+6|oXl_R{x+Bz#Va>vuYi=cI%3j|9DnR!)LL>?= za^)~wB_{OtYl@z@`u0;>sSGE=|31!$oU%m0Cbvd5rHC0{M89Uv!XaI`g{mE~Uw)U6 z{(u@psF7f0eMG*EPX&y0!M%?jhwJstp06@nP*}hdIrkOof=nqJS5CN&{30KHS9|-r zB}AhbMS_qaLA2o1tGknKTfNH+eu~axm+Q)BK*ex_bppo9&85={U?^~jX9_Bo(fg7p zKdPw{5?;HCKd}RppN+GP{l%t!Q-mkR{gkb3JlCha3Q8y^{qLSKgEs9^t!jqHR__?v zak8IsK43G}kj9Z(Qg5f+{qt-#g@82?eYMXG@}Ods(#lNB#v0zp0QAsPH0#_?*#CzEk5DWQ1oKw5nBD zcPMPL<_&zm6vbt{bBz&b=fUf9w^3nI4i^l0Z^q=+2rI3+sUzH<;RXly{%C!Ip`Uo7 zhafq+%z}L%?glg2w)2X=;lD-jkn%D6C}X#8NriXxw$khqeK>v-XAAtNaaq)Y0)Pms zn+x@xQquhKJb-~OnRP!~>rL1%pOVIRP)>XM%x)bt8)F7$u=}EKow4ZV6NA_Y);mph zA4KeJmZYvS{m-B$kTIXg9-&5MJRuhNPsFbwl60kLxkboE#KBhHxy3y}m=32-3~@#6 zpB#>j@VN6Q@m%a?L{b^8EdMj0vxdfk2}Gz_tYp}e^rzYn6Jse;F^J>%|KTH#=%Ab{ z#Y-My##VlS43SA~VD>Nn4wS1HCE((SvV6M9;nLm5{q& z`qBkdrZpM4q-DY$YlWB%)@L%}fDsy@&j;SVu}>I;56g;W4w))X`Z_ca=fw3Bk#G~N zj6IhvH2*CTr;Y*~1QXz80oPcd@!a4|shN}@gvrBxY*x69L=R$~Ux_W?OB-mMdb;2& zfRzn#tOa&+ibn@hIH+jcGoOD?KD_$DRDr>^6QhfgnfPyC@wV>`IlH=%zb9&_zR~6& zHJm*TjePSiXcDWlQkBsh#Ctx}z)^R#BYm8az(^oGf2<`P^JW2SV5RObQUq;QcE0!w zDHojJ{x;iwed~e`^M*g)OYq303lS=zKH`c&QgvzSvW2XV#W*yRlU?1vm9Jwrm zRPG-8-@vNu2thzqJ^oR48QO{kPahuEw-csE;1TB_18~o);L;zj-jV^b8$71e}eqnsF+Z*Df#1H|NeFKUmWAOQtP|!P>9)Qzwi0kSVox3w6WBOvi6}Le9Ko zBm|a5_{RgxWX;a6Oec#Sa_Y8Z6rguNHC$*&nM^v2NoI z+6CpZ`DElP3%$U*)evW^(i3kiMp?S0vv2kN_})Ja20peuO>Mx=v1lwf)%W{U95r@ZRQL*$b(fKC29_Kx^w1RXlJrR@lbqD z_ANO3RYou+x|91onHm`11(|p%Ai@G)7X_FyH~EGiKg2bgNdlP!nHK#O=g%;H`>zLj zGai_=s1d)C{$!KcADbj&VK(ulf|!<{0G3aqQo~1HwVJ^tH2yn%Bp)0r@0QE#B{{@U`6Ixp}n%9$MK z#BF~>0@^D@ar9R*Fp{^M-r9h_Z7jFl7zFlfSvYM64?p{6VJ;``@NqdD#PDNxNu7#yNE3m-*-YTwwQoQEVp7>g z81vgMcGT>F)cTbt)3-bD=JjpOJbUxSttROf+^^YR+^0hK%IY2;xLGv!PRu$Rgl942 zRc>knjB~N!Kn?QP(SQP=NzmowV3q)9K?Q*dx_b*=TEcfl$qBqosccf^?mHzzKaC(;$OeX8%0b6QuX%OPCc@IAw~@w+%>ls z2$o}bNg2C+eE=AUlYHcokoggM8Jh`2)ZVILl@XNusxAAr@8sk7QWWNEqhyHsBgphpuK&$5Adnrw zP3O+HnNbx!>|tqDIv;QL4_{Ypo;sgpIv;!X%jX-_^(VH6l!=K!prmShs-WU#@FTzpOh zq5UEII_h9B#>b@s&nyP%($c?;df&6>3;oyxC{=OY~p!mx@+4_OXg~E$pGBJ>8 zO<~QNr-Y2ri8a8R+8U_s^m;caeNNxOjmKC04*OlKuhQ(3VbLb|8(8Yn)o9v_Yi59R z^!5L!wxqD_NSv7Ynq~oM$qvMQ+O367{1av3rp?Fz=Ofb9oFG^CqS8xdc=Okudj<^> zh^+Sg2}E<7>QV2?@}T4ZX|;FqUr(R9nmMNA4sBB4={=)E`|f(ug^3&4*#1ytom3_0Q+7bOW%4jYsz#MNsabqf^xN?LWTY!gZHf1*W zH?~>u=;5nqk6IYrGvZ%s#!ron@j5x2iYq>8ol-B+xbVZXR4K6kZF6~2C28;x6$Ucm z!xj=>E>vQeP9poM!sLntGk4XSFz*&F6_u&SQo5Ta*(J9y^?H~J11BS6+d`g);DMhR z5um@p)oAE1@TMIZYGUBkVrK^=r1vu)YX1ljDYd&#$Bk{As_&QP?)d~bl*W^Q|B(g0 zDf()Y*3~}TTY5G9c%BT{oXxNBAYsNF@MvTHyM${^!Jv6b-{?zX&*QV%4_{TbeZa4s|KWX|qSXr4 zBwRLUyVQ+E<9s@B+=o=&{#LcU*w^VSJ#uvEE{Q|(ExAmulFj90dCca!|9*r-o!Qp@ z(G4WndLXv8FQS7kCopWgq57?G3RRnQx4z zeWw?jP?6z_Od}G}kSR2SUm9cJ!=CT>)$_zSvmC&)qt~h?3rbyGYuR4VYt|fG2g>#8 z&+=R}eh5G9z|>A<42}g#9CPQ-_27X83^Nr)Fc_r{KxP?DHH4`mnpHZUrmu1*s@Aq! zcFJnMFhFVP3pB(KdZu%m06xoEUBD1mY(f8E?R^s_$uLjL0l{d287g?{vaPb|q2Oj; zg9O^D&FhG|3)LYw8i%AubfOI&Q1?Fm>l_lDB6P#e4n$o@vSF(1%ph1(@z2R*J4vwW z@kNCO&+Qhwjg`Y{9*Em-41s>@KX?UWMdCm1)PjmYa;UF8jhy z93hjpE@#-Cj%X`GS}~!A0r)j);EabIXze%21ixa2_tR%N?rweb%A8L6@Z#_FMP&(83?Y15R?d=TI zDp%I+Yt?sUSn0mQG2;8jCCydOwa;5A>U$=8xJk3>7nD}*%zXKX%rTLVU!RIJOT0F6 z`t!NCu775k(uxeFr*rG`l4t*O$6W>1+h-}%^l?M8ulV4o4*lf(-|H9W-mo1-+1oH; zQl?tec?qUJrs*Ciy1d8HqvyazC_YKx%WSrV>coJa!-KcWRU;8iQ~=_ znfV3FC$3#=jJj}d`Pz(4E)lGiSI1yQNiz(cM9KOaTZW=K{nlbRRoj63&!(?Y>gEf! z%!9SJ$;td{tf*1Su4rZ9Cf;$1M){3n^RnB2D|^^tS3v0Tg_omuq_wkDDZ9$C0jkzN`C9lR@{ht!vDqj8MSk z0HUza<5P6*5A!q{;o=uQtN(c#Nd3r6C_-Zw`- za8o7dZ}QeB0}SMjr7$e8g$YLQ1v%jEnT4xTgrPgFBLh1ZY^TgO!?dM?8@^la%Z5c! zO0$Wb;{4Q;a`(!g2$~P-n^KzfKMmI`ee4sizcgQO9C!SQQ|Cq78(!aF^JIPaf3ISh zwJe>hCJ0JY;@v4Y4B`rkEWpzdWo{@FS)`-^a4iQs5GI#%ab*$1) zT~?dCt%uz_=Z5Oa#^p52`FS0Fkxs9GRc4bOz~B3-TnY5Pv1J1s7WW9>Ood)wPt!}* zy&Yj>D|t2#B_r%brO0g|%iqY~AnW zCvmn5*zH4YI6us5Tg+g)3;aBzjx%t=`=6J&-Sc>3dlR+*Cl49X9eZ<`-dg&#TVV^T zTJd%!6!qi@OysQaJI#WEqUnO3k{W{@Taf86dLzrQV&f&64_ZlpAz{$eRm$IyDc^K1 zcV;}UvlAv<^b{JP>b4Qh^Wip1;&Y8(rA!qKZtFH%n|#=vw0{(3FVgp0`sWqoaRm5m z@1__QtMuIHEsIbx`@gwZz?{q~nUP5#`3DQqiMXzX4hHUDUnDC2S4M`| zjaD%4G#ApJ%HUm5EsEzQ=@-)H@vbyRP{hH1|@ zcC26%oJBVt3$MK;mH}sx@JzEUy@sBT7bi3D%Tw--{hhV_q79>p^ILFKAWT#OMv_nF zuTE;E!2!$4EK>jEIri>*ro;94W7f)SFf(85N4TwVa4niFQCI1$Qk0{k@zkYaVFqD^e(EmQ6cW}*MCP!6?>pKq@Se6=}#9#Bp2IYetdM<%)R`8$}5 z{Pl3vukwO2V5IKuYTL{^x*4BX-$NMT)Eyv45 zkGgESAAPk1lMZn7baTi)t$2odLYJ4j1dlQ}<`l0cFPzcO8Id#Ft}{t?%Q z0{@5yfO(<;iKbwrp4e}yA7yE76h$-(ia+^(rz~q)l{4dsx<~mUkn81oe5=}>@t`#h>n&|oOX{IcB z@%!8Q)ze!UPlR;v35@bvDYzT58@j#fvM=?%_yzw6vedf1c(svC@d^LV?3recbpbQl z?`5Dg$!yX4=&8h)lt331{g*v&zx9gf^u>pTXF<0a?IUQHMTKDw5W;hh#UFu|Wz+G{ zFk>HGWV2;dA@k45m%0UfrOnF>G2tr;mDH3?P~}r6)pQ4l8c$nm^>6vn-JO&3gV5Z7 z^@mZDgx!2$fjSdtbt3`j`-=+*^uXoY_U9Mx|}s|%3_KmX1r~`@(OA1KYuVt=us0*aoOWtt24Z#dOB)uB=eWQ4}pBZvtjwQs;1bF1`VjcI$0tc^P z%{$8)gc};I}) z)*RWNKYnz6m=%Q0-OPpPt(eOd>hLhvlImuC$0usqzsum9(e?)1a_0a1NYAy47!k*G zyv|t2w}2n$>g>-W@M=VJ(>0ipmt}gl#8;gSP#xAi1|4SPfD$&yN&Cu*66NE81bgem z+4SS;8wGs+22TCIJ3jwM2ugHHIProv)yM{gx0Pm2-o4L3OUPOjiHXtY=Pck6to*F7x-Qrqo7I zQ(PPcK9_Y|6Roe0+?W10e1gD~{J!zJo-v@&g)_R6!NGf{GyVz*=zX9k8;x;vy>QjkUj0qKyIR%uCz84yGP2}uD70}-T=juAv!N8| zbEBUJnbK@2czYvJ?V%Yp=zAL@tg(_fVnYN~2!7k*vsd=p{49jo{)KqiPOV8JGj6yY z=MMa#V;z3H9d&b{Zs#OAqJOTa3YzRUCPO3m-ShQ{tY=ni>#~ zzej$(%~@YxxFb&m>zzS{J>b0Ww=4c1fvl_lnN$qd_(2Z`2f}=l5r>WswIJM_w@&#I z#s7X~Xsx$<{rPrV;@Feoc-kO!v|9uFbp4*4BEP)LqFTIUtspPMz7>C>vIt?~yc`qz z#hX?}mGPU1+MmL^PB-foJmb2fGDai52bX=}IMEZ7ndnHU63j_Z5#1(SU;{T4l4N@a z7-KpNH;AQvzdbqH6|%1LG!MG#FD}QC&(ep_M{Gc4m}~X15%(g+*X-WZGzCofI6??( zB@%`TqGbG5H!l^&fb;jsi&nd!Z{>XmxuOnL-3N`bn`pbl0`A@ge-Vc>1Uhky&2lRD z6mxz6*3g(ktt{)5m*&ccPRsaUC!eaY`%j}Vwu0h^JYn@zlQ4jXB>V3rxhB~MMc_d6ji4X4P$k4=Zzl&1ztUJi^ z#IK;Kt*=%1W54DfHu82BPocqX>4T-9q8!1+`A+CN6KWVqxOcD5hA#$ccfu{~@;}PI zLk%Ak(w&A~b=6%#pfPYQ@rmC{P*SP0`Sxu$n&O0S!#SztmZMVNUar*4m~7d#J^oF4 z&y=P9y_q6cFK(sCRhv)u_Ye$U7}qe(jj|);hpm`m6acUgBL`b6D)>x}RxU5O>IDSv zM6iV~u?2A?NzsUJmh<+$B0Pc(Tpc79omK^NT)%8cm&ay+$fHYC+fw{m82>$e*i!G} zO*Mbu;zCDY*{4Ev5Ju4-i2IId)B7AK=ho364$l5a7JNYxM1l5Jg zjap=+Yr~>Yp~V$L)UglrCju)zm^-UfG)z=R9T895>^ac*D;a^=+iJ=JefW51?bs;z zL-sr!5$M9Hw3A%eD6MDQW68CX9WkxZ-@N{&N-7@&U50GxVW!zUl8V}{UXnb<1AlGT zu%Xpw@}{($_o(36RGk;|;Zu^!Al0)nlqe#D>+uxoDNgff4|Z)r{eue_MtcCe9!iz* zKOcCORq!7tH<_=Uy=(0CXN!Ut9!8AwJ`Z9V`yp;^Dm3D_!ie|z2aY^9$tHN`3&k%W z$|91m(^eZ|-*;}~u5#K=Ni{L=FN-*KN3p>$>8We|p6GDa3M3>Dyo)6**@8i@Q(kPV%~8C9 zfD3NJ!ATZ3^=>0H3Z!hT2?9MRQAl2_6|;8$ZWd#KXG=Qy%s_Td{{pGUJ!2sVM=gCW zUMfzBNAy`RL>#~Pc0P!1{vDC_{Eu$jBh%E(e1fRkTVPyaQD(GIfo;o&T;w(9sHiR} z(%Bfk#sOU@3Y={J@=mc9xWfqp{n#B{epr`QnQ^q~kzCDRe7n8hzeXaYNFZ1j3gX4%NW2z3NdT|aEPaLBziVN~?KMp1Z?=BA6 z%4U9)d^*y3ZufG`XTKp}i3DY;*zskt9AiPQS}{jN6@v%uSHP9A%XEBrhdF0sT(uR! z;YB98|GTxjZb2HpW7XviS71yB*`*f`z3aK}KP1}V$BQG+XBLIem=yq)OXj5x5vZMx zoxl^Tj{(%KrzL<_8J9xb?x6<30b{#ra=5c*J3o57U*1Bc&m&jnGRHl^%AM<^4)UXB zUn4Y-4Fg)(C>z6}Qalj-R8T@L26LRsIa+xdtuoR)c~|Qb7pMbQ zV8VZV*DKx>wL-9Rs{^{)1Ncc+CkK_a%`w`y#z|YsvN6gNbPeuL7F0lcp!Di!J-+o5L6sEd5tQz;Rs zQka@X(D%6!50!jzs8^Q#X+5y)-tsMqu1|AwA8%NT|Cun7APtD~seb8e`jdLg`fK;T znwuYVF@vJmwOUW?9PT3(seQqkPOv4E64%^Whuc^+vQJM};gj3;YYn#$PO>sxb&3NA ztC%qkLY2>&YnS@{_Z0HBOhncMmqu6dj`56Eb~e-gAVQ>%5QuLVK0lNLv08hHi>p#n z!y{$iFHazq=?8_f@mq=kC;yB3QPE4e?OBzp%jo zhA|6do6Q8$Jzkupo(iBXRfccSJ;`vW71#9_6PbV0O+MN6hjQ5w^W1|?CsUN(^N6^L zhstS(3D2AQqL>ujN|IwKf83`Unz(841tLOx#hy+UF-)fw0O;la26{*G#;8D$5AhPe z$In|R+}9a-F~6SWF_OO6ZQrW)U`jPxc(onp^(oh8HqLy&a`6KfA#gsmQSWVLw&h`d zgL`E)d6*rr(o%f2PLTTi$L*-MQ8J@K`++vYE0sn18eWA`Wbj%N!vRXvi=W-k;8^*- zv%9QBe+2JWIh-T0Pb%3!Bj&wDtr_CMWe3eG1Nlie_J0@h@~{$ohzgzx-3Rns!Wk(* z;jF2g1kg=U8mrOlASHx`T6-?G=xE?h^Fo8Rp1L>cIEr&r?2KiUli4ziGGVszw+AIf zKM*?17GVZUn6I{L(WB^lQB;aEB;88W>UgNvTqq-^Rfrj)E}sr604FEW{4*U0n8#zl z>2t_~OMx$q#a^%Z-^xBBes`T9$xb!1dlfsgT}Ch**08`v$g<|q z%-xkDePvUfUkrS&4ZCgnTNx=ris_m&o-=rhsDIegY(@Rf|JTzTvEA`WB|M%aX&|^? zZ&DYmAw-K|H*R?J(?vu$O{)Y(>^-=Fyj zrEt_RzI1SFlMdd0STnGzdAHpLCP{99Vfs@zUwBhXWA`GtUZ@ro@XupecmDDnED_Vr zKiPw`N3oTn%JSD@2QyDJ5Rs(g_|-K~P34zC)VG{oKMYiXgOby(hfv>F7%0wQe z-jjl{@ah>C(CBFCjoi{S&@J!%PXF;4bYa6u6>mg#u&Cpc*#-UGH8vm!pCPG*+@pd& z8(D7^YbwkqouLg+jZm@YE1;|EY|Wplk>P+T3}Qa8;agiX`I*dNg>5x^rcUoD2F5w$ zuN%lW)Xx>%$u?Mr}>7@_Ls!11JQ{{DbKwZ!b@vO3+6 zbp}#1!Ud9gcb`mYHl+6Wl}YK(?(7|*G47dMKlR=x2$FzGsB$ABiVb1*?va3d2EVXT zoz8eD_GL?~8u78eMZM1k7B&{NUUn9|KDV}rNuZC`Ew;9#6|LqGo&q>>NIxcjCYq$@ zzc5yFr6PDD_=AaDlLrC5c@2S>_`SpS_! zLOsO^WW*rAC1VJ8A{Ktuw!OJTr-0DmU)LuCc%1T3-PjnG^#UO_8-E!~21d*9!*6C} zWVedN3;4?=O<(!2N3yN6J|@8GB%kf(FHIGDX=EJc3SM z+8C-1S?pcPc(yM^V19F9+jn|bP^#S(hM^$%Uv6FhTi9OI;#7%TwHOF^)y^EV)6Fl} z@p)Cw-Ry?x(Dw9spM_@!$0d&4s6;E`w4spb6vVO<&@XMSdERIWdBVFv^mQxx+K7FK z0;!MGM6sxrpQ!tehHKkfma4Yf;eP%5%dI1T6F51_WU->hp4|WtxW!dl*El}LmL&no z1kX`K8!Lbn+zLB95W4$?6=YU+;iFtlrki5?b|TmT3)v09D&5~TBsQ-WAoy6-F6l9a z#q@jb52&T5$=*d-^Rfgur?h8u3W)YacaM)7C`S zKdZBx=t>G@f8|JeYv*!EP_Sk}8s=W@{f?Tx&Z({iKSrsdplbfa=R|w|X;1d+-unPs z?lKFih*{Ize;kN-_=yAbH9RqcH3j9mRo8*Ny^4)PA zZhD;5Jxy?zfjd_9qj~5FB$Q%MU461*spaEn>nc9#o83IU8rErSRY71Av~M(0rQd}( zL(R4shls4U1bGvvyy;|Tbs)o6M5D}-2XN%#wlUAYB405qoFILiLlx>K43+;XXg|%h z^z874&tzkxPdThhU5(t(doG+_cQ&V;=D$C@5Bb7bYY$ZbnCZfYlK`7|w~q0<%&jq* zHal4hluJERp&V_mP^7Vp1guxM)X>J4m{GdefOlk|=_HE_fZ0V>;4AVLnso{u_`!d8 zXTakpxkDP=0j*YLyhNAF-RHU&^P9ZWLJ&YkH}S%q$2a2_8^@7t&J&+-0A^*3oi+MV zM|a*U;bn$~tpyvVH`Pgp`wy<(sjo$?ygwc>z?Oa3jwE48G55q@dt;7`_7Q6udtec> zytrmC6?F%Ko~v^cvDpK)!4)=JJm=Ads>39v8>8U9iJwN-}?YI;2I zP&d&Yd?&6cQ2;d!YKxbtwZnY3c`0r&S63d0gwn(Bsu(PBp4KEvU7DP=%j_&jkf}d; z0ZBXy$vPXT9H-LiS=*#QsTo#q5NY<`eS=p|O$t;Y%!pP^#*e>?G zmNM}A^TMqTOE>r&s@=@0mv9rhHD!7JIkUn8+H^UZJ3-2Ls8cLBltC%`Qg2cUSIy}b z6JIG$3uI5b84xc)eD}sOl3}Ot(IV!*(t7x53hFNM%Kswc(J~u2B6ihLpv;p~9+^>> zo>*;JF-iHVlt+DQ^?B}wbKWMhgG0t6UrpZ=zidn*ze*p##hLD-HN1BA#-TCsxsSRV%TR&ua$}axu;X`1jP1oOv4p77c zX{PvqLH)z4HfgB~%U%A=rF8RjxmS2vw5i8mmPjRBJ}Z)V{Vm$Nye@jr6k8iu#IEtq z6!oTvu3um)z!4*UZW6si>^|iq?)n$OLaw^4Cy>Wbqv9t1b}q?L-|_}*jb0bjN3P7^ zm7QJ*z;9Dm5&kXeYUOUuieK&W;?D`~aa{)no zG^ThTopIaINXB1|aDZgXkHLfpnz!54W=*J==B&AH6{_}%b>FiHc1tN*U{N@HadSyy zM*dF@t{v8B>~+sb>^5diHGKL5KquG#B=IeW+{2lw{=#IPH6J#>T><4AqCq`Gjph`sq)LL?^CasE*GwUNGZk(&rO2>fDAw}B zD#NxPVI`lXA5zYVe#T{0)T1{QgLKh%>TjLQmQNec#}6HoJ|WQDLkQbhzk5fu|*ruk-!17+fih zuFsd^i&1rZj%VN^ulhoja|E=H|FCrTHD)eVZ*JDvuHF&9x#^$*en(hw4f-Vl6RxY> zE82BJ!}YnY@K%QhLz7j_w!d^59ZV<6pZvT2G9$P13TA-XG`(~2?KftSiWZEs7lhX} z_ofTLoS1_@1hKw_4wdD0E6b+QaA-N-Exh$)F+AKMA3B+Pj8o)@N2$+K8Lyd~dxy_b0_Y-HC$$JIp|uK`d#TnW1;lnUP7fm8FSu zu0haALkTVW*`9byVe^)QT}_UJeOE2ApsKBc>wgEklfj;QcGj8sd@g=){cG#$XU@&= zAXZ1{J!?<;QVNFKQV6?}qUagAMxvwW(^4h^gW4f%N(Iq-8I7OeX$N58@#UPs&nR}G zws>IjEZX<0&CuD2=j>dk`Q#+;-IQWlf@2;Ps-j1SpWLct+mf$gN_ zuMhqq)#ZRb#Q{I{<@LWvX3}MB=pz{@&U^E^=D`RD(0V}w{bTHPs^zz;b>;%b!O9-FO#rZkXO z8|$;Kv_Ta7@ArZ0g^(mPo|7^6G=DJtMPz~g7!RsCFY9rR!q#R!y3FUbB+t~1O)Cu` z7UU}V+vh7jYH%d$!DSq>380`L-uuC~%z5P$umMbjKV1#Tfc!y*ZN2(*?V)KkP%*f@ zd2~ob4qVI`ke6kX>k+P+hzN!q73OM@OKzak`gOIId^i6A@B!abb*FQyhCJIU2L;x|T1m4aAmXjbfNLgVn`0AVbr3 z&x(627Wu(H^*Nf{rRLi}ECN*slOL6s~W4?c&5f>4a3p)M9XFx z`}&h@L#I0sPtPCpD*wH}58j5v0S>MySHFA>gr_kZZ5ql&Ocz z?-UJLCmu4J9ClI#_A|RcYMhk@D&@zi*>tZ-KGXBReEB_4B%;1cRa~ zEHuQB-~A?EbRyz_i9C5#u%K%r(MEcsaP}Y3wRFb(lz{Pt{^vJ%iU*o@O*F)U%ny4k zVD|BET~^bdCs~?`UrbAGdF?vnS+c^cp~C=Mpc{0l2^%z5pV4K z9N*0r?9Q7G%CoFG(`lF(zvHcMS(G*Yw((S8r?CT5Wa=)5_A;LuoG6^zdtIRX!orX_ z-2bYD!R>5ql^l9NFf*~@>FgiBJT~h2CtLec!tt8VJKt9y=J;F7XEc5{D6YMmZ7Kc9 zl1YsCm?__QYcr#5u8H{5*Q00FSp)=T7hN6EE9)|uL2Jo{@$J3Oo315>Dp-NOGCcw# zG8{e#yAno_P+OhLEM6_0-7m$m#=Vu-^;pZ7X|Bh8E6t#U%~Z^}p5NL2`Vc`~#@lX< z*J6`yiVUmV>{C{$2sh}Bb1Un!D2-K;{mk*|4BFMQ_`cdf4O;L%XtjpC-gLFjOU%!z zL`tf6>lV{qyV(_n`NHeP*h62gU)5rFE?>-l4elZ~t)pYwqJIx<=tOwij6tPi-mmGzCv;{@^zvt-LHPWT z{F6!HdxwoAUvtJ=w#lk4j%>Sco}0wjTJ4Qj$me!!(iUfCZ$%WAWA1-91vB2MM#xGZ zuj4FLTNj=}dQ+z?IBJqbMl|uWwq?m^votzIJkDNUtXxv%uPc+71f8a2Q?moX=fW;S z?PsQ*zBQV~S-ut~I%JI#R|%QgbI$dD8l1)lKTZ^DdUO7L_3$sH|6#{!+S)3u%=ufQ zy7r|gs+}{S#Km~UR~0~@Iy5Z7*ZDj4U|f0UpU-0!n!`0N{9QqA)e*TTG*Yr5Y4^)x zt=t~GP?wqQ3TAH75SD2@{|86&056Zn>{?gi6&Cl#F`RU12j=Dx4`DMDVC<5>E%mk! z+jo){HF#s#kjaaTi{-WPh#hPR8u{fyfeLLHN*_qUW-vMcPb1{FS^U(qTk!cO`%Yva zwQPCIWvYez`-)$37xjX^{pYMncy0iS1(v@%g zmKg|ogUeG62&fU9#X~oxb`|R;+5JAr=MhIv?r=8^-#=xfatMiO9FbLjeN5$RApayM zUIFnuby}|J&CX&lS5u4SZg2^3CjhoTC-K_p`?^HdQOe!=0|Gs!-pBw@}x5h?clwm9s=D#^2FD!FN@Y3%WfWBE>ecHg% zx?B4gKA|@MPrthlXo8?V5eGTX0ru5S&C~#z+oAc@&YomBOkw2Sv#6$qZ%hLVTxR}} z3cYa@!@&8?BKDfZcP6{;snY^&qP!^6)>0_0C6Nec4s z|6Fu{Cq=xxh|vlw?&fc%zkJm&cWH3_Ahlk|u@9H)Xd-fPjP-$aG0_HzC#~#sA9>F5 zO)q!egB{itu_H+@`CPWM+jjr==6(rQ59^Js9kp)YWU4shIybau$+$;K=PEeTY#uam z?#LCD4U9r;8V5&VqhfDZW`0J{K^XmU*l;dqCIL8L5^R85Q}b~H3Z`8QVdIZHtaGyrvD&>SRRTb6?4(i={sLOGa?=;OHnX7orR|Z02Km?{Pufocm@aOEY1l z{Ow%%oF`8lD!SsH(M}d~wf|~_O=8%^xKOlN#{DU8#7He8{1|r2eRlbLn>7Z$-qkPs zHBSLfZt90HhSNB4y&-V6ZxBlUxHUr2(`ds##sMCBedkl_o`0DV{hkm@8-})Nc88a8Iwh2CGKYaL_k?v zrVqmh`4@`fj)ghzbhykcShuJD84$0Y(e|&MuRRaAqI${f*6!BgqwPYpu!^WmqM-jc zRcr}fKQ4JuBpG%R3P@Oqa;)<_DaeL?@%6ksESvsUc;T0~mbdM=NAFHHWxYcYd~yga zh&|y8*$;>4BX-R>eHsp1r;_Y0d10^q)x7=_(-%Z5JFZ%BDd~iKystp`EUM*2X)!<( zfPKt1IV1l;=ZF4EFBOoSq$;$+X?NnY{ckSVZVBK->PFs4uLCxk2vev?O_ zmK7@^A>N?^N^iW(5UtdUAr*-N;sj8K{5~Op0!wHc0f@l8ip?`n2UwK_>E7Ein5U$amP&iZ=iN0d2D#7`$v z-@q&wSMK_k`M8)DObY!7J3eC^JmXnKpmxj;9<$od&68o=ppH2TRD~d4>bp%!?RK| zZapYlETBBA#mUG5`ks;8%V^RCQV8%Dr*ky3gaJ$D_HC-V7}cEKma{12(VU5&8t6Hg zwzB9ntoS*Q@EB{V_5UfylbLb#dm+D{=>ro+>#N@6G^n!ygL;?#LPKNBZtAhF|;@iBxGONk%*?HMgQ}kaN!_WKrRu(GaAu~Q?36cU@hbH)~{(deM zk}PGb$L)YdjvWiF$eoSMFPz*iv*{#5Eq);bm;|I>&m)iK0^gV3qN&msa~&f_;KF(k zEoscWYl_o^gQDgIc_VudcY_nJ6{dAwpnIDc=O_Oo(c16IJq1q28S=O3mSR-7avI{R zE3F$wtpGZY%IaO?e^jV{+&QXX5))FzfRK2?EAfe^=^U3Y8gUC{bVi)=#d_DKL;KZk zA1=g4JmCA?R$}5z0SfghL%UPzR@f3|->LYZHAa*NJb=^aN%6dHmg4kGNe~&JFB|7wUHFzt zK}Iq0WPk~@Y>Vcy+&-jgVjjotE9UHs$k)X?`95Z%mWtgJNdUgj?5zI`r@Q&!ebZ^r zq$!K#BN%{_97P_##D<sWMa_ei6p(Sd(Q8 z=QJR|fcFWJW;jG!M4#5)C zEC8}=nq%APE|`37W*d5>>!>wpQ+^VjDKC80?VBrdMgT^!o8I&IKVMYhY@&Fb3kL)P zuDeX?Yxd1v1c3d+N(*d=gfy+2l+GZb#+B169z*CP;d@Iu{bognf^84ka83{c6$(dX zA>UuKjUVmzUq|Rpk)5~7(L+>uhp_vOd-#9J&h|{i)Im0e{^cN|-kMPR6+SIb4aOb@ zoU_D3v~OAp@(T9*1rY!Ztd>cApVsv+xD5b(fuTfL=lP4P-2$HxO6;nwe<*)6FwLMF;Q&XdSr;+!+Ng@xcvRewg#h4(|K?QGMHKFMz~CS+>xSxt|DGg`9idG4;N_7Xcz zFlj<99Cay|_)8KICCqr?$pTT!$sN)Zy4RY5##E^NCo1KT@5MVrJJB?3 zWY3uD^y>LxE35K#3p7hPYaQ->_pXQuLH79>HYlz!k2@#y+}XU44;j*vN}~WqINa%h zg3~>9cAqGrrM2r65a0lWU;lvTGmrQ{L-YEy-vX|Hvx|%A%j$QZe1|9WRyIh;wyLOB zkW|Sf(W<9m{K8KS5emKH*fJ7B?4=(iOdA;;!ltp(sFdn-T#whR88XEj*4{rl*bUBk z^ZG#s@<*M(S~9k*;S$~E@MD#dU@;@W@`)*h_Xq8>fSs<86+STITkI$Q08)u4H99(m z9S+q}C5kj;wqsl;<(2jd8HT#wxzLFz{I;~g!R(vGAK@cWlMv58{@L3IEipp?wYu9> zltAxBMg531gkw>Y?_Xx9o|hLT_)CKf_3o-%Bbfff_X9ik?mJ%Bj1!ne3A;?%-w}4} zV~v`b?!dTdT655O697W2Y}|XWJ0X9*A;1#m1%gG_E)>o}!NP{GAa%8jE09+r$2U1`Tz5_F)8f9FyGKb;yy8zM9TUORE?w0Xaq zuju*%N-G`*mkq@Bken;d{q6Ss33C_{7YiJet^v>t|M9db_l5ibpy-FI zou1iQSm#gu8K}Aak+CzeHjruB@#A3InLVMIQc72%%Ev^iz&lee1kw`JphW6!vzszR zpu?2;_MArejA*;Fl=(HUpq~e|{tUZCrBvR^q>>#Q+`ExzsXn|jX=2gW77#(Z9@q_T75iIB`rZT`wG_A1 z!3)Upc>Vnnc>6@){l4Y0QZyAUneBR;VBu)hXW&E*sO}K}E@1sIcjbdWAqE1JE6sx} zG8G!6toOW#PSFF_SH;GFKeSLE60m(n6|XKyb*yk)fuu@_)Xc(?o(2UBdyuk7g0$)E z1KID3Y2@DX%b(KLcE_afw8dR?Wv#SQ89o*0(V*yz=B)O|jStZg-%AcQjHPuYIZ*B& zgFjo{DYtg+;ZH4e53;XNs%z(*H;bMzwt^Bt=dv*jYkWX1wENXP^gt2B)rF%POEpBe z29tyb$#;}qn(j5Bmh25;1=}XepW+)P^z(S2jWsHASaRrH7n0dkL1WLAGhtf(Qf=9{UHmE`xQ)&1{<^?ADvGT@=MoP zpv&G({O~snK2o~<+8rMw68!kmvH_7SK=KyI3%M#Y0-V}P41FvDYaBMjY^CO30J*katy${ZnDW$TX|Y;Vz%JzWDHZFNiL>< zyjXPHxC0FJWx)q#txD816-`gxR`3p_UhND2bwKLf@Pus&rS((3hp+gzv{}P_wkd!; z9L0%%3gUhbRmXor)L^@&#=Vdj^TY|SYj36LI~XOozwLY+cD|ZZ{wG#svR63C#>dHMYke8foi308~V2*a!b5W9o_QgeK5hwOhi{l6i%e>ZJHcgygW~pOu zf442|6cj_)K9@`?M2l*)C-`_nRd!F84Zg)Qre{(0M4PwsDl=RJ+A|Czh8aca7}fHG3J5^ zUoJmJvyqu*-f;Dnm9w;;yz$UP&OmjN?fZdwQ z%NbchiMTX0%WDyx5S$;7UAOuJquDE*;CwMXZuZLKcIC0$Z}ac;KF6i$XbfT3ZK$|& zBHuOQa%*htXfi4F>iIxY;K|!qx4l(bQAICl$B?}3K?CBL_q|6($Yyi zE4%IS)A31k#CxUX%p1o1Ry$=Q4QIF~0zz1dC-F|h+T3@(kpi~1u18y&IO?!qvuhpw zSPNW}tT!FxF8W=EMZzNphlMaMWu=$ap-y}HZ8GYzY1pl|&(;Rg$C;8foa%AM*Z($j zoNBNg^fgurACbUN5sQ2XR5?BiRRChRV^?qFJb(QdnyaRD;v}QFT_z#Sf7!C z;Rezp$et`oGvslws*f%Oa%ze~y zh*IyiCcfRkw5RoETQmlsE~4 za8D&HS*f_y8dUjB+7lO#T@P2sy4=3Nh0$6Z7^~5xQt~fi7gN!q{!*`EPbt`TSV3-)A`UP)cFHjp%pK+aAZZWOAXLI7xOPjQN27!XV_damcUGO z<`mS2XU*MI=8{!E2oMeP`wVtoAW-95)mzgvg~&DKEqXpk?jG(I#hf*fK}t&DadGyW z-j_}Ux}q32YJd{+>g#Ya%1sDJ=Ppasl$8*A{KSMVESYhB(gIkID+0fqT+5Jf@!`WR zvq$H?E$SQm-uQa;4rBNgz7@3|So72?@-+*8%zxB}jlZCt58B7N7td271NCtqKw)-3 z=@wc#r5M9II)Q63k%DmKoRIi7=E>BI5zN#q&R|c>7og#$r%Gw3ZFK#nnK}R;nZK>NofsX-Fi*{NNw2 zWwZKMj0;SG^YBF}DzG2d$wZa^rRf#4ZKU7NkN}k6;sH^P=#ojr0``@Cc#FNA796Di zgYY>kD_@ENI$qFj$V>4+D(;~^Tdh0qgnqG0{?{hU%_(V;wryxSvTF9JJbR#Kz>ln> zPIS1yy56C(<*3iTneD!9z=4TaV=Z=e0~}Z_6t=1{N~iwZmf-~sCzI?`$(*Q?Vpq7I z0}#f@%VD8>2TwL>Atr~!f0V}O#Fd3SsOK5e8KUbze*ViA`Ua4rA@|2;R`~!&r4APh zQL{LPeN|wPs!GGymWX{l^Q=UFbp+WcIL_MPBrPbz&MpSlk}Mzo-lGf?AN}#0?M@4i zdNM@_lsk4dZ(kr|!0gFzACNUA;l#0|ImuA7c-VM&2Qya92HY=~V;6%>w7I=KOS|d% zGx_FjV-5a{qFn)Wjhv&AkTN&?p{2!Lx}ldw;>N&Bbim!`H8uA4GdhJ&dBqZJy224; zhx(xJ7;+Oal(In10K!hbbDaWsJxVhr1ibcEL`nr2(y3k_D9VDBFZ4n-&5_LwScJ0R zmNGH;S6yWF((pY=L}e-Sz8~b^wcH_zlD*%B+5IB!eQDE#!htDhnz(Gh(EP7MU7x~F zPG!LYHml*DVhM-XuJFLp}c+ zuO}Y$+WsS&ak$qEP-p@6zIQ(+;ZQJMkC=geo#A;$UApg$_}c)7%TsixRu*SWo677> z_YpJDd0(^NWrvJfa+>Cp3T!PIdlLer=E_EK^V$&D917kv#({S@G2LhIzjYJicvQH$ zQCuyezyX|GZ#Y#$(OP&HChQq#nxz7k3htBN<`OeTn7O0YA4Rji%zGJ!6SZ#iL^g?8 zt>#;1BOKMcEu_ZVx5Dv5z@+A1zT^X!pRQ+b^W_L-A8=Q;2Xw#CLx(S>2U#}&mP4}`}$%X1u`2A>cOnrZZy@k%1|D?F6lD?bx)W^1wMie z9xzdoFh_@e(`OgP#4DJ=T-j#_A%b5PJVP4)*r$@7(q`T~Ob@7MCNrge6DWpU3wpmgPyI9nCX`lC|LcUm{t+G7k*u3$l2hfW%PRr8aJ7*<%C8HWm>O%mr!XvqJjHm^ z7bhP2vJHh+T*LSG3i>rjm={PDm5f?38TppU%&37c0(jpY+9|fAZB|6-7LV<#&4(riBftxRkVQ5>2 z$f{6(r36xGl72f^W~P-lea<04Ep}qdL$v~4zFCzmlzu&=Kf;Q{i{JM~;DNjRrcM7- zfSiV+$+k1*w`D8Kw)ZQVX&jHoR(!2b>BkhlW(Hyj*0EWZ^&{vdH!&4nzZGlRt)z<;-5Y1(PFRfM4i01S(`ep`9$PNEtRdgBge+e$Ix` zevR&Ml;DOd{nJiPzjigpoU@IF5-4w>&IHGdogO9Jn5oerd|-RPxy{tidTAd{eshA!7>&`bm7@PNi)Nt`cm#l@}WjED9f`OMP zB@>PXPmY}7mzJY{<}maK({W7_gPu^L|&|KpHTmxI&|%9-tU957nmj$B z(L`?v0`re-FopNfp0~R(qRl$HNIcMeWXJ=A&uc;78%jzl>?8`nh`De00JXughvWv$ zjP&2!$CAR5#ots_QW5$;Dy>Pm1+0P|G$yXdrySW%RBK#1<$YK1JrNQc(x*>mhx&nM z)L%RoHRN`Gi;{Eb9GR1Vnam#^_Cd|_(L?5r?mp=M# zleTD}6jc6TZ`=fi#+Q++N>HvptsfEMY>(OfljLploMV`}goPkX7J;JYH!klEWEG?R zG%5741LH~WRLSHtX0X=3)qniQ@QkQ07m9IcpJ}vCOdA7|SBvTYWp_W1LEUSe3i|aQ zwPsjn_|Ezr&x#YljGildQj0CWQju%UhhKvR_ZKdbVt-!yt|-G>AWsjV7D@DzVcn-8nL4-3dE5 z;n^(|{?+%u;kO>PA0OHyyiSlAv-iGHNfFZQTB280cC0X8L4jE?kd&mnS2Uvetmlh@7*Xwo!~6YUQGytL$q}CeFJT2eKhr` z$ds-LXTTB=tf*KURw4jLbAO(fVbDo{XU}40c59Fs zqPcWey#yfkLCWh@s3YD*@fRkY5+vm7dH4(GbAXVmL6NI>&i1OJj91JqFbZv)7`6wE z)P3~QpWXcS-SJluUiU%CgLTQpN=xsS&IQYzbxt8p`nU5uWyWH+I7(JLT%?bfWO+WIM&N zg8ZZjkv0|QbMLGD8+)&!v^~aQs?y8>1{UB|Bg}8baqX^gpFxEAC7<{ugmV=W= z)hZh!jc<*i8e7U=_*&BHqFl=a-XFzwj6&-n%u)boG<*+NkRr%@RNcRa)bz|fgZM{* z4jbs#1L80mt3(PwiK&t#$uN13DTkwUS<`wQSZ{uJQOv3TvDzb--`!BY>m^S?DeL=cUMg*ujG=EA5NJ#FaQ2=X?g=i_I!kR zYWHf)oPzgvLanUDsiHj1ZYw!E=jfkqHaF+e+Av3!DAz7WvGEfuS&Yv7`=@{8`yP#cbKJW* zPS}HmUeSr4r9SPkv%M}At$2EvG^zoqbP)QHujCP_(1*#_CYL^VmBN#LdISICD3EeS zH8yRx3HhZdfU4Xi9r7PO1!TRw2o)EwJcKPD~zC7kcRU6aI|?UTJfp`S-$N^$r+ z;?M=nL(ktmiS2OXhpSm%N?AJchiv9DOS=Dju<^a^nmTi-jT5hM2l$EF zT3>pt2+UwK#ao70<)laj>=*G?09s!4_#;)5SL!Eq^N1sAP+Kp;Kh6FhPu0Td4R$|1 zdlmg5#4ugA0xZ&`UafP0>c3S`M*_+yY9tQ% zb*`#rX`xWCf|-0^imd9ukaF??q{6_id=>65DwT^SLzuf{eh+DAV??2*T9)p;#{Qpw zo}{w-Hcr>`-x|G*OX60)ufgX0E#(adf1|YRGNtnh!KlzGv}lCC>Ko7d!(GK@tt6}c z*K#k?C?iFNtru@E$lTcdO*bYw^Qkb|^^E-DA>?E2oaa!2`zoKAt5AnJzjBRBz5}W72<#TcIw5VdzcTnF!PcibEBnv?p3|P4-!x0gRcz#%YnBP zv>ZkHeIrn97SytTG25w;;luwwdfd$qKY|ifaFjFxrND5viFWl`BQKp^^9eVYdD?i_ z9dH9d6ZuP6+hDz&-r8Cei7s z^z60?OaTM{?ODfg#fh)n>a-La_9`IsYRyqb<07k{2!(u;Onm6r%J4xjfDrt`sKZXk zuH8!=ST@=L*5&A(fHQu}tvBU617R*kiwqqPEh79MJmG&o3`2LfbW5s8GlT(1sWeJRcMC`iilh>Pv;qbV0!j!7gQSFXr+{>K&$;n= zp7(uz=bZ14b6wy4$JD-O?RBrc_S$Q&y#m+7I1@v!bwlsWENk#xRo}+>zQJr(jl%5q z%%{GDk~;(0)~g>`7N{Lz!&~?(eAGdwMJf2HBVDN5ZtzPKpCqFZ8*hrsMFZ;s7_9M5x%BM`)cKJRvkUde~JPD@;>#wU` zYd;%^PF2vuBOmJ&Hiyp7pVV(T@2+`Nci5omFTXc)qFxh9N70b%1!a|eEPe=aPB-s1 zT|oH7?lNs)D#{YSr_Aiyv)oIB?=XTC=*&NsO*l#%8{x$sEksE42NZwwPRyzEdX-SwS;r@YB}i3q~gzV87s4gY*+ z<=oyg-(@+m*;`(<_neR;<-ypDx|GGPZnC6LGiZ?UeE2LJL$t-pRm5gIs=}t1FBQIc z5k$Ree_H$KIkLQzuHF_9TbTR46Au62de-z*WiwUW<60-(O0gJjxMnEH=cueLSvKDt zwM=Q-{Rje7N5GZS0DWwf95rQR3Qqo|3RvJ3@)cTH$OhMH8NDyC30I9Uv$#rnslrz1 z`j5=ZjgbFBdgR**i>S9l2?|Lk5VukD|D?S*g+!I=^4o))>DqEX5kgVjyv2q_;VM8jayO7ip(^#skNJ|w0u=m*TTPRba!=+8u*<|SmY}E|De!Il92mAg^HmrzB9mM zn*Q$PqM;2GZZl*5RoSh6LO69R*`UgpgEci0TQs;AEDC3RIa1K|dn8|d3F5QFq7{q2 z7bQ4GEecwkD_ergId|SIy}O!TPyAy;rp6d1(y@8sLk-d*a_`v#jo_W$;(j{UQ@y*u0m>~P0Bqg&((RAxgwwFS z8G;+lig{ zd`thy%fa9m0b6JdwE37%kyZ&hgm|C1DuvSrs?aqRA&0Rm4$y9&*9da_jI8=VT&E~k zW&VO1nnBa+15fG-6cnDsScv)93rSrWl$U$3FRky0jVfsf7R!$=07(jJ9@~lz&D&E4 z1Q~TBQN#BDAbJpFPAZ)7VdT|d*zaV95{gl)Ih@#LRXdBih;?ia4BO%=u}VL3hpAKM zR(3n2_>TYB`lB+_l^kAsBpDLE&xD^}L3S)3-RE|8=u&96dR`zov!9oNVZfhu`|t)1 zIW!F$-ylHtV@G@Mod)Lq+>TbPffn|MA;V9LkB2BMjex{D(H~Mtoa_CT7bq8J^-BIj zDKz#ji&nk2|9spg;o%dSHz8aOSGkP2t%VZh&bX{*#l?vOb!V4^#V>Q*A`Fm--oM$p z7B>}3z=(RITe&52@Ab2px5%T-x`5lpnO=%|-Q;1<@`%@VM?Q^5Ye2%;feSbJ?aWKn z(JL0N>IuMScxvOW^VExvu9Pi`(PwQXm96{R`W{O{lafz7fog=gr(#$A#9=<+=dho@ z>b;a`oO$7+x!n!&H?vFXGEYQd{y%%5&DVpPDPgeLZX=!W2-(7ht!s@lEB@ZdMx75p zQ|j{;YGUgI8|-mEM}TsJ+c5N}RCB!7`c{V*D-~pSV|ngur%o<;fUXUb!~I8sHwf{8c)c*HTcuUF1Lrq( z;Hl^@8I$S>s0QxlYYuvgui7v=!hlHEjrnAqcWxdk=$(87VVpl#FPHwn?lEJv|Ej2Hg& zpOcapkO4WqIWwB$mFb61$00Lb=+VW5Bwl9!QP}MGZLZqQ<^5O4FVe=jZ=jXD#I^T& z{P3vv%d3V@?F8(TYaU**Tz@aqwo_X2y`Ec8T==<7XtJu-e3R)I8$Zcqom~ME%*RHU z6R!lrnpdUkW4|Eqb>`n-Try{U4*_?N9ejdDLqv*KR})5CZoDj;WjbH+SnM z9AvaEybx4DH?$adL59{x;ZrO3{!DPEtL!RHGniFD9dz#$5o)|{6tM$9pt$#~+PI37hsW*Llm7195|~;~75+GxJ_uiE5S}=`&bNR+H8oVoPx9m2mx*Wm zIQeV&2}R3#2U!%G$^jep8d3prIU0Ocjrqd)>mhu3KXlV@Z0kjmzNiNTK_ZOdy6fdp zXqeEtmBKe_3~ofr^|W;LKz_E^poWOQScBRbCoZ-mOxfBhESgA-X{b@*gIET}`6?qR z4J5VzK7jZv(3S=~g{$pCM{(1_g>Y1HPwQYOs?3Ns-*kv0XoxT~oA9uX?B{x1Er%9k z{J>MM>_Mk9w;G}1_u6K^Z8}AMTdLH57lsAB3@qko?!O`RU?6qtN~PQs_u;YElx9CZ z#%3kqr3Rnc<4r#s|5tJrx0o_CmSE}LxF|VuUFyBzu8O{bK#{x7Mm;>ofvXcecC%G9 zIHm@~SrT*vFs!frZzeI=U5Ay0r4`awlV8hfjBiw{@H`9)A@5j>PKXx=_0>jB@+}ft z)lXJehn4RvNE??@F9JNGs*yUGt?y2}YrWr+8k(Fi1CCFFYU-pD#Mik)1}KWLbCgEW zByf~1i4Gh)+7lOfa+~oXoDLV6!F)}3>?R9VSr;}8WVs(k9^b}Ans%?9{|=`ed{R_6 zmVoIugu|HwSDtP5iqA*Cu9Jk$;#_tlUrtfS_dA@V-XxqoAv9bQ2l@v|&GxhJBKOdGm?A9hy5QPq#Zi=|9o>Y3+34>$|GumB1G zhvU)bhV8>2rEPf#vIdV>@W5av0b>B6-?^CCk8n%@*7PQ-&bG!yw#U6voCL~X08Xat zuI(*Nj&|bz0;aO-J4(1ncboJpTGfI82>=->cuOh;()JMm4*&#MgyIoxH7|NXf^Kl} z4qXtG|M3w@3kF@tigW?w@95V#chxaP&)#G#v| z0@IwNj_SR_YuU0HMW_3P&NpqlqW2yw!7m;O4vNm7)-mepD2ObmD*3*7_HmaB+J2v1 zy?KEY0?d_^(_jQh@pB$&m~{`BRK>S#mxch-6#Jrj5vF!%9Xstf zU2d+uKbYUTeq`1-Xkcl z_3Y`fS11Gtz@RuEr3i0-=&hyP)o;(qZ?Md9NvW{RW9>+D1uQn-wKrs@qwk2C9CUt3 zIs$XC*_(R(va90USrv*5FikPRg+bZ2A+|_^Y1NMNq}vyA$*pM6HguS^^uNVqkf6j( zdMD0ntCt{WA8LX-6Ifp0#ZbR6CAYjaCJ=L;!Xf~24u~K`$Ur6b^mz8z-o0vU)AqtS zC8LB-y5>qQgMuqP4L7p1rbc(p9)p5x)vBQZ(sn!d)2fdjcI!z{WA5+0{a0@J^zL9r zHKVCOP5;Qs#9zEv4vQC^s$xEkt~>2YH~Qfo(Qd*l-z`KM*;(ZpAY0@+n7AOH1&Ieq zwZA43Jp8-ZoM<6&`}BhF#HNM>|;9Ky%dvMV#-vf1|C2^1+4dZCV& z2z1UaR8Wb?pI2;#F-;i%<5%O1dKvLm>U`*X`Ye!*;rM#2bSaZze#t%RLXj=(YOyWp+16Gt8SR6nG z+bC@M45%ZV^zSjG)Z21mN-??6fTW>RbxD8OwXa+IrQ+?WPM9 zAJ7B=vgg5U4B?>rl9GeGkb;*r0T7a}ahO^xo*LYmbS-ZAeRk?)@G|r|rpFU~!aAvkJ}79Wzwo<=z|ILT*a`}201 zhmmClL<5n2;e5XUxnWlQK7Q~Q$tqd%OGcSb1B2Fn9L)c?S&|yCU`dV#Y9sKKn4iPZ z`t)^k4e{)6xIyI$pBOdJ@4VuDAaOV=^OMJ~#tj*Lz#*(PHlF%KXA|2aWu>v%moQKV zECz~l7we)3lM}Z=MJb7r2@W`8zR_2_@&hEz3>|g8jiq)H0Ny#q_hI^{f(UT1YkMF3 zVKhayN57nW;N^*1fe6#+f`{aSN`c917%F3D!@~NWx-_p5`x6XNj1z}DM^g#+r-u-?jqr~dvs}I$*^fLw&fnJ>a*gNUv+01)J!lK?q;iq)tKf`sGH!D9%yWa4WLqR)F{ExQRDXS?7q)AO5` z{ew(Exy#eGU%I?t^C~mu;Z4lP#GUEL+L2Gjmx-Tt22Q@KjvcRg*S=$S_940~ek~~L zziBL(1XbphCqh6c6eM zO$JrNLw7yi0M-R4vdf7TcvFMF7_T)+;-}mpX9+cO?uV>|*61__+u=RrFj+qNg|8|=b?%~tK)E?R8U@FIM%W5al^s2u8 z1FDwn_(WPTiij%iJbUOjCjM}9D;(W=-Ft|hv%#^zW--lLcrbUz^ zYDMuc8XB7*L~_7i!bP#UsUA~LY4(H~bL&|NH%60)k-q#WFjnrZAe{+h0uglyFq39n z-nd3N5CNffWp?uhgxWk*w}iktzbMe4^hmhkex!IS|6g! z2DXV%JJ_IY&L=mthZrhoPnOFfztDk%BkRM8Ot6$W51(7$Bn2iaT@3807Yv#ChYk6m z7?|nse%*kUP6r*9gJ_Zd8X9>vT%tFv(&%1Z{*`2F763GxouHrfau1H1Y(6sahdKRI$8~%&F8wekQv__g|$CLUkvBOu%W>)79f4ZoZVn&b;fX@o#=4B^BvBDQ>=w9QNY8;_Y<{HHqNgRGw>q*RgZz5nBxETjBU=^HoesZE)YE~2qv9?&gXxfEK`8TUTGOzo^N zT^t$@7mJ_~TjMide2{ru+8HQUh9bpcwZC%o+H=B&%U~!Z+-OJAx1o^DZ4#(zCOY75Uk-V98J zPt!bp^lyYssfmq_-h3BxcCa0oTg$JC=SVl+31n&Q=)7KwB5K3RaA)8EWEMNxj%W{j z;6dbASA4ck%JM0J63p$Ur#w`~{4V+(<9yyX^OUlcf)-~p_crktdQ%(mqE;(e6yNnh z8Dl73W%JuY?iw{YP?&QHX8AlJnh_#fe_H$g94zv`xnd_pxjwoce0XKfwLv(ggf0=P zg}s1L#AX#fnuMeNFe!l!aNzp38dkU|cZj+kd>Vro2_w!Q2njso6n(uw&?$%NlgbFl zxwA1(vs^qmmjay+EbS4|VeJ{QT+kPWeU0g{B6=zO=o%A5Uu5kOi%XQlUg(+#Dzqgn zTVz->oqQ$C9C>m;y-JpqwlJ8Ie#>2h08Bl3J9>W30H|_W;tU)&8~-mS}G`E;7b zriaRxjge)d|LN@eoFyqNyhaiOMN^T$_XYpQ#4@;R^y|U2Y^>(}6qb~P=K*O7QX)^D zhBWlK+E@-nyG%gmH~~5zGoZK|%WIWp23TD*4;61bUmImfemBYm!hA%9zP?JIGJy{d zpK3}RTn36LjMc!Lhv$61)57`Ucf z9xL;QP6RNHwKfl(J1$EqrgDzDdXTp=ZZig@z7n1LMNh79_I8Gv8dukBr4x> z#Y`qYMWV;Es**?R*8-w)IElY}Vf*g7i1qsV25C%}NL_Gplag@dR)Zmno9ueS3(=wU zN3If!-(M`b^5VK5Z9ENJIWQ?Y2;9XKKMs)oxhzHH4A>Bgii$H&+sF6LOg0x+F5+M~L;>^yP-k zWeoyb`GS`%L1$5WXGOil2163ET|`yV;%2%~?w0#>9S2j-2#MT6qnj; z$NULkTJfZxSE785>@U4GuT~yuZ7jK|@G7qf!ue( z0<~qhHYlHiBY1=B!P&Ce?c#U(cY^{*GQ}q23S=auXt%jrEgckOb)%B&)Xz=^3zF*XYN^(E_H)~Kk zE02qBvMgkdQoI5RM1hh6XO*V@j!hY2YOnEN!EByn<98j7*&k>;zU)Zx`=IWGcCkQ4 zoX@F;n7Juey-h^fIIU33y!_W8Q`zxt_Iy=%!;Q?>{Ujc{<4Lz%l{9@j`$vx?w*xH_ zRESVh)?_zcRE^@`Z}4t8>)ypVv>*ChrQhqxMp;$!a>80ek@qPb)(XV07Aq$^>l$h(zA8ovRC z(}AgA-IStleRZJ!BlF|HNJ2u7do#GFa6)pE)bRFC>ggu17{8H*90?`=p5k*6IO}E+ zvjL~#sBpbWdWqC*3zVBM;`ZA^p8^jXq<#>S9u~2iuQS1I@5)@8e&kh0Hz(gN{a~*)nY{f`rk&_k2)}g96w|x`^;>jM@v%X z{vg+InpTAuA@YolSyp&nd%QnxKjO{n%!;k0p$0J=l&rVl7k}aVXzZh32{d}DkU{ZT zUVsL5$E&ZT)18GklN7vzCBuO?Q^T{W6;k8afh-jZW;mB&-!jaz4kd?Y=0oP%Fka)en)clonc8ZU?rG$#)W72(ir7UaRM8&8v*?_ z$Oke`xPiNlLVsvaCxER~b;q&Nt=E1~WJaGws99Q^9&hdm{qdq3aR+|O45zA1F3b2M zBpxq2_;5qb6(^>!0ky8(P50R!j(V?qNyXxkSCCmI9@+)INE2&?+tl;f{8H0IjG0NE z=0h{HUVSvsdV39=-_+{C|6QliSxhJR7GuxN9w}k(W*;#ACPo>Im(X3|?{!M{t4!p& z#7Cjj+BxBl55BLapVP{F;lf#05-qaS=M$bwgvU&c@*U4|VRy?{_|IvkGdXXOprCzu z!8nid!t67=}Et8^ts}m8{NxT&D&r64+IoCSF3%Z0vJg7=~;R3k|FQVSk z@9@^{73z5k>b>v4d!|K}2BfdyB;HqkHk+Z+x|MDsxvg=gr=@fpJIZmF(^^~MY{ctQzo zSYMA%yFD}$c#l^8G3d4$S5W3nfEApDpBob!^ErLrdmXyL4)h;{*cDVz0Jrv4F^|2M z?_SGRl^pp@HuS|Q2puU!UZE_-NBus^uetf$zfghlsc!eH&+{MDX<*$GIX?&CFO z;-D0V$XMYv zY*+*u5Pd}e(aN;2`(ds-1Cr!VjrGgf1)wB$?8ZM`EiF4#@++focvL3)RsX39@4$QB->}6Zj^x?fiN68YvL9R^O5wvDmn~Z=&Y@P# zoCPka?vdhj>QF;Qsd8H*s}?^3 zR?Z$HCiVP=;BL=vyRH(`8QfrA+m5GXT9EynIJc4lxgFwqo<;V_hS1!L0fxNPqWMs= z8nvg*05YDfEUJihQ9piT(){gQ6>=*CTH?8{Pjj3T30IMT>NKxQ)K3Q+ZGw$l^52$` zcia#JHS^9szPJ5<<7V|T17{9U*_3`qgD!T7rua?!13S6jLILX_qm%a*?_DPG64qpE zS@T~3d@$B8+z!< z5*Vw|mmln4u;m*WBO1#qV|$ci*{9^r`wml47}}t~iyM$=Q#F#H6yYeE@-;wNS!C+D zx%ME{z4g*1oY!1;xp9JeS@Fo?sL8*^wb*Ay3tdl&`q){OGcfh;&dUqRxJczxQX@~z zT*w+!!mk*HCcU`{nEc?VR;^dX%C2CzzQP0IBnfiA;_WNowBT)N)622r2c58Ug7R#CSl*cFerl%ad=8NMgse=@B)vaBH9n0;em^W(tKWeAzyJh zhSY$xY0sxpMZO+ZjD;>Y5O70nt!Re{{J_yDKGcOHw*$=Jlj`6D(`v;U8d)#jCq05d zjeifFOR1Q-N^q6cFH(;u{#URfT#|2t%V=~lLi&WfKrpI5Gy`wT5xYzdcHNA1b zbD&?0*yjW{d&r~#R1V5;SToEFK1E$XQadHc^8&GxM;8HcPD6(FBUoe8y&Wv73M5IzHALou>l%&SGzdL7lE&6aZiQ>S*@(e0HNoVmjqn+YE-x=W1QBlcv9=#dP&!-_0VidDXmHNxBf30Zv zra^b(YZ0Qsl@-XGXTaGO2!~S2&(O=~_G++t|w4C@Zw6qHMw zxF5mdj)z*dqJDZf$~l*k^%WP}xHt7-+iNbR$@!moZ+^j+QkScr=xzCz&;-* z@FV=3;`1EePp?=iDS#(N>8Xzn(G3Ik*JiEn==)gd>_(MuDD#Kh)107Pa!Yt*Hkj<7 zL3;*QM9RUC*ZZlm#giK`@1{E`Qs4ymlHMNs_CE z2^SH{qx&zSy*6I!!cXQ>qx}v{yzK9nX1#&tM_qP&_1TmfSardipHm@^W;a)SbQ=^?DNKh)eHDW|Ddto)IwYWcsYV=&g$RHDRjEx3uAg()A81 zs*(Qj45>2@l|gafGiLA`67mk#rW`fs$JqJL)*e5NHGN2}q@8d(neM7GO)%Y)wtF9> z%+h_Ap~-12Nn`z{CBC0c)k6WVl?^P0q|EelyVF$!*GYwY;Wj!9ZAscKH`~k{af*h` zfK6E|=_=u$wGjIS;-CxWmsItKAZli}CJgF?7U@2V6=meQu?Cc z=Xh!yH&4Ueh?6)WUue@7|H}7a9$t>WtTL>N6NEiI8Vdz6A8sy7Kpq(S!*M2>ZdZd= z2y}6$Hu!}M^DBZfc_GJCBF<%cGB^M6_zXO8koLqdQ`5MJ@_Ij0yTu`flT>^=O-)S^UvO9$H7oK ztdRwB2I6(|0dh~?Ytm{^tn|FE>Jx3eGDi98CdKHU;Teym1^Qb&*7Ylv@2z7CkZ}TQ~Wm zQVKL-1sT`L?*+deUkte0%o*vo#^NHKrhhbm0B!+LLYq6FruSjuoho&1px>>0iH1O) zlr`8zQ0M^z4);bRyYmklYBCeXca%4-R}ga_1R}=A92eSd@3`UwXNh=jYl{S;{jp)J zDlb=Q1UUh3LHqj%TJBBbAm-D?u`SIiCKeq9pUDDpKC1}mq2F$+8VG144&Y+QHVHkU))>2I;4gmuFqrW+Qu9{&Cl zd+k~wkGVou-w$xxy4BF&o3PR3vExCR=PM@@4nN$GwRuBzh40Xx|EvzPajiq)7&@EPF0orvxhkYo0yc z>YO0yrkYF}8^HTzB%`XMzz##_gU4)8XcX;bW0dCkh-2q#o^ZPR_7d^rK)L?(8?-0s z7ZmZ@qE?#D!MR)M{&Lz1H- zlFhF?Ur%@%DP^N{7}$S4cs#dY^g=HRO<-v>YiX|@({NOm0H&AxY*;wd2uyQ{;YhlU z#mYCnwx-wQ$~FkLe?c*u7N^r#lea*}r!R?2nfH)@DbMJR!xcP$}<+bz>MS z7m$OoGBST;^?6bxW1}Fwe*@ChL;|5br#^jkSd}z6=%r~w{4`exb>;?ha}~;X{8ud5 zIu1^vJGyyRZ1x)F#Mz2?w|O8z7qHa84&!vCV-L8Q)aCHBEa0nHr}jN}R%p3Z z?g8bvB~8@X%T*HO4ox?&XeMgjTp~7j|2V?I7AAE5j=JdbA!=M#c;v3`cM5Gba*k6~$)gZd-PV8a=U zph`}!{G|)LF@DUVN~mQ6M<#WKRX~TP8Df{)hYEOp!Z4Su^CShZ*{yoceS=65i`|kC zecuBIZIKSsQUpo!4=c#P-47htKT_R(KXk))LQ_Zol*U5wCdqef+vB0uuX+x{iUnZZ z0^FN4giBGY-w8WD4KRE~W|4V&4Ml(4_&bk~f!SV!MvkN3CKT0QdEUGqz zE9j^pC~vg*{-w?OZu&1~31-%hvbiEnB=-n24xw^`MzTUYfzFlww=I^VV=R>(Mklem zt&$?h=A=&E4aC&y`1D$R2>pD8pF{orX)S{ z$jwMiDMh~=sS2g^%JH_*j0SeLmSj)P2|tHRkPZ?|m3K;Zq15*0TU0ee#LA8yy_F^E zM3m6GNpeu861``@g`(^ei+HfIV9bt;6gmo z&_V$^V*O*8d7=D~K9iGpBTt=jlHW4ar6Ko=9qnu0q_e!H05Tsm&fm^UsJ~i0Ut1-< z8$kY6dbXu?yA-7z5fh)(TXY*!u?D8`8A6ScRSAps8Sz2ZNd}@e0g%g`%= z6j|}p^*+Kzv2}_UW}!xq2*NUMi~YFhGU`i+3}Y8cpOIOSf$ULfbT@7LiJ&(Q$$;iEtrMD|BdatV%=H~e0Ul!=T&a>^}+d&Aj`Y0;gW&{Vsh zrW5eSChjT`Ig69ElfGzb)Tft*eQB+d6@csp=+;?6-a2Ty{(hlm?{sQotM94>;W9h| zA8h5`IKT79`K@=r@N2m#2|wzXY0OYSkaXiHJxAL zL5z8V4oR+>!6P_XoW+5ShrX?Qr33J~x*jA~z|l ziwCCVq#Dyk_~6&m5a@YvO``XI?+5F$vSNJ|SH0Z92Bi2_m~}*TQf1&sRiGipFTs&$ zI&)cUafEr`9+r{z^=Qa!w6Nic0Cm6(7byvC8t>Jb+lnL>*Le@uA5@39+w6&pP+5lG z4=#yFomULojE``!xTlyt~?wJv z&DQsyc-W{Ux9!OL4{e^B+faKi3G)D}_#6}!WDBKxs0Lay#UV3*NsmC};oP|cq@NZ` zd^4A`M)i>GC?tH|Zc(MYSN4MqAcW52+|XD~m*IQ`OGhsDqK>sRkWl?~x~2r~TVv3- z+wg&*eszm5PAB4g#tc_}Yd+en)`$3y#&3H0X*!X@M|1w~vFe2W9$#^yxcs87h4;s^ zu||Uo#=NXYK;=?MSo=q9-HxnT`~Mq_en2#`KAfryJKZ@qX$MyeHh7Mt@+*%+W>>@YPQuF3gqw zq;xhy*A;cwJZkKzziVLdOL0E2QK28*!N1;d&6ECqt;#|}U?|8jQ%V4~E%9rR6=GUHB1=KEk`~^Ek9uEaoU1-6;%#NhHIZ3$K0m!sKCe8#3LjJ=2Oc_7 z5I?!*X>4^=Ozs<$7=E8S!gaGbV0biuC zH&e;5c{XX^u6D6wy$gMsig!D_@G+sg)T$Dw3B*NmT28l%1u~Y9MYYgR)u(92T=OQ* z1m?n`zuO3u)9Ge<;J@efUJcL4NqRRS&@W~f;(;HO7`k2SgI!kDER(f~|J%I^7nU#S zH=Wo(Uj73+wqD+HY>OIdQ}KwTJauju(w$OfJL%`V+(uG~P=+;+y|o^Ex){n=gHjdb z1~P;@?3huoOB?OXs@gB{tA2gWOv`}%_oFXj3X){^+3NWY=60V6!49h#kZUj zz>rO4;MFyv2Za1>*Kg6lkQTi7`m~ni1lD+jw;pfi`fh)?+uYT7bm0E1Am}yg$z3?> zom=ym8hwt_j{Zk-*xk40Fi)$?B@7-~$fp9+$qtM^A$GC*ao6dj6`mrF@1mXpCa7}% z_qF~N!OgwfV_vMltL7l8Nzp#jAtqFnKz-qDREuVe&MOxQ#Z%YnA9T9PI_WwLcO{-e zW^TLXc8ZHqyO2qDn#@^=Jnvh**M>SZh@{$ne$vGw`;s#_@TO6G(9eir-54FOio19E zxD%l?fVWW5+g+R8AHS;kzKh*cEfo9WtO|+R=Q|aYFfG21n!gc94jS<}y&o<%@W8DL zmfAtwoT|BmlSmo+O2j)*Z%ahkTtzX1KS3Dh;n|SPi;C_q47)YW5kDzwv*{4nGAc&IG=Yhm(6w-U=1 zqcfj1O~W##CDOBxdz@7WNR4|X^_+;mhYlvB1aZr9F=Y;b^OSx66(qT)V#51m3jFpUp3_2wBmlz#+Ii3 zBEx_Lb+4YYrwjOvBm{uAG+hITSV|1rdWaY8`z%YGcC{PIUNXSx{`tIRH};kU%9hu$ zk4xso*mb~EQSm8(IaWvS0IsITOtRx$oDByPu%E$|(RZES`5!tz>mXOSlN4CoP=*>o4_O)jqY$4#)b!EcfQ40#Fx=}qY zNbeFBZSs0K*|)sH(DLZ&mle?y2IM;z{4dhRSgq-{c~d;lkxEnAD+PNT;FcPBl5x9;X~IgmmU+t1;`$n#;Q6bpx{X++1G6ZpXa2X8|SBZwxT%l;gJ} zq`)a$Wvn!{l}iSuZ7#)qiw?$XJN>Se>4_Bq{y80_gR(&**2GM1KPfitlZ5K8ost8- z(w!2YQfjjhXVTDy6U#DYP|H%tesBwLic~>e0 zXq2Pi>GEdG?EWt@-*4N!A*Q%Lj`CYtWEhi4@5*ZlKEqLT)D;+EkFa!lDomGQ~RI! z-b5)_nxJBdU2zI;ih8mCA=)e?*_u<7cY73(=HtC-$r0@&z$Q+L$i}SEp;l7D?uvPS z>;2vt!7z5Q2d1#4T*9X+=j#J6$q%iyuRz!=4obwFw5`~Rhe#kW zi%ZB-9y$;G7vYA}X~j#W)-tg_-5dQ*CtOdSpXc2_k=bw?1C=!Ll9iLEzeONEcPm&k z#*&22U;aA@N*>OdnF)}5utP&Q@)gzdvxgPg+#H%5uL@H|GO+4N+&mB7zgC0}SPF-q z5i2^1;e(V^C}%kCmCW;_LCfdm-8;by4PCINeaMJ>Ah2R2;pU+Y)L4E!RmXN@^}zd_^vWby;&p&`%(G!y#B7X zKni2){kuC4-thuo=q!%dwf3s)1wF(Ce5Bw%tw!i86IKcFQ6I+w4j8^HW=Tq#C1pn$ zQqq=UOc1F4_Ww-3@ve5GY+bNhw-@FmdD&5tNUeG3-l+Z=IS4OZ{volpeK>Y9X4#`P zLMs1soCOv$t_4ivFVuz0(9U&@w8>Yrn@K#IyHjbL2EjE^$~vr|HQUwbJ>SX{(_)@y z^HeL90;&njT^Y~uK3LChk^`g&OureIA+UlLE$E2H9v^HU4G=QUJ_W-PYjRPP$yH+CTlU$a%Gf^c!DXq z#WF`ukw!gtwJUD62QJ4+H&RzF4HNmMq~;nmJJZ;tbujBUqn%9A-vCF@&U|JlqhC%$ zMbq-TOpr`zSikS|XWSRZSs=w9q5VQaqp=GYdaG%?W31ua$f`V$e!1+<+QK0=&z4f+ z$~m;`XkSu49of@Hm`cK4JUAR-E5%}LQXk-}J(xMN4_y0H78yVY@_wA-p$?{CA{{jugaVn%k`M;-?B25h4%RP8`fto+ ztoc6ambGySU#EhM1>YZNsSm~PLMb-)+I2zkP*n9@=pg?4*44*eCgxAhRtG=m2Z&=v z8^wpx*Ivs+-9Off0n;Va8dHd_gGWm05-@<;Svc`cB*O!3PLNMi`O)VS^Rw;GOGDgI z3)@)F>>QW*Zi8;e-^j-bR{~|VQ*i()&uGTZj?xRNhHWVh1}VmNM@~84ojNd^+@0S} zCt4h;%Ik%+vP#-2uCr58sG>__MJ>s#Ww~17mtb0c7~EE8Z|ibWP-rtguhTv!V+VAz zfP(u{G=p9d`kaxEK%PS(2LFNPgA(f|VuPcgojiP6TYwoB)9_D6KL6^ds7wrpRK#Ke z2fC9L%)P-C`Om*HbOxAY&@rBj5OydK^Y{`Pc_sJ)Q$2i?_5T0p>t6u3g#lfu6Ba}X zGO+yY+DgxSE94LtV!SM#HPHOmA9beD}L5sv`3zsExZ z_TTXkS!EfA2f|HT+x|g|=wE1UuEc#5zZBvC{$ase;J++LN1_=rYJ))jr;+F1jgyr@ zQIH}1e`ERHCl6$|w@TH^TseSS<= zREkS_G93?TE#o#3rOo}pfFZxd+Sb|gjH5hHI$A&~?e*d*k_e&IU(7B}_+2qV zup;%uL~90HS?n3v!{tr7yNLN)levUICH094NSYXTPkzc$77&!orEc36ky`Sz6C;13 z_~~m#lX;2$Wtx?PguY`?B+dvP#*zcCKb(Ar?~f>{{qg4xH9(h5YMM?2x^Clxo<9OZ zTg$u@>LL<~oOkjE2f4sSSrK>> znNnUzvFS0ZGc3c>oAh;e@UxzKUv6pUU;1Wgju$etCjnuQyeRaS+gvZi+Cf-kP-X4$crcjWr|=F>-5LRXP7{jBmMT^s%t50 zUJ*~;wkOrzF=AL$5TVX#-C2Fp`FVxVkA;78n0JQjd6)N z|B?I(80!=SAR_%@L5KZmL>2BpIkE{MJSN0mrLz_Lw;mmQcNo)xIbK}L` za8M4tCP50YR95qv(qQ|?b4hSt)D`=p@n07b4vZl1n`hB5rbl^`au#*Qc5h+m?MZqN ze}UVdt{tExoPT$%=5X){h89eyDpZ;m=!@g{=m#OhdlAC==W&POfJYOcAw>XG3_C?* zp^xW-axl9%sQn+Y+mu*VK#LV>`m@#-LnVFQ0+b;1J!`m#1dcrK{o3}vN53$ZHKkYA zCxGMz0N4;vByLVU;!w!0^Im7LSOzysA~79Zl?isx2W#?ig`4?UFUS?1jeckG8#u9 zeEx*@LKKm({%cHHiSq@%cA3;QqSt0^(wDa!2V$ZC@&p&?V*{x0=>N%OcO0R}gPDgI z*K4ESZX5@L9%j1?4igcy&9oNUOMmfcZn;Zuy1RMX^A|h% zf)LNd*B+yvfpg^1b-ArN{g|lQY9j|$qL1L$uz8qbI>&Ee7~f@xmvw&$uwQ;e z&va9m6k;=K*KbjKV!CS^r}z%A7Ovt8z{7hL*RHj0yC}r2Y19eD8aO(`5440}R7qq> z%=&z#h3Xvc;;~8hKr;v&1=A&Q3Q4b?zIvL`x6SFtnCLnjN!*vp1Rosr`>%K?tFF5a z?$swAUdE+y0RLH7qa%?3fU?2yqhfzSSZMbIne;kJ(gVN8fH0NlAF&5GtYB}2K;AIG z%M=gg#1tRQQvsTw9X6k%HfgE8*XS$zdcVNx2Q7p{|8Mq>XC*179R_LkaD)gFS;z}$ z=u8?6!qRT%9XsONO^7&@Wd7>JGF5apj++EEDFuru$+X3vt;Yur`1@0I8gS1gb~>Sb z@((n8mEkiOP#+DCFmZ&YCnd{bg`1O)3JrAjaNdZywB10Mg%D;AIB_`QF1xg00ur7F z7nk)p$|k{90?>*_5k8>zCBRmq=f(pC=D%e?Orig&G1q_BSahKFjzj&is&gAS=r}zI z3I>=DAO1&OluDPx9@_a;mK`dXfnoe$i?7Gs*S62qc+^f6K8k==13@xrE_|_U5STqd)eAh$ z?;W-6593;o*;RBo5$3@frUF)IZy0bWJa+}=43MlaaKPUmVhMp73W35gH85m0-8F&l zF6e!D`5XRI$8mTG{dG>;oO4q)*kN!>Ub5|rP{?qATZh@yY!jn6Is zCan*u2rxM>LI0COg-c*hrVCONg$Ms{K;yYu*wJijcVR-t3U;H@U`ZN2hMGJ71Qd)M zF<{dk&JZC%_BMALV}Tff&;%2urZLz z4%-Ev{)18&{gZw85a)xNIF9k%^*>a&0+4WG3s6@@myR;P%Rfwnkq{}s$}KP^(fpcR zKgLlc51)nZHjballcZ>LX3XiNc^r^o4kcs-l#n_YlZHEYa<$HCm!=73m>(8gO#C&V z0rjfzQ^r2gFXjFFRS7MdFB88XHH1R3V~K4m)&?Y8nh5&J0-UGhhOiQP{CZ=NcH`vL zd+hS<$w>5r>TVm^l@M;9gF^RCKbBnGEMJ*aVBdEHg5x+S;_KtV*Se@4fBh%4`qcshonP|* zCnt<(J6bXPjK*;-7-=-WtgZ*N@E9#Ln{q@5j*)NFPy)PciuG?8n3*;b{;wC&qF>&- z4!sikjDCenc;}HCYcR1a1Y)7ARLzael{#&E@n_~6O(;Up`~W32X;#|dPKJgCJQGw& zG{P_N_~0Ju^Z8(m6o9KsWq?;^aL}BDVuH-mLb7nu7dJS*f4w+!F)DG!yU@X0Id^-X zZ%N_qP_e}j+hB>^HUoO7LUTYs9=gOTzb>eYudky409F9;eh2>l8%7hna98uOKJS+# z@0vMbT}`lNr1WyIk;t4>;0Z`4q%L_tRFqMEqn}xJ@4yLRZrMz?>7-^Iwp2Y;TR?ZKNmjrgzT#B ztQi1!v|tu}ad|s*|Ct3&MZt+GZR1Y)^uYlZ7yUj~hpUSiP&kO!Ui{k{%Sfn1IA!zS zZ7Y&JdkV^Iw(A75rC;~`TD-q*PO~^|wcJCn4`d$r$tx^t{!l+^Rx4Z-KqTN< zL<|0I@&aeM4~4iDEH&o7zz}ZsT1fRtkCR7P|FF?NIpcT$)d6mGEwaJ%DHYoDz)#`o z;dm>=4ysQOI(;Vk-Gc8K0Kho`C?^BnNbEw76{-9`J5r>UgbGvec zO%y$-atgqC39?Xt5d+*QqZiGqb?s#T)+Ue))cBfu8?!O~e&9WhHGGTfilW<=wO;;H zia9kV2AET${wWirJHigoXt(=G8VpDu`1zJqO{YVn3g!s=Ja2PZI z9Q455!?`ul-6!1=HxZRsFTXZ(^cH0G5r8~m+4JxfX!Uo{5{C=^C18p?-wn|dk$ciZ z=Ljh!0PO(VK#z!nBu2xe$riYdqnVg&xs1N{?XaHxqMySLbvR%_AqJnq$-+O>xyb{H za>l<$i4ktSgQU54__;OZ6om2GgdP-~-~iEo0j4V>&}uax+M9GzI~}JPA+sk9gkiD# zz?=nzhx>0RirP6iqz=)_!gcwTDzra?Phg)IB1{3m?n2Su-qw#}cEKfo#YKEmNy$b5$10AL_oNJ{|V z#sZodF1Y76u~Szb8_gg3?H?Y-KvZIy4DjuR6Gr&Mb8p;v;5=UeTI~s)c}8*D7hAi8 z)?jjygc`op=~n<=jHSbr^Ebex*yZ_L~*(T#kn{*h~kn{{&S?#;CJ^ zn4e(Bv;wzc6O%OYI|t8!_^RQ%4&eAJleOvrh8lh+aVMU9Gltt<|6BTw53D8TCCmQA zL#BU#{`q%T9bt>ps)RselO`s)@qGu@lVnmEUO4`fRVxpmMAIBdK-pbOyDi*-G0i&5 zzCC=5CwY2#g;0CR%a%>qJJ7t_e}Yyqz$6$U)1%&vxQ@=r(k52&LEYTwb1X=~{)j2jim#eLe*mzHGRw{b!Xi+>{Ef%3-2;TgicR-Bp7OpGf`7huYQ=V&o2)M zQD$PN0ojw0o@kBh5zD97uR|T2d5;C=0UqbVDar9=dV*T23jkeqSxL}B^T9yA@e9_PN6m?I z(sH=$hty^z3B*l0XL1tn)kcA-P-xm2iDnJ@5;}MKHn8AX%Tq^UR$BZ}6bUPO0_@o$ zciQe!_Z(2wiwCDb>sS!F2%2As9B?>L#e9*BT@vG4AOO!Uv}?4T`YCc}NY?5wn01{o zTO;we-mmN?E^oEhJ1HfI#!Un|6jMq7qLLGxJ~z8j;sGJgU4qzAKCYB~Mm4j}+}a0p zvq#xbNYw84y7PL7eiL9_em_N_`#4sJ*Zi!qfnK=^=+m36JIDFj7yFRlu6Ts$1CiBMOd-2Rq*Gi19V8pc|?&Vf@_zZiU8fyTHi7FuD{%V)Lz=qw!f^q z^mHbgrBGFKj509ZI)f9q-!6(&t5l_ssH=%0`C6_us2%uhL= zdx7pFMYrpdo+3cEP*GC{R*w$V?iiq(fO#~_MK%*@${f3)toGk`RrN3rVyH`h#O3iM z3bU|?j&0dTwx)WO4%*x3g)_VAIM}{}ABWnqZjC59uDvZD>9W=svyL0vlY1!i3ZSl~ zOCuPIZQ>%I+T7qB}hJd4P)t) zXXPJGmVbzdRAcu@y*|%2@Fqpf#FN)HOgZhKXor2P;BL#KTfsyjndf6(DJy$S##HX( zC{s&iUVaGm5A4f++4;5io17wjP^^6sL$gawPKTJ7<-q4E1Bra+XD3Mng&$qoHj&=A zs`20>PLl>iXulRGk1wb;aSgc=9KkzH!Zh0d9w+I?8O{`npQUPT*HQ zs$sp=Imo62uD4Spzl)9NyjAd-q>zG^;+F*>db53PfCNx#9V!BE67;hsA=3ak7p0m$ za~z5Ut!L3ieU9ta;5HS@P=T*_zt;C=AzMTQ=jvMa0IwT;p(jyv)Ty}xkHM<}J}L6Q zy`I@!Wlg;T^zZ)?tHk|`F1V}H>2qpM6qoi+gJz_W<&(p6?ipXZDouTtq47CIK>JfF zfvLIKi~T-5+jLFHY>Zt&;c+p=jznkmJD|vg+)2u{?%ZM>-Ir*S4F1qUaTS0Lb(RbQ zNeujhZB7H54ClCQQ9UHy+oD;LmNRdQoKB0E1gzTIv#U{eePn)q^6I7S=>Fzo z@-C8j^bCRH>|slygAxk?$CKkls&c5nDZi<1yA^bS5Y^YsZ$EYkFV8_lzQ%yRW# zo;Ncu)6rX3xb0Davr;1>jrz$3epDI)i6OLDMb6fi=If-nZNk99{tM2z@9CvI-01k= z&DK`+`)6*4DG9|FoUuPM8005Qj44serp~wx4S}X+S|wg#V+eL+zm8kS;_4V+etZjkuQHH{;m{yMiG2n zR`)uwHAlUw5pXbe8XN|R{q{BT%f$N8(QTc0!X0)u?di*ckhk?jY+EN;POK4O?xHeu z`D|>{f`tMdlS+33a#;F()KwUS7q0jK{nLyiq7|nI!dzbj_lv6=2(=wvRreF~!RQkg zD>f7|rlLT^eyE->u)3j_GrY8*DZ2eb#nL-&C+=#OQ)$WDAZ*|juMw7)SHRtliEFHn zw3EJhwEq%*#;zv+#IKin&O3b{sG-CgrM}7F|TA&{T0x`F`Zir_ETs;62hE+3+Lfo zE9rT@lXs62q4i!2(zWqgQ#G^w?Zv_q&?^Ri1MTWEbmn|6esG5kp7f5z3_3F=l=^b_ z`fwM;QaB#de!EE@-u58$v&;K&!L0Xbu^s0(eqp1jBYtX9;KU0ye;iK9&lTU?(3^8X zn$Kv~gdviSe|WveI-t8IG&|~XbyM(xpK8`@Whl#(-jxY%k@veBwAdM?lj|}5H%o(y1!bzIQ|SIohHEOFXFl+@_sr!EB!V6 zZNN!^5cRXOY`|QTk$OeAf{D}0&xQnD-}pQS?h4(`zBRZbCQ%oO>k8*+)>b68uz9+o zp_J71@p^iMiIi-**eNk7khVl(}?u5 zmQMjxrgDtbDFbwc8T`sSJ6^KiMy>3!1RWJpyU#nWyJURJ%~T`-Z$rnE0Y?S{MNTS^ zoDi|%r;uu(2CVIu=k;RwEi%5csU%k4?+%rCD=d12EPzuz&5mR}-THIqxz#N~Bs#2h z4&$C5K+-I$stNS#F9<%tvJcO|DRK>4dLTy)H=-Lwgf1S$*(`cWyt7(c>SV;ilV2=- z8Ub=vN;Qo)hm3T9W5d*P(FWAy^I%YUiJhn+MVM!0H{5?NC`~A1qqwqIBc{rVd)Yk| zXK3&yx;I#_4hD1Lx6@GCKIqBU_Zgs|~y^$5L zicl4bZBhg33DkKf)=^Cm(Tz*|YCnBQ>Xxml98U<<-|`7h4E4vi*jb4@YM}rO9&);6eG?)rS{{-r7?jQuT$8XRTFOwvz`n%ldCLBS8ixZt-W2Ip9-BDuNlM{e)c;->VM7CAtOERcM`d{YYO=Slhr(>Is-L;zt~VmdBb!3jo&gJbGD=Dtz(SA4QA zUX6kR^EhRuTo9NXv7eGdOrE#A%9=hVSUrM6`%J&l>}{M@%FA|)%vI({o-MOQ@^{G zG0*F)-{y2Ieb>JK7Bkrpt|*j*E(J6y*Z20j-;OcFDs)uPQkPMiRynfV>zMo11RdRzq{~DB zj_;J_6KIXQa7yqx+Wpoo0p5MT69my!+niN;Cjr;SDohk{0HS}FbrLYm8jge@$lTxWus;;ZwlkXtoH&wOlIrD7( zd9Z%HAyaYDq=VP9emXi`(UkA2qDb)M_4^sbP6UZ__8YSyg`=oI(C+p9XPi5(x5&Y_ z2dObTv%g*u4AAzQ5=D1-&arU=-4Ozb?&dw57a?kFD|hIZy7>MXQnWNtdcz^^HD%vt z>GYI>9fx*}dVhd=7~E%N@WMR=37C~t-PH89xu(;lWx1K4tv|akhRL1)-rzt`bt1tT zpxfSv>~aqt*dUe_^vU-~!WQIqfA;W-XS!7N=GbJk6qO0ypSG4hQ`vu6A~0j|?X~bO zn$rH18y7K756x>|m(e=MUS1}6_2mwWo<8*4$Uc3w@Jf*UEysEybw9W5)6beXDq8!q`>YP^m*`XS(xQw&q6MoW7c4p;XX+u9m{deB5arT16+?~chE6f zKH1%ux186;?;e+zJ1+NFj4$Bh+Fh^e65o#P7uJ`aO!1e!4lHk`L0}wt76kZ@={=eW zvR*iEEZAS^Gb#1njPdxZkg<}`i1_;a>;c5X8xv+e>>s4<0}^Sj@^NYhM#Vd2>MUQo zf8uTXD(5Q_?z>%_V8#Uda-B4CO1z8av#&umH*j`XytY~?RsP!cy38u^J~Ms(_OoEN5TBvv6H6raf$V*{`!p+*qiSj(uHy*ssMhAj(= z-RY#eIe!9;?taBb$se1RCk=+6yu%D4gw8JVSdCC!1SO%jMU=cNL|^g!S~m*bRC2Ak zZ?i$Ve^0CFDgDY;SR#3oHva9IZ1y)X_Tm`1%&ML=%VZflK=6p}JdLv5!WtH#N4s;H4LSk0Q5 zS+l*U>L3yZOlhfs9Q{No%|xj&Pvo4<*nUZPv)X+ju?rk|YJcO)=*ZNDqo5~~-IS}d z{SPk3h(PU+uYHXKm81(9h}+&_b5|5|G5x!Im*z0UCYaAeuBNN!1Q({5Iu}XoHfO1T zKnmTv1MJq5tM^lKNa*VMht&bq-Et1r5&_rOW|sj~cQ`bc1I+EzEDL#Mn+o30;w+J< zeo+kHtmi4evtqUfM$saA53%IooShNJ`SN^)2MaQa| zMMagKWw)^}UQD%9a+e!{DjKWt7BDK^X#J=LwYcH9z)J%1%RlL}1s4$6xx-1>8St)N zqF9}>d6u3ez19BwE^#gQ%J#XdNoD2d4v~*8-y%d$TmfY|#t9z612%U8Y0bVn;W-Y@ z%NUKm<4VWx78<^G-(Bz;nRjI|Hy(cp<|da?a9m3844RW${ zkUidAa4U)DR^Ayz)kRMl4BtsnMkwDzyGE+H`&3P;AL0DD#{5J%9n6oFB#~#SrPj~} zu6OxZ=CBBZk2wsNnfM22$^GL`>=e_$da9gzFmvX`N8cueW&}L>_VPG`WnZg zRZzkv#kaIE=lqQBu&#L)Z;SClwjCvv53yyirafq;2IpNn#)um zrG2hKxHW!!0Bdjs7FxjEs=&(^SH)H7vx?5^&A7 z?UntVazfO_(!{6rAP{@gS&(d07!V;^8wHat81>-Xuh)?7p%3Sc#KY z8`+0*Wkon9pf_Qs-GrYU^ro?UegkUxLV->ifUrv8BMlT{!IfFiKmlgE8=EO3lb`Bb zorDB#y`=o%m3DN3t(K=qF)w?bfdWy#EGod})jF*#llhZd)>)a+$VV-!R);UV)~f9H z4}a9G!WcIT16L0$t9GvjC&UC?ZQsI{{Dtj4Lg9u#=}^kIfqAz@^Y;&3PMvkPqbm%+viNAE zcna0r*jWqfQs17B>~PETc(w`;SR-oPB{!kps0zY_mW+VGDrVwDXeL8q#)#-#;a-Hb zhzQ#yuyNM$;{9rKT7|d!>yMN8zfNth615j)UFp)JxXYDr(Xq760^*NDy;&47X|mo< zil#)Mp~TbO#pOvDiy1SaN7zQa4;CCq(Qy5zTxnwI;LBjRe6=!^+oJZkiCDhWh4W}+ zv}ar1t&RIekp1+Z!NtYE`ZN_dQ>^>DW&gGh8z$@$0Vgr!$DnL7K?;GaKyJ!olDK5~ zp(^uGdMs}7+w6f~8_09;Rb@`L-{5gXnCEwUQ0dQQ(B`C>cVpy90r{)Q#Hy3f?AYhaFOLbQPQ0m8uhsgN zc;y}vEt;=J9dqxxnF2IZpUpsdG)mBiUyr7ya@CIv(1bQB0=BN04%s*&gg@1p^1-H3SESfzuOqlNn=P^| zM``(#(GP5-$=Y}&2{GSq%*F@}vaQK&N{A;kp-)o>94A3vDtKnhilsCBxj&mr_)FEt z5(hoKEcRIuq4sc6MCLwpVQ~gD^cihxJKFD(y+loeeR-(fZxSA4ztqzd+hE~n$tMUl z-~6O)?>~?FAgYu7#-*yD(V_Yx@AtjgfriWRX;eIO-bahGIYaJ>GA`BGb&Yg8uUomS1X^C9gcrBRtKkPVF09F{cT!Ctxvsv zF@)RqS@#=H$A_}#laR{4PK+4_ZsuCjkpgKeKswp8FA#i+!kadnSmAs7*tBa=Q63Tf z^EW2Z%vJ9C8K0Cb8UpyRO{r3Mz+g@bIeG(EN{+tMI}^EH_WMq??~r5+v?A35Hw5Jg zQO}+!sKKQZcz5{Z{0JYK=rV8CFKE?;XQTH42eg(hKwp0s%i8g3)7!2`Z|^;R6H8S zPw`wO#b3`sgoZM8CjGnj#SkEhznC%sQ-|Rs64?OkpeDdisv^u~M zXlh8o1%AKlnrf1CIhI#cD?WJmlqMvwQYEh~+~rk9ncFvqgm&LP_wzzEwUdM>-;QLX zT?0Z?&At%#Jw*p9Tg75RBPoX@563uYU+N)`TMO>Sk>D*fWfDL~f$kJ`L^m;1fFFq| zo?TL!*4p?k{-v)S9zp${ObuqQnoedh%slu1UJmE;zMP;t`-=sOcy$J~7=^#*Ixdk0 z!09G_>lxHw3x5Bira6A_;|$1luP$R%fislwPwn?f&f0S~e`m8>*@*B6?;TzG#x2PI zXwk#TdOVh1_s)Vzb4a49Frh$O6G{PjDX^2@Wf0K(mK3O$6pu*(`?cv4aL!}?uqR9&#UE`m1Kb}XIRvFc zi8qepjz4CSFin$-{!JWw;2F|*SwVu7gQw$>AzT-_z-^76k}e*39raCvOH$sYaR$Vt z^2zK5r>#x8?@Bb%1rA43g6Og0pIx1uqpgYqV7cDHuM-4?KfHK5)pN3Cnu%?IEB;IR zSuhjd-gA!>Ecg*1eybqgbS*|Xkz)pcsgc*L9f%?ajEr8U;-228O!x|_JiZA42lrnB zAZMZuU1+wk|Kn99XgYj&936eb^guM*tHEFNvk}ne*s2^yrmraejQ200WaRrPF@bbW z-+#k*Y}3uLX6q2O*zraLYeh@H_jUlpel*Vc36LmThYPw-6dqd``Q*>@ODouQ3{u>zRs$ZPbzqdizi7c@U-_fLQaYy zz#ew4UFUYnhsV%YM!_SThgK1`zL!sE-$s_f?uB1Lrt6^rE91k1NQ}Lc(QhRcMC+xX zaDV&|A7GRLeY$5|AjRaH6QRbJqV}P~2aW?j*Qnz??3~*ZFI+|pQ)vwBO!ae5c`xR6 zuvylAny)n)^PAw7YQ|`~jpjz3I571fuCJpcV7s_X(99-A!BjRpc*cK!-fg=OdnH_B zF3-13s6@uFT$c}b=2ngCH*P{0oisQ2?q>~yzv z@o6avN4v&kOJ(26hSnOK&Yt{-ArYJC>~l7b7lvkD9Qe}YrX-8odA0CHcVx0lJ@j@> zL@0ZWoNi|!-$E7gt0 z%1)sKw2{l$)!O?Qph?^^3}h*Qx%LNHMIzsiWIMd5#lvZ-wmsT}vt@R4K}yBVyR*E~ zv+Pe)K^}pObd5HZd*&;^)o)bASmsaHI@Ko3{0v+^$%VL`W}ml;yFh@tk{3yeOB+K{ z9W+oJ2q2t)tSHl#^gk}@e>#G=quJsa-iLMX!A6Slq-4&jWfTrF^O!%Y7r02lTx%?Z z$MDtjvoYp#A{cL7K|0g16yu_p08*bN5Z6_zbzAH8YSr-eFPh`nj*~2Q0wi`~Vz0aC zT#_%U^~t2|&B{|ze!1ryf;CU%H! z*?G!+66lBoBjkBxUiJyOrm+(LV&!4Z|0KzYBvKb60I4h1prC!4-pzUzlQRJ1zww_4(DDk5?rs zS#l0@a|*JeKf5S!KkvwWar)M$mdKpuAaa}j*W8)kr616r8WJhy^uEy!T)qquqT>fG ze*U7o0QDEX4;-BvVBt;`&&AF`*d}Z^%4xpIn722G6e4Ph`fWST+lCHiN}jbWem4{nK10>S%g z4+M{++n+W@H|>o|wxT+VC9iexr4-ISe^=yEkUZJkIA|&v>`IP#C~#f#((PmKIu}Zm zuHTB3jlSCXE$+>y`o{!3(x|cvsFg1xZ{B5agWF9x5u3BDmvXavV}WyN8EzsC>=+Y- zFoAyjvftG3%lW3)+is5x$K!$fB>=)(5a4l~IFrfi-&`wrd86@j_k58!cK6LPmiB8utP_-+KKXkvO$j|EA<4g- z-A{6zeap?j$&sh(-9-uhuJR1rz?A{w)L3j_u~wMAEyD#@5Og>$AJIK+Wgk_vColR< zEfm8^WL{vL|KaoPubItlgs3#bU5?_hw68+1y9dYRw7(kmWn6d?L3@mVBbBugWGi&O z_n`kHVH-(+t;2mn)Hy=TY|H7_MS?OErgx@JI*^pLc1Sph9I6!Cg(P)nxR4Q?BcEUC z$dpW#)$9&(cwpbm)ST$VorS7E_g~)I(k5<4Qz-#v)7^mcg7DNTdT~Z>C>~F zy96YK+*1^k03(T*liJbh|1!?+RidDN-HGTGT=n_%pKt-oKm_b1*e=oA>MaKd$+pGG zTvug=d+2;&{@hWybDu(cnok2Z3*rqWO+;MLZ7Q45Yg&1~=h*Wtv&1Ezqj80p-VaSZ z)?sH7C55|0LQ+JDiInr(>hdY$43jQIY(DSR79QV-tr{~JC;p;;{%H4HC}d&i8}W-Y z#Rvk-JFKv-;Mp@|U(+1=X@w*%@K`P-JEdxHgUg?9JYiKf$MCRu)@+u@=)O0#<0ei^ zkI6I#O1l@xL1G9|>LqBUkn(AQ6)7C7Zc_jzc2iv z_qS4+FPVDy#q6zw|CpWHeVvT<+ln7=Jbd*Gxip89+pPWWKjU_LPwg{-!UtI=b3u$( z?7)t3H}bHPgvm9GdF&fMf+wIsK+Sv5>_=MFF-lb=X6M$b87B~Bpirz;h`}#$7p@%Q zt_qnH&9GeE-o|~|IB`gw$ptiMI~d(r0f&lhE!b9&IUhvjdXvsdlTB|3N9Ik}-zH`( zuFM2suMER+=P;~tTZH|5 zZHVap2MbdR|F~jH=S&Mhj>qpIlQOn%YFjRk99#L=H0DFqd;5iBx--?hWY5Q!$DKZT zml||(fkE5(IDgXRXx|2xY8R-&Vrmzip)zQyBMeGh>Z9ES1Vfg-+E9UPl8>)`IwRq# zukIL!jl*uQq*Cakq5Jw)*vMSD=D@R0S%Pa5#U!|QeKb$k|&>N5||BN*x?L(J~?Y+_II5gxvmCvZ{_4a<{ z?;U8^fvQm3FAAjp!oHXjAVtFs=Kk;lzx$;V9jJb}i*VVatV;^{l}eg7XvIw zENXjb2{cU&uHYz)>H62153iE}i#9a=DB4;*La#k}#O_s+D zO#)w9u54<%@>HE)wq_?6;J;l(86j{SL-tI0!~aT_MEDYKbEQu0aUb?!UWxpCm2V7h z54M9G)NV|ZQq(*&J>xI1gr6h2UrPG+`sC8%n0XHQ_y=)NaB`N!QIObjMc>preO@N- zl#tLsRD~_n@QI$H6%=Tp`8#2KQT{V*T9{<!V4`edJTcNa|IrjU&y3R4BNiUJV@{6KjOKgL%oA$rou|Fs= zU$3S1!LqkPby)A;>B35A^vv zVoa3MoYf~p(0x)~R|;>j@p68%Yk@tP_4E_7cDQlJbKTmI;w<>upCA+!fO%fB6knu% zby3&zl`Rj;^^}#F6yXpZC&o2lggK`<5LS%V=yBTiS;~Hk$$Tegfioi-eGlzn5doKx zl!G5gx(_o%BDv}T^~ylhf8zRTBl#C28gSw^V1!)NJUsH^i>`aof;T%m5*21tBuNW6 zLhsa)Y_psDg<^#sV?+nJb%2=u)bx~7BPhZ})p|m`hJX&`hmJ#Oj^E8F@4YM~3OLc; zt5TahZ!&jl^Ry6E$~k#PmQ!a$JrUxG*h?2ER%7I^cdMs7zetL zm&&TsViEfuwgdL&q3?f&$Y(c`M-f<2vJv~sCjx!@T3dy7d-K`+OoxNlS&0_p z*UWlbOli|HrSzqpSLeR{<%Dyfte;-CkRe=`wPr80&F6HG(kTaW zw5IRK%SB6?$E0AfLNLj=H(qhw1(4WS@{QB2?W(Z^^RlR!u(6D-?0-n zB!OQvxLY$Qqr8;8GxHY#tq=kHO%pp3cMRc11;$l`iu=v~r6ZSaZqPJz)82DE^(hZ*hX(h1p~~2g)DVSB7S#aP)c~sv{?* zsdQ3)j0}f9Tc|mU&}spqVu!fr;J0hd&0THw5ph#3Gv;dx3WS(5v;sOU+<^cjvRO^Q zd%ohX*Wl)0r6tJpk#>bU4w6AKXXI*X80_NJYS~}xYOfRyUdVAvCf*i1``+SCZ51Wp zBeY6suCQvgnD3wHU-Q1vTw z#;-Wz(oj7bJ$CWC=amnJi*c^|D_MF_@n1OJR_X=NGBjd~Qsg(d@2pd2gJvInB>ga; zWxH*=oK)jcXUzwSaY7O+w*!kY#wMS)ALi$(XuGSXe-WM`S(T7+F) z1i*NiXG^@^6nBoQqVmBY>S#oDyWVAZ=6TdjC~c=WhD~J$x-IN2HsP$1sQY5rV6a04 zW{IF)0iA0iq?h@G+5S}gU=E&vSs(+~5!&62xlDBKFs#M)6kfZ>V@!7r)_Lab;0$Z+ zPOU&>Q5BqXW#(5bF0Cmc&F9};nu!gUCtlvtn`e!N!uUdUy@N4ngwE4Bnw(4I~ zCX5hAx$TlyCZW_N|3hb?>> zK2z>`F@?Xeq~oRPN>?)l^P<;g#=KGmtM5a&_5jp=O(Q7k7ZvG)pQxVNHO^o zr!!=+R|P!t6~AI}p4DN`?_|ulXTUA)If2sk{HoJj{s`~h^cg-+`Wh`IBnvy*)p#O5ZzPTi=2Dn(4Or=p3Ae7{5B3M(BRetrN|@7z_se zZsd|xU#rov@Jl1-U0na(?e~+_&z)~=IgT)w$?CysFB02* z=m~CrPQBmiwCs&U%Y7D)+wQbCPF05b2a_cS4;FE0-9n0iXsULD)0DJl%0GWi30idt zGr4j?%!cIP1`=iEAlDOS$0Nw!UEC;Ub{!OLj1*j*5!y6#xlgWsdjZuTx~VcgHyy22Lm!>gH0cGKc56;)r^2{6!C z0X)G?HQ=>&m{VT5>FW(bwq}gIaPQ%1TIyQzrM~7zU;3h@+rGbTj2mF4Uq!87H=(L@ zi$r2Vp*0iK&6Xlp-S!8zqlZ5GGNw5~595noOPF|d(YZ41e{xkmF~sb4!Q~hd)Z?PY zwOhb%Uw8wr+cg>= zRM&HZGKDi9#-OTT+Rs!nA(cLDPixi%o=Ye3lL!FLj`$WhwLi^)(y7)e^x@A39mec7 zt`&AN;#Or5x%EE3NM)-I{R9NwSyW zFw?8LlVX(%CZXzoMusGaEV~TRgpnFD_wUt3}?m(P+1PCQW9)YE`9d!BO_{|H(=!X7q&R{u1o#{TT#BY2PcqQL7%0-#dyCK*U9kJ5!{XdwJE_*GK|%jXB1 z=syWXKP>o6yyrhBNGYAczXi^FBu(W!sN?Oy7cGnwp16+fdar~h8HOJ15y~*r@nUNA zC}&mak7WTi3K%Cu%P;2%@Z%8%5FBcwj0Go8;BOEdGaaK-LokK{gHz)P$yTz=@CMo+ zTUJkg-;@PgiU!@EYL}(I;!$5j^t+@?;Rp&6HFR%&y65OkcmafHad<_;AO3Y~28Tc3 z-FhI8Lhk#}F`8)$V;q1y*&yprEUx3l-xzg-f~Ygs=6Dco|ro$=^QBf=bN?MxI# zjvny^5*0UCo4E7#$9DmIn*kD&(KV{dVD_Qpr$y*LxX(z)2ygWILa9@R$2K9__lxFP z&I;LlryhKf!bmD>EE~ADTtSl$Zvk{(FKC8Hzb#&Ypn|uAXf=t>M=}H`1y@`-Uoas| zA`jTBtTRQ+bZ6t?{qGHUT>S41sQp!ULB^YEQ^IsiVgt4l9!WG2LKm-hzd{<;6t1uawL2} zw2)Ae0H7iUDzV2uV>nLS6ZU7Az&03q}$itJLW9eLx?Y#O_syF|ILd&)G^-CkB zf@aIXE%jpcg129p-~G`1e+U16CLvS#-0z28(f`iYTKVj3bskeZf~BR{=Z4?I+AyI9O`vX_jPVvI`bI}mG3xOn;3U6 zZhrC!es^bz|6%j5edB0?+Pb&f(#pjm)+)R(Wt4ATb%Hvnp6BnnpQHYb|MLagG6jAwh^m z$$;wrJc^w^3j~~4Ta-{8nk)*JddXBHrn#+DeqeE1>9IJMaVsG*XpH*zDtBq=%h6j1 z$bG7^m=NmqzJwgPe`=j;j_^0{X*-}WpmQ$8eT%i7c2tQ-QTKClY*`YLVr(hF5-4Z5 zknwgUVx{9#(lKW%RXGI4WjWtQ@$XufNYU)=`@|-;6RWPJQ?yPFZhunr@Y1;Sw~~0U zS91jVT|@k#4CHxRFS_1EPWkyQrBxU~ps8 z2UGLN-_#PFa^Cb;a}@>oMgIZ9V;bJL(5Fdip7c)gYlo`8A{B_Pte)&k3+-t6fl%w; z8zgVEyK=I(|AluYe_fPf71Kq1EAze6fYIbk=f`Mcj^c8CMgQ=>y5NSm%8Al!>Ts>| zo1G^P=X-d9;3YQ9vVRr>IogG%g?|INUqHbL!8qc3kTb#cB!&z|+MX}- zLWZN(hzT3&IVo(edOYs88V19hmi?LD^%ESuVo(>xGBq=+M+O&jIE@YdiWUBIY9dIPf) zJ#!GzS{%SUQ4!A$FMUkoGp=K`bE}&Z@w9e7vWi)@ zQ)WavQ?YsLiw1BHM86U1HrRc<$EmqE3(Cd-`SH|;+9L1Z(^s{dt3Nb+=^H9nMNGcb zkHL)Na2z}NE&zQV)w!LRu%$jwQXDy-u|>(eK~bX8{CT0a0K@f;&2vHjH2)$CLzTkyJ&b$bWmP`Q3%k>UwP|Je|8`N&3@DM z6GEQmNP|D5E&u0P=N%tFJV6=SdDk;>7@9sy>0ewCaVK4aAakLJnEn8GNnQa zleM=A5uoNqC)~;tto-`7_8mK^kqHr985Wdwb;?Tk1V!13^#aO39kod4qc;dcFH zVz7Jlar7A|y0D-}7~Tl$>yuX$LIK3r??*#x(WNE6<-J1Q+ol6;)*i|YhIW+(Du`DU z>|K98JwH$TJT@S!Dmp1kIEbe4>abYXaqFhpT;qyKtBx^42jnzmQh+i^o+a!pq+CB3c`c06oHW(Vl^U2soX(EOZNVioU{>ZHWF^u zup26zENr(U1_2GG9PL!e3!L88BdU2*Qa|3WW))!IG`b=);on1GanUllZDn*u4O!Q- z91aKo)0NQqKdH$O1^K)eCgTubaGZK?>At6@R+C!D8FM=czTho~_97%UUKS3*a1X8>|SzKeqQZ zO1vzpcz6!Pk2{t5dvKGf7tof*kHcBZh52C`OH@%2zNNhbX%#JR0SsG_&w5h}9n^I- z>vuLOb+MMQw~@v_^k{?rk&13L7Q`n0)l=V(mB!@!1SZN^Gp~r3twVZi=E9YuYEZ$6 z`2{@yWNC;YS5iQ{u;MubXd6QBMXQUXM3imT5&P=L_vwLIBnfRWvfR;3cdOd2O(VDW zR+{eaciRCE1SWlodHazEXCWBVOkSzv@;cwY1E%*sn$jWv&2nCb5qnS7Qz&R-Fpp%F#(#!qyOqp?>gGdU(yCQV0#;l2Xr>FP z_?(8w03a2hvVOr|!eiH{?4gOzTP;5j^lTFQ$#7H_0ti?R3R$tDj^uOf)Q-azQR(k$ zUXuDSfiXm}>i&-r6(33cayc-pF{30fP!ZsJUj$K&|3Q_dN8<;iux0rqk954Ukh&MFVK~neb|kX*r-UT?a1T>Mm!b|eN6Yx*_VS!#!tjOCgdXM zmAXd~T#Q8Caxlw@1Er81`S7Z%NclQ-M(0O$ZL9Bip4oQBV2Cu# z_{%T;oFbERJ{JXTmE4wbzJmQap-5i0FAx3vgF`s=MZ?Ie{eElkzk0yF z$hm6C;-T5z3!aKr9fA!$53tJ5a(wmk^w`DaI~1_*i%&`lVSyAdtceKfFpn_0wJ$KM z>@TPEL&W7C(}IEz(1Pj@te-h7u&@a-3?Y`6x~F8JgKEuTOh2(t!v0xjDuG7sYk?k? z<>KKSu^%AVCHTP$0UwfHL{@CZ2i(pM-K(@2u4aj~hTNutHnigpAg2;)5iCa`;>4It z`C)v;!S`8g79tqtr|PK>R!6tRu?uKjX(>vrf5~LM9=}z!z%+MD>YLxy{yE(lT`|%d zsjxU_YDpWkAxU$37=%)25_y z%23jYIiH`iG4A@%?$I>0s?wu4G2fIw+5P2*0-b*!L_hA_dJ?cS~bE|S)Pj}U-)kE zrA5rX`6oAzgD}uWA}NFfh;!fRAcEDqg&Y7(x^J4XUE}1*hWUj}N%GzVm8#oaGa<~2 zI0^3npw;z`+la`=N=5N7klN*SrV&EfD!be77n%+{Cm+`K0t30ic^QmE{}K@y76Wm3 z4TjSt9?ieI#glb}OQ>S^wE<k_XfN3!`Aa`%xB z`#L@GblQ6z+U>A$b)(G$R)39?zvSj>c?GD$nsNP9wmrsz2VPAHB~lZ>OYVYcINR6u zR|fINlc&(*jq&w8KOPK#dd$IF{Bd^&QCMB1YeTH;$F39l^kWe6jBf92rn-??Tn2M0 zcTh(WM#<4}xCv-8!x=^8{PXHo_C~nmQii@Ffb$b#&<&ln#?P!G{nR75@HCTe%LsKe z{j+3h;{UoS3~It+gLnWeA=sT9sIGFRG^Z)LBB@!AZ(c1#UrmV^Hs=K|hH#-2lp1K+ z;ly#jba|ly1$QM=N{>brw1DE>=a1p89|8hhBgHqm-ob(~(r*gXwuSBxrLPbj+j5pbbWlCK7*NcxH$qru>*se%8?9yC%JNU)3%V|{n zMVairnummqW7fR5hi7Pfqe(8-SU z&!yXhl|}!PeJAFo@g+^-D^xA?jiXCzd2w@nhFE0*cvq^Xnq*94x+?Zh4>)>R#G@(A zsWr-*|9W_eb;Z2*R7xm>W@wh$Z2-rf41Xc&sHZJfs}-KOBp0Ud=;mDH=@8-QSVz@N zt(ndNc@xI`ar`ngfc~~c@I1M(EU(C^<}^Ob5wwAsII&tXPu{Sr346X-Je#X}j2R*O zI6*O`B-@X)7T@x)`UF|2I*>s$BA7MO*%1b?h4iyPX7J5+hey^1oALe|(qg|oCv5+Z ziS>Skrc}gzc)8(Jklzf?S9iU2^QiXvOEdr*kr{1829^}8(L)9tyaC5iEX2SOYp^CHw|;3;Kf+z?9nhBCF5?jkR`t~2^bE>a-Vv?WWB2-^IKw) z-~Oc|y=}hutu&8Q`aGk|oNJlAktWsGzQY=Scg)sPMbh`nNG+$Yb8;PzLOtDU5|Ort zOO<0q>Vjhc7;QvWjgx;q>&={<=6@P_%KQUy@=J0`f4~C^7kW4ZC|Hsb==Q8Kg%~!g z!g|K*hHIvb$1kN{XtO;5aDvY+d(lUE$MCb~t?hDKnoESC8Y;LzA$NEN6-nW$Pu-3e zD0G>#nXWwYTT2vEf9tM6pfZzk7r;D{Pat|s+M!nQ@;Tz5oIo1mho`c(mCT0=Z`qur4t8oU4D-WAZJi-aJNI{ zm7|pC*YC#axzEIlv27*Ae?g~)`o1$}hzMjze+6J(vdDk{s`|f6oBp04eECqhI6wc- z{im+H!KaT&g?i30ELL=|pErt4 zXXGz^H%dF6qs*Oh+IkB@L3P~6vGDstvCeTmA4Cv)$|!uITwh5rH<26H=bc*nGHc5~ z1RKn5l8Sj#f}G-y5%itTU*4C=P4qHYN;xDm6|+3IN-9{7#Hat6RjX>(C!ht*orNU; z5W(vGi3u67{vnYR5p>JdUVHXP6-vG4^d$cLx|J9RAVd1(Mt^iA9+6W@hnNnQM!$`j zChj$*zo{B|Uc7VP*x?ZtjQ}jL4^aW9N#`mQP`LS6f4QGedR%y5b4f=_l-OcCJ~17U zT1l*(-O$AbO=`sbJ%D9g*aSGq7w=Q;WMUKCfnb-O2z4fcY;p89Rr=qT( zKALZ`nyOWN-LKp4*mQzi?jA>(6^+47;mh1rL*W*2+g)<19K=2u$$f_m|7 zc`$%Xb0{v0bD-gC>A4{Q_I%e5^ZZ_05iF@<^* zeA)0wx$W~hjfxNkQ4@nYwwQ%!dP%tl-@73=!`_!w- z;m;2mYr9;oP+d$342pGlRgEC$z*-3BKmchXUmFq9r+Qif{MY^-y^)Hxi<#^A8Si`T zhXNcCp`q5ZHI`dtBv7-pAMD)9$>2f&3lOhRtdk=Xb{)L30RM>_0AqP9$rwQO!-taO zk)VGLv}>pwb|z*Ha--Lq0()DfM+o4KBH{!Q7*QJ+-0aH3lvWnButO0Mv8g+nP$dE^ zH2pt7bPDgH=y+nkH6VdDd_`?yNqHegNz+TApb;WR(UhBdg1BJvr3pTCN53da>-BzW z4BuB046XzhxGk%GLubSJNiC*l*2oXW$LJ$-p7Vp(b&L>92xOJC0> zUJpCHyt^doto&#P`-VIZph6$J<`~hZIG|eOOR<_pRQ+aR><<`;cQ@ahHx{%gpWKjG z^fY!SP<=~L@^G@EvB%gXYe{XpW6i6{aUg(MFSb(kWuN11%LQD^NVAZvFD5k1NG1p{ zA_<#f&W!-@e#JY`Hkr=6IE6ScMR{9}SN`(&DgL0~0x^CeN2cSzwRlDh9mxHS^=(K* z0RNggU9fv57=QehHU1g4s~C972Iq1n_|NXngbX7p63qDHiPP`-NNPF1z8AHXr)Xhc zW%%V=y8u_n0$MlCe<^RiJJf))?RYA1q6ow{mDfo?8;q*BER`G&fbUTu!{{?=zPOqr zjuZ8z4aCI#zeS{#-)ZxYTLEzeWV--6+ zegq>$6_`-lhCNr$q5Pk+e4>zUq!&%M)*nBP@xDAjUHHrVXa@LOH)-Ah5G!)S5sF$= zerN!wFIw6{=rpxyqocw@0FLv!5SWvFcT4KV*>FTmz={wiFfB8RdP_s1ACz>zW8oh!-#V z9*Dku=t*xfM;r2?_xa~nHF@tPiV37x9)y#FC*v^@v(>a<733;)$c}TrbXM?w2Yrba zpeno&xnqmB_|}%Nf(D9sH!J+@G*ubr6e z)5eyR6l1EZ!>WufnL3o*wz^gbz?}T%h=~?{iD;P)^|BU?uGr&oAOh^0(-3Nab)aYW zaF2`jiRw|eUHQw28BN7s<5syF_BZ`lE0`s1EaIQxb=A$X5d!O3%QHd%Y?O~1v~BdK zM-Uahj%Stjxz~Cl@*a&k1#@w`Ka68?T}gp>R%L%a4T96gY2p{1G^3_IL|g_<;&!XkkOZ|Qj}U&eq}@&$>VQZof|JDvixJLSM!J^tTUP-4H95}_QP%ms zR7QN#{OiGQ>mL$!^&@0zDmZ~y0P)YiZu^Zo??bQb#RC)|EUU5tb<-^lYr1G_wf8SZ z?KsR?{hIOh$9iskw0k=3UdGOC#@}!u0RChiPjKqQ7rRZl$BYU5IYb0^aKJ75yUONF z?WbNzpF5lv)?x%4o55QG+uI^J-q^s>f?bKMX|9ty_oMH$1AeZ{dxibIM&pq}L4Gab zuX1nF=5-Y#2Mbk%p8?1HKfH2?h$7blVCLBd?l)- z^!bsQM;f%Xe|-2?7SR_M;hxsGIG8d`o3W2~fmaCh-o77E4CD}7c0=NGAqFsy&NgGP zI+c3}-z{?!XF(gcB&mx)Iw7Er2kX@SdVR)?OfJC*EqU+KD0~k_!$m@PcOYPjDP6v2 z8Uad8>4)Ej$S3D&r#hXRTc#=h3ra31Pm(pHnE$@^rZ7YFXiNQhp;{9B!86P3N4n6d zd!PF6qI8Xf^Hbp(Pso&6c#Pm61UCDGLRnKzwelL*vmb~1YL=FC&?0*970D?@>!(Km z#Fw$SOV41%G9goId$rRqEm-+|&$Np^A*?}x2ofk-vhm=tyxf8}NDm`OLu4|EXlx-! zUdR3Cl$qwT8-tE1zAftm-(vsq+ZA~p8(?c6Vcgxl)w%M;!0Bi2#@ETwbd4Oiw*bIwewk>t%z#Ww<7EQ&cV;gIapaTX1zcwap4_44zd zN(gud1>~+zF}!#N6`${~n66So0;k6bkQXuTEd^hZxAv)gu*Kj80&t>-AQTM+JJ@y{ zAZJptTm;_!UTqZ2fTQRa5UB;z&$TP$1A+;XB9|cXrz!W?1xaCJcw{jeqQ|tB#=H_3qd?-s_3AUW`ek=;kk+tb--L z1%m|;=}h!E{@I8<>-j=Oe&llH7zcRn-(4T=VLZP7td96*=3!!2qO~guwa1wk9@e#K z9bI8LGHOWa76Rb*Lq>1v^~Bg9xu1Rm#H%2%acimN*GJ6Xfy0 zYo<#`4FQNHmoSApBPt(6LU@qC7(J|)jv`%>5o6HSOmIN=8Ltp54XXcFw+SD#smyt` z*+Q`QhtG)8JId)u_kKfO`(l3#`vuMLQ)ET6G=c&Nt}T~0z*XC zrr}|(>#JMi;CI=?g{vNaUcB|$cVrr+qn+LmSg3&Li6MQ;?)+Q3tcuL>qKO#DJv?o$ z^}bm0*&MOW`hNN(I>N;+hsn)J_O7A%)9=-AbL`C2Ek7!M|5vWk7e6CWWFEMe`ZT$O zvH#lRma)I|c@b)%LMGQ-n>)TCuJH>a`BByMk@1E1YjOxCsJ@^1MdiEA4wv-M!Sdh+_V@jcjIx@ql-tD^P~LoE1e|uvZ#A+4<=Sz~Kl6G9(#M+o z))0UagSwG|@&4wp0V+SOz-0Fjl(8v0e#;|+kUE?Y+hWu?b+Af*?PsW=zxnjjQpr+4 z*d*VKH(Zm_!c{VI<*WZ`QOfPIEf6pL@`(@#cv!-_qDfckw{SM#ab)J44?r3su6YiR zkLA|@v$SEN*-7Sp>|J$;iofDefh#S5WmigAGB_SuW)#Lf&fxtp3TkX*Ww-a0vG~w| zia72c=~SeRCq_A=F8Ts-RV;w)#>Gs)uy&;R@2Rd%eW<`+MBgUdAy=xI#QjMN(x6|T=oJ!)H;Ch>R@Qgg3(gG zi~Y#e_?H_y5TCNT1X=DqGXzCnIxKVem`xDJGPvSj0&| z%z;;gGoT&4ArAnu4&oE{(0f({KFN;Xo?5y?JdFf}-sLgL##RaJSS=^!NQC)l{0hx! z?-4fYa?r{UxG&z=IZkRK$$snXkxl2y%t8gcl)9KGfKv~M4|%#^tY(9suPbTQz-sP1 zL!dx4Q4TIHmmOQB)h*4Jjrk_}Nc+E1r+V4{hPIQAGe}3fcfZ9{?78R4kwnpbHJ-#g zi?};!GN!lr56du(963M+J*lbJ4^p6QJZ>Hd!17sTgW$R&zPRU5?`rH&JGYk$#h~sq zy%1}i9-HBQHV(-7Zp(&!B=Wy}69~QdbBA^9=wElWvg?-t`u*_8_1MUN$H?1_=Zfz2U%|rP%=|KzX?UEY@ZmJph{38lRH1wp zyTVC-dG_Q|EhBqv@YkcS9uIs4LPO zrcK*WwtUZPR;PS)&|r}+iB6@&5z#khUe5vUd$vTaS;4XJx0xzv`=l48@1wTy1cz6( zr*bzrbl$bOADT2SLHC{z`#?L;-FU(pU2U$-N^NU>cA1T@EZwoi9Jrq?}0fN1~R+UJJyLNq4t%4h#-V_p3DGhs^c{H%QXa|DIjH@-!-xEw`#i#w)Kd`ViHZ5D>3B9Rr~A@Pb#eT^*fwIJ1)x z*>(F~_0SAw&wH8XCsbYkQZ1<7fMJV>#QJ$*Rzc3WS)Zvr%@Goar=^AObK??4GVayY zU-^F{Q3d2LpD&01YNc=%j(CmuS_lE`e!;5lteG?t<~*3z_- z!qp6;@3z>Bsrn`BJ%=kAO`lnxsSyMgx@R;WJsG_=S3;JQj>yO4BL6wuUAd!N42@0C zB@vm+HeZ$V%6S(`cki-_%pdggSscd?BlDiPrIDyX0OTc_iDpNyg=ue&BPF08G{p6c zMiw>OUJYNpgcIx8C2G6!4u<@mV`J_;4(@h>1jm=ue3)p@bql`@laQ_1Q+{}Vw(#0= zff21BQ3dRBb_~y?JkbiEU+`0Tg|fcm{xgJV%fsp?RnEK>h~mJl+v6{9zx)eV`+ef) zhcY1zmIQoGQ?~YI_~sx3ugWJ{FYq6T#s?CUg34WjAM+&rGE?&qntfJ~Q(H)uU2IL&=jM4!oE4V#_*Miv&@0$p$n{p9c?T01-NW3j zJ#^!86!za;TZKt7b;rRV@%&MKzMtpi#QvdzwqP(}{ZXTjIVz)Gu|lUD#xw>#*ADpQ zX_$%n&UJ19@we93VNVZs5{R7sE>2u1}a5{ zcmT0!oH{nh>x8ffX!XSW|kl7CrgfatG85cAz#O5S!2 zZrOk>KX{&t61=5xoLjitFD~j4tfKgNV2u5@&+B%R0f;+8s28<|>W5ZH0`y1 zjF4NHZ>Qc(T)BcAiK%96;VWd-jU|yH_J3xIqLpD#-u6I0l!eZEd>HBL$i0Vc5k>)J zMLY=tQ<3LT5SY%U*5}g4GUl|FP<=orLo}3OMiI_SZm5e$!0OqrhxwP1ie!_x<~q*9 z!rJWZJSN%AOBArKxp59)3ZBD(2$=)YUDj5MvQN>YIvI=h+ z6L&r>{vGVF%+=>1phU05C!_&_N$l^MEBl8sY4oQK}(58g*vU+5OV!FbH zr7^;0;go_2Jg&?x`OUaJ*vY5co2y3)FR!i8c*#qC5Z~h~BKO zOGS)Gg-@@oVWP|@WvwgZ^;S>SBhm=*f=|(MT5t}TEYtWM z06U;wBfv|_v4|%c-nD|U-0-+_$enNreJ**z`d4)X-VJ+m9*McXOKv>gf9ig|oad@n z17N4vpI_H0!TIv0$5zpYi##qAqEqFG7B3+j0DJHQdgznZNUMXf637~XU`XycjZRG4 z!lC$Yj6{6Yb=Zrpf0gjwU*Fx1>?KED#B*$P@(m?2En?>7`FGanZNbvXw>@fv_ZO{b zKx-4#8qNSU{IeeFgCT$uZ56(H@tRw^=hfrj0`>0RqiSs7CwTV~k~b17SA8>8c72f< z%4jiE_X2?op#G#c)jvX8qoMp$0&n>zo|dKTdBK@c;@a5#s}HfPxyRpR!~=^KafNe& z(=sf(mF8XuwCZfaM7-)`8{+R#KIOJdcdLx^^rn%RnkbGWFJJ*V)eQQQ7`KPZC9m%F zAVdTdstEt_7XnXQ8qjitOk0vBo?gLX2tlJwSJL3hz7JgPDYkv6Wlsi19a&yf=FiKJ zfgW|qV=FdU&T~Q4@(^B52XUpNw7~8rA~+@3x5eqn#0IP^RWvhJi{T2CbMd*S*I#N& z6sO*XoUk;HJyRP2D z$G`#T=9KYMjb+#dc^?6~ZxkP*im z`ud0qR)zZPzWFyxP49IB@s}d)t*ceTh#ntRW6@R_ zY%uq-k4EP+xc%bpv-hpR&9j-b`uu&=w>NI%tV&~NWafmNbZ^+00W5lfg+F%`fC=u& zk2$NHKs>*f2yTXRt(PkYurN`zc!DbYwt9HC)@TH|O54?P7}4?v+Ehi~$w(^-wXT^{ z7pukkLzx*AAdtWgS*(!epId~$V*#_@3LTiGiNEvRlNk5m*@PhMfVzp(we~B-lIwKOAA~8QwOv4AB*@VT zJas2&Izt)SBm^>ELxMuDZ7Q>|0Vd30UP+MpQV>po7t>A*dm*s=$gAAyXgJ-w{h+)1 zg9`%ExJvq~+HYWu10C=02xA+$vRjbLU%(z27|GVOFPJB^w@+XjPbo%eij)%TeQEG+ z47fo1YJfw2Sl2$aSaV@mA5L6@aa+ z40*tPuGcUUoL#*mBNBj1dTR|%C`=LDi+DsaR1wR!b}hIQ6j1PU zQi}~?eqVeYcgE}8(z^zq^Jt!7c`zF*pGog0TRXn;@z({Spz__W&2 zR`ThL{Cwywb1-^wcEpFWBiicMMaVP$GnEef8h^LCkHp3cf^VL2`-CQ2c`J29hz(1X zP^|s7m>_w(S;Z5l(zyStxoMjT3b-vur^dPhvJikLbT$*7jUJ=Y@|iC|IeX_jB2h{~ zXDsUH_?0`PZDBJB+6mvsGv0s~2!Ls7CNIwpn$&0X&kcgZO0h(>>>b~HCByaQ5E|KM zPzM(t3z>PnR|MNm9^oM=)y%7CQy!SzwV=H$X%l(XR7ydKTdxT(3!&T(RB*?x`Fq_t z8l(^H-}j{NAuwJU7AAezo6J;n=f8=e&_)8zVmvN*y1_Za479~kbpK~ugW2TKc z?7@k?zDTi|^ktKZb^LjQv*=f?JC=z?k_DT7BKg!vAStadrGHik>%xIN%oMi0=Om$P zAO^GQ(lJnwk!!Ye_Yt(2+caDW0NiAsv^S7;2#j4Bx;i^fqQ%(eWX80z@m|8cnj~Y^ zq5lh)_$VS!pNf~O{M~XknM;c~U#LwqH#g_vYtJjA!W+uR*)dykeG|A^JM8lo6-KU~ z+p1r;jn%7{0@qnwByd6?pmMYQ90JTyKjMM%1cxNd5Agbw|KSbPOk#eQrrG+G{h>Q| ztYWwwrq3Pg-=W@)0p8LAO0<4EM=8#9{;4Pm0N~C;;6&gbjn$+Ma=ND=kld?`IB8p| zs+p?5M>kSXp49JRE^vJT@5he0S~n40rbXh{>mNEmV2c;@73s{{9Ut;y0U*R$5_`_u z2VWu8RU7b1bmiI2T2W4+B&XOsr}W{k_*(VPwW3@e%xCGzhavDZ-oz#le<5bE*%R&6 zQ>$|$da#zFE2|W32$4O*`ut!4)0plN&#jOTO*pG#7$>MYFDu^8nl9FAbxoAXoY4Pl zy-|CB`PIwq#?)$FeEPAtW{pzDc`1&b?1B@FJ<)*jX#+PnWL{fxp>Pa@A^>^(wv9Na zZPI7XZryZkbGxQ_GeSB+bGdc$Ah}#q@f;mc7q>0pf24S@`0i+!)^yFC40?KpH%M4U zI-i-oM;!mh{OdXocGjtx?}dw625|3}I8Y5ED0=BAlD zum_c(b%@vAyU75YmKq{Bl^5tL_P%5l3h(7l}p! z8F3L_=MNe=;PvngO~26DatGJ$b$lq5 z1BH2{MlD!;H~;TBOw>mR1|C}%F&DnGW=T6Ubzy^5?l{~H%>%K!t2iT@4!1lHHM)8Y zJXx!g-V&`{!)L$~1sK&!=LS7KQ_!qa-eRtE4Z@)9aiCYdIC-aRAq~U_-M_rhW7Iit z{JtPs5+*~_agvK%U13{fA=_3=pFhwP7WqOj$#f~*K3GF_{p2KmnhnR(== zmqb4*qfh|oc3O=(z+11@r<>D|{FF`#kbnOzXWMI#kG!^ueqRY&{hVRiBhI(5o!R*I z=PZT1ec&<{a14g?*0!I~!jvdL<~V|sa~l%^zWryKmxkVX={8qCkcU&0(jMSG(8D79 ze*I~Jg3x0{55mPwCqo&-%^gG`X7d8=7;IVV05)VmxM54ov65rKkoaS4(Gh51R+0mJF8pd154@XaA@S0IuZB7kRQ z&8>?0`2Dqm>&KGc^sWPAh*{Dl?N@LK*aY7rKQ~?bimnH1J`GiNg2!<`dTPiRsU&Q6 z_OVB-81A?2W85`7wSPh2*lQq{tv9J_s&MeM_A_H-0Kl@afaM!T`m@l5N9K)Z7RQGC z{#CDJGT|Bx-%Wj(ClAO$;I3CIEu28emFi#<;(pZ@+iZG30ovXRD>_|0X+ANz&RIbR zjs%d)n9h0)4<5_1ILp~ky97LH6LU@`?O92THb@xKxm42+kL|*k&4e4#hK&D{%W%kH z(9P%z$F9N}%>A1=0M=)QN&8ALp?1!ZL2=6@66uhfl0y~-ExJzSeEastL z;>Y=CE6+1pV$`<{ir~dBrxR@qnXt(6PcPOf)9^?$f7(uQulep4XcJApEZ_q=Z!JG# zfjR?s!ey%YEC^s_RziBxJW&|Fk|X=^W&4e6M!F9LF2RAICYrbcqt2dy)ZnXcPz@nX zDkenEz^ra!t4tBlwviS0yc*%V^Ai_viYGJMJDKBpa2lYBu*9De<%8xxfgcfMtl$N) zyEiVGOtRp0dFsY$MLthtg7$-mtOx@Eay3*DGnx@elaGJcnDJx4cMdqR`J9aOe5Gnp zHMC4wrKQ|b=c)oj|2hH<*y_4{Kn5=#RDbl={>*w7YwuihjzI&OSRPLFW$;(*cvz2E zwTPxmQ}Q4df#3K)=6G2xyZGyIP1(2370E)t$d~~Do`2OTk$}&=b2vjLBIuxpZN-I= z$g}fbz_>zcn%*T+X!ML=*?A?$n2F)R#mDJy@)&lr;<98sy`{q!Qxz?K^&Z)*)Bix5 z6pK=|f6`0LD#c%nwua_gs*8`RH*hgeDxsM%aLZg-x}F$yKm7v$lu&9hQov~;!80K~ z{v!mya0wGnE_588H{>|f{(EDJz=T_hvZS^1lS+0j8ntKsmcuLiZ~R!PDI$R@aUB#m zVS|1nN%8~+k3VkFqDTX1J+F@{?e?P0ONI64ztYB+Ly|eA#QnElsEH5KRY$dx{qA?n%>-W4b zy8P}dp}NP|g}y?<&FEMws6!{Tn!Xk7DRT=?Xs&Ab1Q-l&AHl)lTrvgv?YPEvkfA-w zK|MP5vP+~OtKB<-16&t>AG_L&#Bc@VDogn%CGX+u`~oi<8Y}BY;ze8^n=kXm!M#L1 zwtI?&n9HyLVi6Q8FRc3d0}P0k9+}e|60mKn>F_^_w*Ms7G!Mw5<{Iu*6V5P#=1ja!7t1AQi{crvrM@2TKvf30-TNP&@tvGdD_V;#F2W^}TDT9H z8USUQ?F)M4lH`OKoW8Ll?yrVKEdzTcgdp_F3F(Q2g#HALGkr8{O>U)J+B zJY=)=Z4bPsE=#LMAaH}8{3UB}y0;!)oM_aX3i&JElIiVeL^zLB@Mnvr2LZT6(3R+< zk(;<)Pd`MrRI+)V{7;kurYbQhMzf0`fu{>8eX584-)PiPGC@pmahux=H_bw8^u2N6 z-q~s{u1HHjEeA!7u{xK&(u<@hpAe`kbte?+iKhn@*NI{q7__&>0oR$_bk;T~`V)yd zzhCj8671f%n+Gj#TKpUg!XGkCGKmmo=Pn@Y`9}i?`WWDDnd!mtR9^H!r%^tfgD)sj z_Ji;mMhPABr3U5086wCTh>QosAFu@x0V1VUK#9fL9u`qa^WkDkx9rnyM_lf`Xp(p$ zAawbq9?h}55Xw859DC;#Z+5p0_kgJ(k=8W_8yM)Kh9vzdvnh~yL#Ks2ztQ^d4mS^V z_7}IOyH1TaX@mD^z@wL))rHxGe+zn{lGB?O_+nrNIavHL&lld_N%=Hq__&ITG=Eop z^t)mHUWEW)itWhl$!JEEdS0}F2moIr>O&?iO+slu6bz^Ld1k+K5A)_>Yl}5v!fc8h z*I(`*vNg>Q#wD4>3VN%t#2?9pC7i&90wG5N&Zr1+pH~<~r+P}`*gI+Z^rfT>q_IH? z$EsWV{Sw~BC0q-#Jd^Z>yC)2hwJ<@+m03WUXNf!qnvt)m2_)e0D;tBvR?~Z)WaYYe zdRQ|M?;%R$1gk4|X55rz+MZ(c6k$P)n)41+TnfYFDGXw|?6rJj*xE6|_T1PlvlP&= zc9(W!F!kEXx96HhEw>=#vpK^~2Ldez^C$S;Ndr&`Z{cq@IfWB5Ee}0B6RdWq# ztU}o}28sv)>VmH(X`GqI;lg+LI48s^PV309JjG` zZ|lA4MEOr=^lUh`h`m(P1Ay7!nMXFTsuV7Q3RtfS-bVS8gYy0X_lEq+t89*E;b@@m z+k2EW3jM3dzi@HyJHlTS)6NQA?H2OQ+@zTDJrnJzTE?DLlVpo^YKOTw?m0#1>)Cli z;m_ZO{i%#CYW=`r z#omkc=NtOgo1C0ZWWiq&O0PToW=wJk3RN0P5oE1`hJW<=5?0@Rtns0Zg@n zwI*!7>ml;TeE>pb{`e372BJPVrimUS^ttTnxS(T*?|Rd~j{z(%4n8ieVA_&J?c!Go z>22-|)cJcv;Vr4in8vYkI*_=(taSJAXEB<|9LKx*KWx2qT-L$2E;^JTEdtUYDc#*A zT_TNw(v5WUij=fSgQU{k9fE*#gLHRybH4ocK4;&1?)^{v@bb>gTC--&tmk=_>x(76 z!0qaP{Mp46IhQ(X0E>%wJV_^#wJ^AEg1<1D^bmQjD>K)<&-bvm3$6J}oU@D{M`{;z zEA(1{?uI4Sqi*QH{P1)TTK=V%E}qn$!0T)ASEJa$rAkz4^H!VWMDiA{jgz0pWdQKg|AWVgAL!n1pw_HL^?)6%Kmw92$V2#S&K%k>hXc zo7f_r;#us?3REzcHNKTIlQCC$3R9wu7HE@8R6++)mmg|Bze#)^ih;*)Ma#hg_Z@!F zE@)~=*t$YDmBY7_3c#?&^-}&AP2s#NGt6wJJ(x=_PxOIDv@iUdTkPwoRGwVfg~9)x zpNnuj^Lx?-0q&M4qD*7p55(4@X)}dJBjwj{@0KBrX&y}_%VeG5!B;t;Te1p z$DZs9Ss`zs>5lWeSkvH^pPTmDqi+&-Qhz{1NIln0Gh8O?#A=0Ze(!D>1q~(9>|AE6 zq;%s|Cc1ypbZa4i6Lye()?u4o@haC-swOi6q2MR_NOb4vXdJf_2Pn0mg!V$~z&}N& z-W2|czC)!s7gk^xY+e%BjcWO&H2CQvq6aeU=#P>brdP!=aj42f*foP6Ja8dk69J3T zom(yz4c|O^V_*0eZMe6$1t5H<_Ab{)y!tJ?SX`lxp9Jc0duE{;#0?LbP>}ZrW?8NM zUtX+W=sla{(iVWBuZn+c2nJ!_8dX?iUv$0+e0{t99S$Z;19%b%K7MdH%K1xb zi0eqRagnk&l6b#;!U#8!2;+X5Na2XHu9skMQJ#z-83#EK4*6>oZm!CArYLE}z3Uff zaZTq^D2wKfA$rd+kX2AbX>zl^USo+bmL}B6R1)rGwNv#!hjeBbW6wE2tK;k%6wp+T z*y1@rIx^2^dg7K3I+Sqv46h4VL^Fg1JAaz3z8(BIOFU~HFt3j)T;(1-o}NMcVH(p} zV!BQ5$8>`f6BRF$`X_1VNJ$qa9gU*PJ!<-$?n~C`^&(Q2Vk&N`FQEbsuwrjk0kOz0 zWm{F{iBMHb@pE1;BG9#NPlC%+d#gF*;QmwjCo8a^$q$jreJeKUq~EjhvQ^<69=6&| zVfyCkht5lYO~W+sg`LGPw=LGejc9)U&iY^qK?Z0;4@m&A=!7`e73@WL5 zn+7fN-P@%n1pvmwH*Y@N9`RH=$vw?0vy@grUip77ceV67W&8{^nr2tC@`LsXm2GXM z`5mW8rU2~f~C(Bfi^lT0YsuEjqBy{9Aolm$vznis1 z@x%wEMZz}_9c>(jfk@4~6U6J7k_hoa^oJt5dr|`Twvce&`YUViN7#R@CK^UzU8vVM zD*kxXH2abUxYv0mL2hr{7YJaHPH>nZzlSlt2e1rJ zNOx{qTzQEnoJEI)?LI4FbHKTR?z%XpGJ~j7iGHIPo`;T;=f@_gvS`A-Up-thq|UZz zSJ~S+R(KuZWPGy=WwdpDuBlNLV@#!JYXutUlu5`fJMMxyjuIBpFE*L4uh*Hs4aT^4 zHDcplzy1nk{>=7-i)6sCV<3bOh^>q$8K&=v5g$e7jp0^kXv+CxjM)$_hd<>Lb_gf0=#r^~lboS}4VAUccJ`JScc7lJ;fH?;npQw&;tYd;UX(=fXM z8Es2@Qnz}dq2sv!==eGh?H3=lYKrgcG>*buuA+=lVtdS5-x%Qt+-xzHMY${lZq{c8 zFv&DMg?A`spIN9EY~X_Qa7Tm(bZ{6Z;tElm5?UZ9_-(W~MGE?oiz3RH4Luf9%60oI zizto$6=WmotU3hMz8ZT$Z6}XX>|x2D%4pmY&c$r8x3oo=rea==Pvh0|FTNrNe?b;JV%hLORwJgS&~~6w{01BV@X#ALK%0$M z{Wjd!$8H*E=N;bGoIAQE@)KqDu60=ahvMo>ALGM6Xx))dwh7lmDP!ivOz_!Rz|@lv zeS}&n6Bot9AGDtV*|s+|#^l3mnf=^%?c`eUKp%@`^Cx<6QQWeH71}#DJSL5*EbPU2 zc%UrBvHBh=OdI~QZA2MHOt~c;gP#ZOVdx||j zIV_Uv;9?PK9aV%eWklm0Vo%RR;5FpS>ivV@`+CRB%Dw^FxLyLWTq*V&!tUB{oNH#T z?NYU!nP}6MUJt2N&D|MQC5S-iU?$F+a#@yV4TwcSP$Yzkr*r88yD$@%swAtKz=>mx zIx9k-2M=Z*Q$3T{B5l8zs!fsV^p7__P?0gD=cQL=kax(O$5DRdE5qFHaLl9d7F`59m3(eP;=7!+R14UN z(qU+zktJwqLPL;)zR8EGTDA$@jHCTs3Gc-z%JNWCKe3qPlJLl3njTh0x6J!##quNu z(chD8g*$T_q6<&JZTxnD6W1Jv_#7hugoSipm)Qej^NF#7JrqWQ;;%4Oo`3`zpm`&E zk=gXX89q+36jlstm>!Lv$uKe;cZJh8`zDEoXfYM9eFx?3;%z9zU1%)dM%7KtI=38D zw5`Oj1B4hN?}A0#+(Ng=o_`q+b+xt@(&8ab5P-?)^aKc8Z&M>S1Sv)|qGF+8ih;F~ zH%23y->O}|VA2XFZR9A%_s#J)2jJqLu*(Z+=4~Q>M>KiU(Nr6>R{2G8r^CqHGG!g| zxc8MS+NWRb8Q04Zz~Og5k$lo(;JpzUHNEHeA43Y(pV(SVyrQ>d5IbE-8P!Srh8B6S z!ZAC)zI?NnLeB}eDEf7dDVNJH;_xV^Z!^~}RYxjxG@+JW1sU*^nC@oMPtz_K93^+Y zJ2)q5J!9*cm_&bRZnVE~(vE{ex;u#}MR4#zh2Li0PiM$MLD3f;0_{z=U<28nM#SVg zmZZAdzC{m@n4x;b<82ev`e`eJ2hxaNL*!F(?R@N-udMmfx63|P7z9JG|GxA@c?G1j zGH=V88r1X*j+3kDEyRbi*0>8l+~dDlRJJKaJe##&EQszWp-B63s~0jHDHG4BYV!u^ zh%`dxe0_Z1Hp( zCg()j?dj_dmTmgEbOv!U@GLEwiKHUI?Yf7nv)OG^@i%7|W;jlihltA$j#DDhP5G66 z6iM$IusWdzt)W;VBNK!W!gIcs9AF3A{5_uX;>G2{tt&;B^m8nVK-%BNp6Y#DkUP*5 zu7CWC)Q9mo)(p=2j?l`dClP$s&pCf|Jy-*ZrsDH0AeP`<=B|qtwVOsIXjfuU@0#RaKCx()B`>QM?V1t)@a=}IS4?b@){a+FQhU&YSSpc^F~tepG2Re3ihwC@OiA9g?TCC~zOhaR9DWc8+VZrVD15DM1_5rtSIykVB(o)B7c8ZSxXsWrMfYpAl z@WMG-k;6>!H{p>wtE;xJ*bP(-e1bX|Br!JGi^PdSX&fyCW50?R#eh?0Mx}$_!y}e` zpMc@Eyftn$t1d@nJAlz7CrRw=CtOsafx~D}u8e1#6{l_JRFL2O4r8GH;_~6@TQBK- z3om}}JMC7S%Gxfr=xsLj-$(x-Z4|F@ ze;7~X*{E>9WgZaolH3jjz-uMK;n^`~{EtL*RbmC~mxd?_dF;*I`cqLQ=(Z0%rTu6v3^#&SWQ*fv9;X32_WywkLW zD-|86P8g$EORFbyW1iQV)aj{c1K2Vj(vztHTx1g^C4ZhQTECQXsB8cahubS_F)wDS zSgU1akxb<|`ls|S<&xPMA9MnWQ&NSh8&qfDUS^Jv+A?1JOrZKA>^e>N0O7AmxWw3( zPAEfW%}ooknH{wP$VDR^nS3ptvO5TAO0k!A?`DK`^8SJg58339`5F5MDBsalS0KMgjc0g|0t|_3 zLdXXP^=(Z<08ps%`g))uN1>mMmA32w2!hAf%|B`QcYU@**IKqJybk2*kSoPiF8Ae_oH8PKPuV4X`PI+4CtMrw)q+*&mAMm}dgi z#s>4}gGvF69Wf+0CkngqozR^=qM8qR8@4Y572^XW;FqtrFsGC%IW62WG>iV${R;cu z_zn_5gMStC?YJE7AN$j(brQjA80XBV3U{teS{_(jxWrwPg*gXuO+DkBYKYgc4`mcG zb0h+ot0(xIEoJ}q?geO#Lu^&e&Les?`h>hj(c$v3{Y zLm9S0u>iaAX`G0g07zdhYl14+KiY#Pw4Q?_ziqc zFX_%I08EKQSn1RYfZ6Isq-x>RA9a0wG0+9^>A3P=l1{c^1pENOVRycAneZAiO{C{b zzL_Qf@d-Z^7a6LY#|PoSJGIGR=F_VE2LlAKeyj{&hH0;E5PBM=KSfV2)d5g}*qZl~#|!kbfTO12MCY{2c^83dtahOP+eA zcg!CNKR55zpGfte-W;0785j$2)MZ{b({IP1o6`aNs*gP`!ex5B-xL_uTdh5A`#x*H z+j|a0nqIh@SN?9v9&K$l(@-!k{YyYILrN^4!OGAoMt$>2z>5H=KDCTKf-fPPNrTF- zKepyq>k#9fdCr>aO0V>Mww&-_=YDc$)v>}(gCyhInZpAEkUXv{rbe0TO*lF^n{9l9b^4VS`f|`7 zlwcd>%xgP)0_Ub0wQGAkxa2wTx=*@m8?N?`{Le4uI?d&5Xk3R=?g!l`sc**jWFEZ8 z@P9n?cCCGQGe6HmUJ=T2a@(9d{b1v+dv5b_>?#q#H1KHdK_lorGE8x6#Ztfksr!iR zSH^UtPE#Ct^?>%>miwTV+!|EAuo3i5NPA$OJEMp7 z1uu%SN}B&sdOkgCo0uk_HFxyWV$k2aor(9lO?;~yixGS75ncz69!rLsQluoQ#eX~u z#7K(I8NlMr6o5^8egI&D5v2elz23H@|xW$+_)W@jE)cV)Vua6z;r&Z?7RbBc}Cynb1w6 z%^S9!e>uiG`)3|G#>JNDZwLtqiFJb%i^u~(amK8-G@J+y2remv>ds#UM>0-2-S4H| zHb5*(#}n8f1A?e%9g>*ODA+@WgY8Wjv|r?;NI00je?rJ< zUI=Ml;%HQ9F}%-FUdVq@J%fk94GdWkRU`oUfCQSQf+MtR zzWWBRX-Lh6x)^e(xjxSbL)a`-bLAAEl_M znE)SdrPE$W4d!$LrNdx6BA)L0;rBkn_vL){TZe5cAoi;rh`p=+HCFfm6wiM<%>b?A zTF!W2%7%tuQSsAPUKXc?FUKaMX0MsFz@ku+a-KpKI}r1o+m!+`O6oUAV6oiTe{wN` ze8ywWrb_Tgk)7EERVsk+;dRy+rEx4K9B>}r&u~fD-o7yhhP6u2VxOzIHlcAIpG>-~ zWH{wlADf&@hDJjYMT)}$e=K4#p}XsYcg1%&kWwgd77JRv^TrTT3@U{89>#5F%t9>c z)Y;xzU9xh86bO|#wQ@StXYY};f_#%RXh)Hj7el3ckGJZ?v9$+cK8>BGyg>&co z>I!ihV3CU>hvu^oHvOQu%Qmsu22VLMH3rGUB=fx<985ujP*iSZ?d#dO+33L#!I@@= zXnNlIgBHWD*O==*Kg^r{Hjf;@gUO#&dGJ6`ZUs5weCn;Y>02vkKV+Wwb#P_eA2?$H zLxJ*zCQ)ENH+?fK&1jMDyvztx|3}n$M2#c&!GKISf$QjVtqb%~N@3B8-)ED9%8ba4 zgIQ&!QR6ocmW0ucO9=$h%Ky(~|LY%6b#t=3VKU2?|L&oL z2;qOm`kxPDe%C2>D=KuOa+s-WNj1|V{J-?GF{5=6`o|m4<;WwvSS^;A;i7y}bI!;| zg)Y)~S;s~N-6MDt?~mg~uXX?4^IO}|d2UUn{*`*?==C3Q=zV$en#3I^K9|9u)N$os zc2R+8)rNyPB*=QK^%Y_5k{d4V1fh zwks!0WioIm!npsTyTNpFCVZt}wgyqmb~)sJhiW|_=?j8T5OS2udG_eF{9hjfvc?yl z7O5iNze-o=Jg$qVENz?9+C~a$>d(~$2Tr>z)=|MAS4}~U<`!|HRH{>h->Vh;muv}V z4LX^TaR1)1&iIwkBZ+mm#U{;P^rtQTXrTwKX)i1>BVfvlU}WHZuoa$sM=!M}GS++Q z*@Itv=BXm;QPyVrtikk* zHF}p+$Su~sC3ZR8{aR6+DF4CWadKQ$pLFAIQ=Tt>kGX9i8zZz6x)!TG*V%h}b^pY| zEpW&ekUZC~P_UI@}-Cglv`QmfrPJi7ieKRyT7oajd*0lB|vEm*=l*IE53 zYvPR+bjNbX-XoRwWn4nin`t>x_iVeA>i9Yd&4R@D62(ki_^;6u>_@}9!u}19**Siho2nFS_z9penxl){Md!qGU z1Nc}!oPAT`lRU7CH1q%)P&-z!j~sN+9XKAD=f%IuTD^(%9_BPVvd-{L#c_ua=Dlsa zgN^@?oU(Jz^{HP#8iI6nJ&rxbb{g&O1BP0cy3>Rse>lCy-{Bm=|DFH5 zw|5i6iwNW)e~lUJaNtSUesIj?{h$*9tw9rAKMJXxyDTxO$Y&}#`YSq;u^&9#W`8VN ztfJc$e%^Ck-CG%)cIXJb+f2)rx{ug$a6;z0Jg?$CKw#j!zlQ(I_(UwQ3r56!(yPAf z_^o(>{oRVjDpw1n;bQdudbh|Dagcxa81m>q=Oc6j=Xfb0gYpYQ&l{07QaB(2`8GaV zSptUl*#kduieAr~?w&CDSRY)Vec(DrIVSS?B{U>6Xh^)=W*U~BgB(Gu(bpBLH-lJN zD#?H7Q0^*Xy3^R_qMA(kFYjyY;v{iw+B)J8C`_fpiB5Jo-`sUJkoM>Ccoq=-al~(^ zo*Wq%Vo6;p*pCj*Q8;I@wp++)q=E3(to@@nv~lGbMfVRuJFSnaf(n8o4@8!4AE;>_ zV!qU$WUm)COpBaNEIad^($HKc((Nwp>z+rUu1-ypK1T?;l|Zq|WwZ zeT6JW%WCt}Rgryqhq8#Y_5uw?!_U2Dt3l;HU^ICR8EE>y4dnE9KH$+n7m%p!?k{)U z-yLsw6vuP=zoTcSTcWqtacKr>UK4;tN=To0i|Y7c@XfIbf3Dys%j#h9GyFZT?6EYe z1>dv?pAjaJ4X0~<`PImTVsok0yTOZpfsH;rD}o@(KGkk3FKh8@7uk!g@DqcluXkpP zEV%{~cRfy{T>@SI+c0|N7atxCqXY-=TQBtmv!;_edY6? zGh|w(h=Vu5l|xd-27$&>^x`*Kc%^6qM8LF|IuUdaa80`}_Y~OmqR5pvkneS)8ul>C z;Q#TgetpO*>(;A}Xk^RHI<{*e_Gnaksp2Ahj@s(2@#EjUqy4)${W{0IA-YbZJB;wU zhfQfEQn%UR3#$=PXT@CO?|K!%WtUIF=xkZraaJ&0Po}5ks`>NEmGfHW%4Sm2!!z&o zyy54XnQC|Qufif@b1on3>H^%L~2btY&$+o%O4! zEAek{o6^jiiiT1KP|~yPsxK5NCy%KxksS-Z$Q(f5`e|mW1_7ioOb)&Xa5TC9a%rvn zyd9EvgwFjD;kQsjrg!3*j&8-F*O@BX^>5YPq%Dc&E5U8$+8 z4ARyxlo*dYxt+#ajs?oLsIok zUsFo~oN6mqm>K%}Sm!jCw?oqT|5DQF_(i|y=LslOD#sRG;3hp^4ICaG-D{Ez>}_*V z$~C9yniKMEtfbed6{rm_lghC-t}L`C_N3<9bPkvuHEwk!HFbnI0X<<2IA&jM%JDx` zh@tuGzX*p*8H)EtVnEF^r`N8eecq?@xqh`uJ5w~lh)K1ct}>yDY!rEl_;*BgWY&A> zst}*sSYrixh!#i0aj66hF_NTHHBBJR^TjnK{=kKE;Mx{f_GB>9`n7nX%1tYX!%66B2kGxS+^IpTk0u)-_%D7RqsV$^u_?T5FX+C75?q=93g+_W`#NZ{h$8gQO*6e_1WoYCSz?L} z7!s?<0Vr(i?RcLbZ4zZLuV*|hyWrm*(!iDYO5pYBd)|sS&l8jb(8`hK*8X%n?k1s< zav>B01wo1W^l7~5l3Nwc0#{iB*>jm8dsV`KlX5hu#W3Y>cI%4q_#cYzJGEzhPP?YO2-u#Rsh@(=Xx} zb!YwIeM0r`)P^Y4w^GNJU%&yD?=!jvf8C#3e`!OqDO`izVqL6LjY_T zl%zF@3g{vq&0}pthj?+0Rfn|SJN3xC?v}SOQZ1@(?EiyFgZLxqN9UX;Jbh{3WJEopJyR+e+F- zU)3L>mBWy>FMCy$RF!DubBDO3^?cF%kGoH$@{;OC4;a=ArO@#vMnG@TrRed{wwj?J z>Pg>}4Ag{#N9x9+y4Es&mKAR95)iU5u7!)&RK@<&{{vmBEoSkiD4{x~YTZ2-fHl{a zh*c)UqsF0Hz4zVKRv^4{c^|rf04|vZD(H&^3QKD!iiW=BNC#CG?FuIG{e6d= zi{=wVl+yU&40BHWpYosSK+n4?(JvMRgM5w4hlbwFdnkK;mKViaP0tCQVhR5z(EMkr zM!>LSDCHHelMGZl)DG;$1TZ`7t2&D-<4P)MvUR13^w~nV+;Pu;2vbR#n5Y;raIf}Q z7emk_edV1^W&jk6MKJ(O>LsHt4mR_Av)Txyif>F!f_gn&^(8kD(_{D|`p`q$dRtnr zdN~`l3w!V`{<^l?xcnJHSKsFt@K#a`&cRJpeIQhx;owok5mS{#;~em0LZyx(LTeWo%*!^eF^Xx!Uxk@<)GAM^-(~U5@qXwl0$Gy62x$JK#bsN2n;!C5ijkH3keFvJrR0``PK!^yUVH!-XI>2ILw zg)^R^-YIv1!{PnNV4?M{yr^QQ;KsCSeaNF?w4#7vt(QlGzIr}Sb=NvW^w!}-!iMwP zxeImS7WK7LUOlM$z~a)MdOsXh(R=yIUl#M$uWWP2u@Ha=ybv`2IOBWVlWQ&n$#Ip} z)vh73#sUOc3H>Sn zrs0^&(*@~>b#07@)GF@uViqNL7kF+G*9U7(ol?EK-K%g#F)t_jY zP!&-f|3mfPqr=B=k%;-0#OLT4X!V$gkqSG_II2Sc*k@cdI9>n#Q5#DGeRY0yI9SCd zZ0UGukH>8KNOV{`v0sB?bdqs=k5M3h|0WTLIo8|VePQ-_3Jy_1@N8&D>zn<$zb`Y( z_eUV!*#JX9C!Q@optM=UA8W8!z+Fs9exWdLK^Nhmm-?pC3TM_NTND{=mUYOz$fn2+ zapHLGjFC}>p%V!`dNd&RI7RX={T`5q-e+td7u@T=7d&d~GB)RNy*c54H=BKBH549O zOGzknt7DH>O8lE!JM?0dijx$e;!%=U%q2VhSaTWo20^tnIbP;fv8!&^XWq%2P0VRF ztBNa#Y2SdVDq|3uH!8;++_`Vb=KAYnG~KvJ$y+$sb989IYg%LS!}rSSP>rXZ<4{93Uty_h5ei?c~Mu;h6Y$)6DoCf0EoNqkVlj#xd- zmJ#{pNN(sC+UDM>-zzPW!vmC|ZrmgCr{Vb@!iCj*^hfiCXIWvq2!R~FyOQx|F9jJ4 zI_j6s&14#<&%e}F3=n3;h82qD^*7CtJ&pElLs0p}UQt)M-6I5KI$@X6NlI-++|;_Wjel*G48hFYG#)-?4kV>yO;Q9EoBoEF>y&J2U@*0?a&jLbj|DY8uN^fdfQ_>=$x? z;A#H6Hg2rYZ&cdK=?~0ady?nZsxKav5iO6}04&5;tu)hn9Rd3F>!;VYiH%gWu#%at ziAa2DfrF5-XaE>nrCu%Hoks$j{I*f2#Fi^qoJzTI4mNw7`r11;71PY@zslt|Wr!Fn z>QtNfAu+<;z2JV#w=flETGZJk<1QLlEWt@HcW_6ZcW~c|`Jy zRsR>aLZI|@-}G1mGJ_jaBzhk%`9qzZCtW0PYxz#Gk&pC8euUPht1b#=)D*k|pC zxixP{gF#2|mjQ171U3a`LBx7h)!?I51}$qkVtN=d$SokNpt>|n$?>B;PQt2uT3=vc zu%=X|l1W$^3f7R=%lw7G6M%mI%{`ASgMZ(eug?=o3AVjF^y2M^1<;`$Hgy45 zFQzK~wCw$0f?s@)cRqXt(Ym%0L{NZi2|S5<0jI5oQ%_)&J3&XN0G~N-o0ce7vikr9 z5cpncnz6vugq(KQ$_X7W4F^8+=Mk@?a)z{(%@J+3UA+nsA$vX;yqkwgu`zjU()Jck zKjg!};qI@+xm6}X9S%v6{^(s=_(mn*IwuM_xihrU#T zrBPnI(8<`L1t+3ueLh0T>S!A>{bR`M>n~QCV#lHGXAWE~2N_7nQT=Cwv=~!o)%?tM zzW5Go#4_>B6Hel2a(<_rSS$k1I(g{uxgNTKzGDwNhsysBw ztMZBmh{+h{e7v)8Z*-2)>b0^;Tl%fLKt68!jXqXgLUcqsqaQDyZDwHviJVYrpAD2& zP?3qgvN6!Btx;vs-N9A5)0nJz6Qq8c%uEIcHoYI5A+R(aJ5|WRq`^~vqve6XzQosf zkj}XH8XWk~TqF98DymOx4py;Yi!buOu$R^=`geK318f5%zGr27--h=--ddc8efsKb zM?Kc*D(W`dhY`UIn*PMi-Jk=vZe-lk8$QmuOC&R@X$u%{b^j$sbwEMJ|WT`P}MA&KS!y~ zkmK+3vrHnn*KWWjk^VQJ*AEJ7h>p;vWz5^NLc72Zk?!rYh>Ip~yU$`KgJ@jd4*`(y zMdVwV&Wx4F7Mw!5wjUUOg7BfL;*r%Uq_^>O@hDiHc|>t%duRSH1z1}6iuu;u74sR{ z$ul74hL`S#PcdRyllbNyfrz}#H!TM)a^I_Q5sf^gLorbHZTv?>xHEIKYZELXsPmV4 zay5IK&iU`08zTny3bZM@mrU*fH}jAQ^{7XGy0HSWjBJVTi$XPKP4y3Y#np$-&*%RC zrncf?E_J#O31b<^q{LbLm;D%YQBx>O@}ZOgLNcXa+(9L!kfdBaH>~0k>eb&E%!0&5 zsI(e@0;}|vH|{(3?&HL|yMHuRogMAWXFP*#mbf9mhZFOa)H!Q zHC4H7y`>m6+(^7GAP>=)CP?4KoRu_UCaN~PC3J_*EJzIYu!1+jW_;H!t3s&kt$53E25l~leW1Oi8_}h(!ZWWAHQ>2a_-*FYhl$T%(Hs0aGAr&ev~|JGiW;9-Vd<=7RqZC5O0=O(vceAx6Yku-p&XQ-f*yb zE-wKAk$tKB{;IF|Dru8m`4XGCnM2ql#*-1ZPDJa}CmHth9)7eF*D?ZcYIXZA3{SfbOlpg@PI!uH+J<&0dAQQ3 z96+6&R`Ui%aX3Ag1d&DuEq2h`X=<89Gv@O8qH-PsWT(T6B>p`6rKyU>!CJFC zj}~H9lnzAyH5^ZW-H&g^BHoL*aN)S~)XEdt`74g?I=bJ(O3CGB;Yx0cup3lPZ**M zxG;DM!Yl|THqB<{Sos?Yu{-Cp60uLa;BSRdhk$Y%Q zhU1r{9}^dvc#IFk&;(e;|B3kF(FVsDRz8mR+3KKqO?ONW{bMEo36Q~`Kp;3&fgabW z(etW+(g4cgqzG-Zg}IOXfQ>Zj{5c#z!svV^&M*29;@d$5aWat~0aodZAS(HD{|>Sp zQtQf-=&^PcB;e0#LaOJGd`7_OX4rsKy`j?MDoU+d^WHSVPq04V2=CDu(v@3leoIWX zR!<06Qcc@pKslv6iuH)dK#LLy{}D7^)dR}uG$$9Dyu&XiHl)1z4t}?Ud-#cO_-Rh5 z!tvk%GtRuT08kxKtNv05?M;7X+^=yW{dM>C_`Pu8NFD%Rdp}s_XX~pjgF1d>7QAp& z&i-Z>iF>bG5TW157*ao_THjwxp|{ z3Q<~Br5NXBUg+W%AEqFp@glpw{tWSGuVNO?XW1%{`W<$UIB$`k=*lo{As0lX)#Q9jh6a2td=b)<(IRjW@dL6eT|bLw&s$ z{OzLX*P!g`H`CC%M4hM^ufL0zIH@Fw2p)UppXSwS3E$+Eekfh?&7-r|xOc;oo{ach z@zRSZ30jA|whm?>R@Hv_Q-RclUG% zVobO8T177T=`6S|C6C2iKQsNz6ED`iw}p|>!anbO{|u90_&4{(42c~S{uj;rqJ5t$ z4<4^*;4Y+xAc7>vu`B3Zb+1UJ_uFsOcCXOWh(*1IyQog z7h~7W7z;nM$0FH6%j+-^z%mi#g)lcHJMLQS8@d8r5l-ywPsx{6@$4s)*gVtnP6XhA zs?7zOz8Paf9pWLg-=IiVNBnNQdEsS^O2Jb{n zqk12AI@6y42f!@!{#u$b7Z|`_;?w(y=DX>W7Cc}z!IxU3e?H67CxTF^s`lP@dW`Wq zFExH4V}ylgDGajU=6@_jk6;pm+8_Yf(4ZyM{?pVr#tOA60xDNEE~CFV9clU>`#}Fm zN&MSq|lOoa`r;>TIw`lMfT zGqs8+gCm1YpM5#WMG`@Z++uvjJ?wyD6%S(1C zgNeCex>-8hS`>f{wJv1jCT_9Uv95ze3i1Eg{@j!N3m>f&v*f3{z`H{HQQlqM_ko}S zJ9!5>kjwu&YPb#S>b6l=-KjmA@3p7C-50e!QjOu<&aN1VR^fGLV|WmQ(f?kv0g>&+ z7IuvnuHx>yeGBKp`v){Jus*uqvicd)mW$1S8~h^4+2^5C#|K&^7TWw6u=1l5lw8-} zYz;CYCKEQ-aw7Sk|fNwoPpy+9YAN z@gw@9%M&kPtM@?nlmMNuerH^O{VyuMLTlzZa-+FYuDAJCkBUPhB)t!0JA>8wqVxU7 z{WdaE8)ZxpfpvJ+5)vGkrh(O=d|9`Ve4{g`QebrP0Ed|VCi^3s%KNY<@+Em~)gr(D zt-XN*l1sx=Uw*q*p4+IOB?c^})X%yknBC7`5s>ICLc5axR96AOo&y5j<2ZKEs)aHh zT|JoL!Qkj#>;8v;CHKsmxB2CNf--6aTe6iH|64lV)wSL6^NtUpJ$Uz;wL7z3{~0XA zbZIJ@hASv_DpA|J@ons}lIzoz?(fw1e-0LH^j@uC#cHs?S(CC4elsYN?h`GFn0r9R z26Y6OURA@82#%tL)m1>v&w8+*OL%7ebt>CA1?$&`ZSzt zJkt+6@y~4*&_D;z>e{R!^64ah;or2{7Cf`#+h2^Le~&Psu5$Zf1%&+bvwR8|= zJNjRXzO-|C4#C;TnBTfIA*!-S>mG76+PLWTV|&Vzwm#HQ0Y~c=>vw1$-+Co=dN)t@ zGo0r;$U!Vq!#+}e@~KY^cv)KB<}djKew~8-Us#c%k6t3SR?2bxOY~loVa)@xJGZA^ z8-N!t`NOL&({I&88%$?$1(eF~p9P{>dM`xU!5&YUmfuW$>kgTF zf^e|Sz{ZrO=~O;~%rzCFHWHrPOibTzD^R@x?%Gi0Hk(;@xvPNbSiPga)6eB*Fw2J& zL~YjrZ5N$^c3mk-<+SPWo#RS@^cFjDfI3sSrjDj}PrrqqoNc>3Fi zwD=qzRZ1M1qQa@;yKdCOZ^6Oh+nu74^%Mp)^-)5(u9Hp500Vv;KDS9D@e{NeIU4jm zzJd8LDFKBMO4|R|@HHL}$^RMtEp36yf1JLkNY*}!6;I43M1Nv#?#ou} z8=E4201cOI@4CmEr|M@h)s^0dT=CUwE30@PY8AC*?o7RovSYL!vlF)D-m{OoRahX{ zuG_Bsx>ER4Yv{x@YLI+!rxAe`G{K^NKf{g zo&CQ~M1W82bx4$y^*L4a7v}22%zahVcNHdH3_i!aYSYH?e`}f0CB_Wp;d~ST5({m` z@0_G+OTG4=Bp$P?CtMtt0w04l4MlWAGE+hW3bSbjx*PSc;=zg$+LFTsJ%erO-~DB4~4zBl7tT`2H|+(%og;JoTLOk0$e+xhYf zi6dlyp^v8X4btQ1Zx104dLsY)K*jaD*4lGWYWr-j7XcK)=5>D_OJAX{_lXo?ZbIX4 zde>QU!FBkKrAi^FCw5$8tr!6?gpuD>O0b-yHb^S0p9x+M&_^&uk%5E&H3^qQv1-bf z{=bGIZX8(f%ad?lIUwpxBgua?5_lZGEHwNBu1L)W$$E8=`JWu&r9mV8nwCUM8{|H^ z_a6}Fj`@J0iX_VS@vObCU%ocJ6iONvkl90@7FkYK&3T4zmwq0?EA@+9;q@;#;!% zi`ZYKN;w{pTR(AtLz#y7q6?M<6LJYkJ5p7%UH1z+`K#C=J2te6x`~s)@U*wR7EmR+ zuqtNWaTZ&us;bf4=kWwPOsSB$h$=txxnC?K%rd zD;DYqoV)QuN*n#$c{RbdQ=~9z)W?RjydYC=))mpk@H6!4g*~ZTkS&ytMwG6GN$`EV2(lFt_2sBURYUCAY-7no9KBUn$@xhAu_H;v6A<|H{C~0a zmSI&l-5cm^xKuUVkh;*k?XMCRL zz5eIA&e}dhoj7>M3$^KNG+qQth0}>%PM2W9z%D9!(#&Q8fvNNT1>z)Oaw(}EI8`Z? zS>b%LiK@a&5~CjJ>*n9yKTi6_A?tX966QLb2X>W}?8()Kb& zuF};Cy?%W;#mKIpzlmR_u4uE<_O!l8;fT z0A()T|7*vCTSK#)+CgV@8B#O3;X6Jze}2S(Z_k^g6Zrp;L&d)8uK4AdIWguQUCRM+ znzD8dbmS(Bs;LTJH)^J-*CY&$4!nuey5Q`LKmZbN3ZA|%F*zdeV;tR*NH6XMH!>{fL95rV^>gJuXzyGvV0s_G z6Qbl{$^1ld_G-vmDthMwSBLbf*~@7A-!I(&P6*ZC8RpwLbbACW{%T>I=x%-BzU>$K zeCYa?I1M4>=ao9P)GOq)ZpMC6W$$n1_ZYuknsHc_KcCth(dl z{B9=5bEhav7Wp)fVNkkIZL?H7C$W>;k4wvcsjrspshw6DSfwZ*KpF6$ zEp!!PWnp(#tLhn~LiNzXSE*%l#XJ|Xr)GI51(s^4SyBn{RjkBi2iWiex+vWlp#2l+ z6v`E(C8uglZT0Lf^Uu@d3+BH!fK8m%hNw47A3{Lit_Hs6#ck>7D^UKQN z+m$0|l5(E*G!pS53f@H5WdM4nLnDJOzyBUtb6?jWuob!ydGPs;WX;d%C{?}~$Y5mV zo{o1LtKyaoiA#Si?Q3aAS)_%y4R5t^pUqP(v7A5&l7W{!`VDQZ*I56(2evzIcg4%` zq=g7WwSkIza(E_;0mdiDW;%kQNm0^kC@irgoo_qvTucelQF1%zVfvG^ExtWC#KalYbo{~|Gkiid4*QRO+Z8^VoRN4D1m^y?zeIK4^m`}?m zyyiXzm4O2SbvH;eY%eq2G3bQTp6lM2ApM)4nlM1bvQ62*F96AR3Y%`kQsj$EK5!4^rsd?P#6#md|i%5gO-zINO;4+v?~}2%O>jHhqLY{QFDw znFIW+H^r0ybgjn@o4sPH`$|rJ?_RYYwm6}G%2fZI6pI?8A?s};3gApb?{A%dxiIrD4L1IooPA=s_^^^CkJ^oMC5H@4L=9>e*JFTPdVI8vN zlB)cJLFB!A_cGT)LmeOR**FGaf=z*Uj@!%Up0DNZ-BUHh)+6+{Z^CzzjGA|U_(%GB z&dmN0k^1#(H{Nr>XFhojNA(toj#U!_tmQJsN{UQ4>nkg~;VU{icl%mRuB(c8AUaL! zGaK%{YV>|_KZsgq>#NIn~YSpaPN6GdIS z4tiAZ%m3CoQc)}_P!0x|4JJO!TG^%ix75_Fm*T2#{d%OAzZLxI8Tma=$H-?V;m1;Z z7gXINj4CjPLi|UHr@3zL0$+;ih^xp@UETlYIdDlgZrPas?}njn?Z0b%Q(Mcjb1*&o z$MLS_6)Z5NgdqE>^4}~Jz8cw{Vj%f1G`PTR?X{+Vmrfi{X62E>gVyDaf5%@ttcU?z zQ_^Kji*2}sss9t=2laVhXD)~rd$GNnO=6Mc{ zl1dP3MBattfUo%CFu7m&|9qx?HSh9?{3X-*n7;s@IuZEy2kN5N34UMx`(>_&MGQQ! z$QTm}8@}9B|1_P5g&7=-`ZSny%^qFuhxyNCYZ3?c8Y)C`(|ix0{KhU((?<-ZE zWWJ?}#4k6FoBaL}KZY~sl4|uO{9`T6-z=Fb4Pe02Tu0Y=ulJXz(@=Xi5AB}!ZoQu;@8_Cb zKF6RD@vn5dxZ3meT2EViDt0m#RpiNs52a2k;$H9l(l@1RYgu)yy}OLL#r?X^+WUMO zX3wiGQ?$Jwakl4nc|ZW?RBDNm5<-3 z+T2R2Rz^Oruv94W$DRzoVmc<*S=}ml``l6Dmos|d$>tk+&}G8+sk!T>&^K2hj;_$I z7$tF-r!V*aF|qwC#DSsRUOCTBrX&lae(c@CTa#-cvu#dCEZaSB37&=flPP(eMBY^S zSfCm`M*ZJ9+`p2dU9u>>ATj-Eq^$2zC!>>rVV=n`Korhwd+~#v6IgoR#60j$%ON7?N-n3yWb0kYsB6D-YU*Ff_#_k&$acW zU=Kkudt7?*_vfbr){+j!_a)iN3-2L2d=0!qW+Wi*rH(h%s^1XS)A)WB|^o;yHJxr7D+M@Vdk>MJ{Dsr29HwqV1R&}D|*gzVUMUokfj;MFL;oV8gd+cr6?%&Yw zkG|}`bun+et!#`9GKZ-QkgKp2fus0V-Jnmz7jwp> z{f~&z*!1QtaoKgV@j{kuao80#m#^wpuB*@;8!98-U0W>4E%u_ZX+6I6mOe%t5QwI} z@%cmGq~&jZ{FF<3GmJx{k)hw=8%fl#s@?6i$cU0pDETgt9Tz}ZUH*D|R`=sP8{-LK&3b64b`btMl{%mz1%O!}=oLVJzWs>frE+kO{mT}~5FX6{E+44s2 zllH}nDo$CN@|w;QH8R*Ov1Ku}9~?|bz;6!{+MFR2x#lOkWgY$}wNa3?nY#2`Q;kCFdOY-Jd7 zQBT>r?H-9ncPs*wwxjx9X1LSBQqRMmWPIC3qMyJPYe{ai6}Z3SL&ortIFvVp7hSJPI5n@ za?h%e#PUggf1#m3Fet)Xa=A4rJsoL-<|;NtZtGZ^f9=k<+>@1Dd{Tc+1dydhGh4|R zeLL3<#!^_W_@N5pM5}=@<$aF!AA9sQk(Y&sv%X|T1_>|uQ++9cn$l_UO*O3x7M%-` zPZ!bl+l{aKCtq-#`|ow%vmX-{IklF7jZ)6Gl=OU;ZYs5^vo{c@ZC4!D4c{1O3>+T8 zs{C~}G26KbE1$Ot8rlTg{CLlmEfoCAI2xX7t3UFr#y%zTGH|(!ddr=9Tb@D2<^k&AFFsIF%IP??AlkU?@!&Pk@&qjiqy$RAe^XYniHCkOc z>@03OOfhm-pv}=Kldi2$vPqd^1nMTZ>ltnVhY8E{qaonKj>y?8Zq zEoqrRy^s>q`;u_aZIS}II~MFyt1B&O$C_4RTzi-x|8n+{*tqt+tO*uiFR}b#U>cZ) z+5Ew!yus!*N`>5zsM1m>u3Uh0e6=r=!6<(CF4Ifzom$5(GjD;P(wg-r%>TfcxpTA=2q90`q z^DfNNe3cUDh}5ldfGwInzVoaaV%GOJ!8H{1<`eR%#5(ggK~~?7uxFsuRYmUP??arK zj{`sCU~uoyf?W~w1CQ`uV6(2RoBG8&mKf%&%s#-~*pi$b4@I2Jc2KjNXP0Zwev^u^ zg`j*b6&lDxRj?%4{)xc!fufRdozFEY84_Z!QSEDl!rtf-_h|Hv&tulv0wz0*x{gHXj!hjg&q#B8AB&@E{RRyrQ3 z7S7Sn43-ilavZhR9a;kj{?>}JWWOydf&e!FD8qAc4;mQ?TU@$Gg;^&-3tljXXBQmu(Cwy((1d4~ca@YP-DLHo0jjz@9Z${+6M>>G6FCbQ z|4P)@=z0~H20I=SUJ_!cHM>I&Cta;BM_fO%r7DEHb+bYcOr{U80o1ckX>SvBJ2J^& zyGPjNc~lVB`3Pc^c92xg6K)-QCor>UObV2VCnti6+&XvmoW#@4%a~_W*;ebwlC5eW zh{jUvD<+u#D+uiMW5*7pe{N6**V`y85TRP8=<_vZV+C-IW7^sC1)N`g%c$Q)KH$ZH z3KtW^vpj70XFH4`K#4Z~ak)6^aqu(OwG7z)g?E%Vf>`%=h2T)6KWVwkLJiMUw_FXb z5U~fEZN!ZU%z06imV0CJ+I-+1tV^#W1*w7MxX7KFUp}0&I6|R*xwmX;Iv}dgrrLfv z>$(O23=HWp4*>Y|Lxd#doZLbt4EsY5 zt*tJ(V}t;)kYKd+%spw!i=D8)r+Eo$$L>p`2f??Hby183*y3g>w&9{cM?2q3FIX3_ zzN(ZD$TXG8-4lZSc)Bw!gTDQN>%hZFZA+ThT#p%Jdb~cY>F=sv5==_rUirs9ppId- zYTKd32;KDY8B`lPu@|reD(9068vu3*crre}`Oi7|KgMaWaKKIXV_7hY`H^Ce{!7O( zdMtCIr2VN{(naRhTT{poqOf%ULh#e(nA#!MkmWerx~CfhocI(hv47c!J3wYlmVQx{ zzimKTu-T~wWM!|0(zT~W(Ehm}knkCSqJJ$w&LfC|oy83L_tS1*Yf2U+xA$zt&6hkq zw7yt?WhysgUrrP=md|?nBBcPU4v@Xf|ILt@{M#NjHMqphphywHcPfV*-BSnTUmvVu zQd!lmF1XK0LLxvB<{KCwb+K%zH%<5@o-ys;g9P$QxPGRweRXlnRV+%b7>M0aLLu1> zor&y2a2~e2&(HYYcp)ROK|Ss^?jvJxR51ExZ8(@ykJRoGYm9c-Uis`S$9pE(Fq6M>%sV9O zx5B&oLfS#Gew6j+I))sV$}OfZQXfD2+*tL?6N%D@kF{C;IV_%0nZOE6NdRqq^>X&3 zSt}MYF-uoS`Q+Zg=1aV--;E&DP)FI~PTj=|oOL{X-uN;G7DGve)A_Gl5s@3~O!Y)1k1}`fg=wI+6u*(&Sz;+n zq|+Ri-5Ry)(>ays_p7sb=g#(;&*Jfq7m#Efdp*998I^0goYEC^((&41Z5c>10Ml81dC&qaMM3q-3ZU-tj7?3$zjtMe($hPabK#ZtEvTucwNg=&7 zEHdQ8SMMxq4;f&=2Dv&Hk_Q6;e}_vV(Cn(9oce)2qDwFA@#A!87asv-| zUI%IuZQmVX_V)I`;cWHiOnz*zF=z4dM>2V_R|E|CO1hF=dy_%)h}j&IVf));HAf`8 z$LqI0TC8tdmvm+}dmv%q8R()0xv17PG@e0Cg>uf?wWqSTB?YU`l~0Wl+g%sp;mxl% zFNaUr&kWQS`rd7Q=GeQmKmd+?9C=bHO&BF%HBHX)*zXh(aVVCaBefd>02(8na-b$J z3=R^uD+;;T^JDOS0lP6_PAmQheRSwb0E_6WqTMFT7dXrVzq;VF-n(YdEMb^FgSn5M zjXNx>mK(eIJ{+JXe-vvT9t-Pk?D-Y765CS%h&Y2e8bZPC5o-a-{4$0o1pzn`^6`>G zL>pH69M5nBmffg<8rS7V8Bp@4+Z@w0Gt_?r0R;)`@P>4|15&SL z@fJa&<>aSYuUC2|>?B73;tNlH&<3n3!u>@AR@kf;wm{1-9PghcEby}no!7n39eH0H zde!3F`HWm5ZO|E$?%@RSENNA1j~o0M?pyl~Na+b6N?YyKSije1`x^{e%sQ~&&r_Aj zoD;FC^n9y6P3lBUWgx>8kd=9fUF1b{5na84-VSIu&P5hJ{(C-PHmOjn+;9J^-u>bh zjd>DPxz*{yFOQqVHKXxTIjmr=dC!{xQ_iOdiC5Vg02_B8kJSKbm02cQl6GKBnWw4z z;M^%b-I9Al6boV?TSLR7!ZH0lymfis2qRF39qKs`PalGoByQdGCJPh;~T*+94Xx&+@Q&yWJa~Kes`W z)~Y`jchgs;GSfg@FAK5hZ}0CO=Rp&qHu{t3EsO61UF?*qgSrRET<_GQ4;yZ*3@M_) zx@N~}HMA~6ZzEE)LRVicbQEMsuUEy1nwa=uIb%I9!g^sVx;FO5ZngyJ;hfUH7ik}D zK@daEas4`}<+q1(BLg1Wber{0ib+4938ED-a_QJCm`vHWUgDiRHF&bg^X5RxFQliz zy`Y6eN=@8!{2(&lItLSk2XR#P@5pb};3WCfZoc#TB}h_Jq&- zG4J+xU%u@vBPQt`etT@*Xz0v%-h#1^YC2U_iIuG7y5F;RJ+l9jnXfF}xou1a#+u5b zaw#5Kr1Uk5>VEpW`OC0@v9`lL`))$XJF!n?^)I(AG-GTf9n6u0gvK+ph+1MR@sXFx zo0{}vjpoxw_TtzWV9A|gE0T5RA0&Uw=&T&M)*yG|sUiYk{S>P6Y+aSWo2@|4Lz#_`nc`Ki*kBSJ!!AO`}U$yGLL&_2?ye0}A4QHC2&* z*>CiU%JV1s)R#yKXk_d5orF%}aH)_e$tU$XgdbW|vO8+*6wcdd3sROFthiGBBu*!t zpZ}v%X#kn%^wD`^<+t-(2SKW*63>7zUqtT1o_xQzPyPB>KX!0NTddvjSS)UIJgxlL z3U!^ES?BgOs)gt~H=Zb$ddUHl5{7mcq@%nk?cX{rscPOB(qcg$dCsv^i#t3ZpD@^F z6`PfI>kYU$zCw;~rD&(YT1sR51b|bkW}Gjt-OF&Cbqi$~FiL*W;JK_Y;#@}nd<5!C z>3~B4@ffq#O8PZa61g%|8pcdFGYSOS(gbfmmuF7BAInob(B4Ri5SN;`J=VsSV0S+!9?yy0wJYSUOs2+`~N5E7g_^?IrX6 z(bY{r)?&ha{5U1alAWhw#ZXb0|Amq551NcZo6^CqN^G@~Q;`hY=8U8|urOF%)@Z+G z{`f9Lpj(*vJDa*r(fvLUgi!TLA3+#$J^fRBBA)y1itUDgR+CMAO}DhFl_ai#c-|bl zU9xGg+t-rz$BOV`8QTyToyUWO7~_gPF>T~nW&kz)+5xUV5pdpVptf-x=ho6pg9MZ_ zY3IzM8PYv@CRXE123~;Xeo=!QO|_S;xuIlJF73-~U^qmaV zKltAJ`&MfYn+rKuOUexg?X``)3Z_Pvh?Fn8a`gQp23aE-%)m@u0r9@5mZ9Ix-w=H_+1A^i z*novGQ3Ksy=n^SJ<-h7Oi9dgN^E46qk6?wG=O^+$N%pD| zkR<@A!Heb_D(^8Oxeq8n%c;X`{a5SMURS~D5qAbJ)PLf+IRv$<8+s(LB0+Rqu-c{! zJ8JIzn`Rn&MyKKH=C;VD_kX5?uc5biT1&@!zv6n&%?y+rCr1_g(_((-K@Dy8BGmHQ zzSQj|_#>?k@#?XyrVyv>7_W6QFQ1H0ov6g@ z+B`pea6+x^w6CqMZ01QDOIq;mBW|jfGlV$>5Xa*vpt=1%y{4T*fZXW|SmUT`zF}9f zJ122DhD$hbp2Sbs|4_})67}6-qie+YX^Z$(u(5>T^&r-a}j`?9RD&+0;STfJrE z20o+o?JBMG=E<>1zkcdlafJ5HGOxK%9I4E#1=n*HWAJaplOGL^tb-z&eY(e5!!D(# zTkg>~VDt|8W*{YLoc6QuEcLV3je|D|9jx05#-!*)d;~ZNrv#D^!o%y@qvio&Yo@@o zb7P$-Y172MCCcPG9!ZBo#r{dUhqW!E9PQ^dSYZu-;_+4CHP@ccymNBU*Lz2&_~E?YoB)pHuVC>0!HX|5Yoc%4tvc*vSM8ijIwu;YbzfUWc+)zwi)Ty&-^ zVEpJ6nSn&gnM(&UdfF8qh5wWK~ zs3l~CV{&UoYoa?Fr`oQGG7m*q7|@&*LwA#3pC11z2?kiO_O~CWx=!|Ea`R;Ji4p1< z9Tso~_uzP-TJlSs&34=rBRQh1gHbNm-=6@=!Oz}4lJdvNc)%vHb)sZ!<(X#?zhmM1 z^DCfk(@f4d(U7-u-tt?WLwVa@-Rgt!&>_Y+qtYFt_0Km=s2vARf>?SeY;JW_Ikvz>G2(6b#NLSv{X}-u28Go_9@hbePj&WMJ zL9taM7TF0CXF?q{(lkf4cEVM4RBYygnAxEaRaGNW`9?eSDKU%Gjl%$o(z?I*>pjU{ z3f9ZVAMH1FQpxZBV~fK^1@#e2uQiSsLi@WGbad6euRUXRxEPXObDvr6A(wqRb~BPH ziNV-K8A&*G`KEX6eE8k7RwD%G-J1JXD}x;xy)7NuChwPrsmw~>Pr4%^vNC}Wn{Gg! zopLqFSM-<#v!zaGW;*3f@FTEZJV@o)6uYML zcxwBb1Y`%O76mzXMn;88)U8EU2`bJ98y}mM6xmHP)AcTLZ%N$fDi_WER~h1iVTOQg z%?k%n^nGL!*V_<`6Kk%d3r^ZFll)_gmu~q}1iaKGrx9j$>c2yeTcm7Hg%<)b0C$Kh zr;xt9JGMeGFDD|;=+=jIfHG?h8w~=oJWTY-lFs%)-xoHbvq6$akVghC zv5&@gcYM|zNem;~vFC!eHKoVqp9la-l~BU8-~3SwlLOJnsAI+W3|;>QV|&Y9Ee?vc zp;W7Ov_tC#KtT=#SV713BI6|1A)}&K_^i)Oa;dYP0&QY$blunXmWHN+$6b)oOo*1p)P?FqEUYW7*e{!LA=u@8Z>wvDt7)YLWVG z@6WHMDQ4vL-Y})8%GiGunG7T;%A;2~9MKUER7iBCqwVeu@`5=K%A3LvhPYa_1?)HS4xI$LbFOOS&(n@BI%th;NCyM&w0 z2?#`X_w^TVcAoW$pcZQ^G_oHidaEtZ;6gBA|V+=q!v}rq5 zbYYL=Qfw8Id+ZKPw!_QLzDuIHc9?qH%*ej(m6}3&#tIve5&$*xAND3jQLze9x*^rL zK)Z0Yf1^~JWugZc6x5&9pl$nu#vDOQ1C}!^-t~PLL}&1)Q5Sc!eul4glzyM{$pCHM z(eG_hgELMXN0EUw>X8%{quD&srazl7zE%mZ{+ioB%|7{gTJ3~)pufHNE+tymMf|kj zL)WWr^1@8w=2iSjOJ$xT~LAD2mH zcIoVuKD}aSu6b~+yq^UDAX`v;CT&)}=!^ z0qtKCYtchw(z_S_ ziI}>`1r^cJGSU0Gll+u!YdE=x1+4}?C+Vc=+E)Y^jDa`|oO6%RDGWIj0ElEgBOd$t zI)sK8=uX%SF0>Oq%4Z{+?+WorIpH>SOmFFCXQd7v42&ZtKB9g;z6|pUX*gTA9_F+d zQwyJ7SlKNp>S8G@%F0mgA3)p<9Vo&1T64wbZPCpdIZ|x!bhB96!v6)NbgY`4uUP&9 z>03%*jk9BY%AFkU;J)?Jq5~0$2W7KMox!qfG86~&sv1vrkdHYf7D8qCtTebAE>TeA?E^INhl8DPTo^MowR>68&4EQYe^C9~fWv6{@-t*7VxfOV z1c6)jR)#x-znbm@m;^f{D`9|}F!4p?glXvEEZ2}L7mWpGR?V|z(ZjH}c);ed*rwjj z-_Y;hP1#{x^(A}m!`65D&Qn83zv}olc9J9yPDnCgy;S_Rk^Q3vmp-^uv(V$vi$z0@ zT3IQ50nwiKJl)X-882$CZzi}{%$*V*i>>3)ZHS8MY!c73zoWyX?XNI8d=hd{zU+1d zl$0yZ0)*VSVSbobre2vILt;`^-DmuQP z=guzWc#pXi%b;>SQ3GCM)FSK}17kXHW~U-jx*m}f&Oae2*!wEjsb%><3C6L|+pd$( z<`N(j-4H{z+9>UKPz0A`D4_|uJKJ#(=aI`&P!;gkgt^VM{z3c?mCs>e~e1I*4C4aLf!&9vy@L}TUH6rmI+M8 zCg|m#WZaj5;(T|Girpr}iy}PAFi`$VgaC;EtRwOl7e>~mB%eHyAe15nWR`Q??Eri* zJvDmlL(%{%;{W{heDAOHo*nzg{N0KI4NHSSR&lBCg$haGChAX!&`xp_m+xzBfBWJF z6{N$zp&)!ft4$c_0En` zq4*~pz{wz}8OL|J!Vg+ZDZB_x8?;@~JM?LKSO=2?n|6u2 zC{zR%kPVwXQ%e*`g%!mhb$^=>3qW!kPN&}1Qs(?;+hn*pY0C)kg@*>Ri+wpd{dh#= z$$%&@sjXoO&tq%7!8s9L`iQq=64?z8pz@ zI$HP2`lsaUq)IY#GcCSNI@d#Wly;_r?ZlJ|#ewF8S^yizuMnjeaB6`S=n zS0@f?OgbTk4PI`nCwz5wyZ9amzCJ~pg|9hT zpMc;7z7?rXBkfaX_Q!COV{bl`Zgw4q=EG*NWJ%UNX61ZCyAjYSb2Zo7m#^uy2{YZD z46}su#pQcfjF8W3Bwdv>dIJ)MyWKt#gIgDHb{aL9;1vQ?wY$QU6EuQZFf|{I;>81g z$Z7y{Hc&T8Y$on2VS(I4fHBFeF6Le6+1_{O_gXYeg6;&Ty>JTskYCwhU#+VXUh#D< z#75EpF5NxkLghiH@lQRp#yRZA*9nStlQ~@oAZ_9E-WJ!o;;Z&5l5TEO3ntSec9`+} z&2Gm1M3&@&?bt|g z-A;ah)}-0(v$QYDh>~9?i>CSKSMa~yP8xe-P}KoNHf<%{rd{)a7}uqcBDr^f zee{DIMd1-#Qo0dJ&?0fV)MPcggiJp^9cg%j0P7s6m?|M$GHooQx~j=BKRp3|ty3vZd6TsF^(30$#n8CrqUGF+H$@h|G^yW8m;}$>XrUixAVV_%d-pF_ zknNs5gd328TJSRc*45)QB_u1ZBao*&mMO;0nMl4>{q za916j(Rs%ZDAsm+>$(%s`%mZZgEAwA+~5AaGEy?|#-fk&Hw)k)ZTTcqtNWA5oIe6@ zaQ0WAS%Uj`sVOe1cADq_TvR# zF-%k1N7(utEX)Tme;#cih+kh{OfI0wm#>M&5EM9Yc0LWrm;pzTX~L})pY))cbm6j^ zZaD61-<(Ve#P)Ag8(dZgGA4zIsVL#RxRGDc=2-et-GO6H?WA;;m-fo+MGe3$2* zQ4bL-mJ+P3Nrfbfd}7cCsi7$h{>Ull=Wh?p|L$OA_UYxA;)(j#h3nLB2Av|kS4u?g z>~($0S$mm~CZIpjqNc$`p0DmLV8kuuPBof?85=JEsVjWx3DCVO^yDczy$;%J8g9l= z_qqdA*%vM6X~Z)F4`*xwGBAe=+}N#B{?0cLfN6=g z0p=bn_o0@Wow0oIsfuMQ!>xqr)aqLPTowv#Ao?2Wl1c;+bxX1J>Y**&jA|5Ch8K9z zWH_(n{2U2G@`?To&`^ltDsThY!6)B~tm<+L2r`iGGjC!Qdfb6d9Rc9vi$=WXzCMSb+1XM9%pWW9WgwuwB(=AJQo4&7@o>^|?03Ox$7Jedolx^OV-9l^CLpjro@N z3m*!%WRcdxFoHW4OmAdWRAYj)eqLOI=j7}pC(4O*u;iGxzpX?RSyIS&IP!GiKN2qN%%ib#4T z#-8q@Tx{pf^a*8!=f_+xIFQW0=($(%8gsErJbJEFqicW0Ml$!`E^$Q^yh$L&oSLDx z9%z6mHSTyd$k!EO{iuT;^f$0t}|GAR@5qlqzXWA_Y7wK3e3#xGOUvhB|?`n#Ue zRq0QD|3#O#Sp@?hJ0>LcL(d(}ZZ9RCEmY?hW-3GvykLAzloU#=#9*NJrFbki+STos z9rsMn!}qxNntSovxi?D;&esrkSoR&4JMi-eoJ1cw{OQZgaVds|AmN zK$764%6$`?+7e!lq=B!PBmBvch-Av**fF)5hfayimNbd(k;WI;HL~cGuP{cir%NcH z_AB?!ICnA6eL+cvddlZ9Q6(OD9@wCJP?M;G4&#~E;&-x)TfX6UzsPh-=-;&o1Nr7RnXF# zPMdTugT~40mo0?(#B)^E_Vy-+Y)k_|&INB(P7F(`&~TG{ImN9N=^;q#>o#?0JT(8j z1T$q)3a2BszSkKU;zg^<={G&B#|F&=(1b~w52i+xHNN71<3@Hm7{9>v5)Vadb>PpU z8W5-|Jc8{YtZP4*sgh6+t5Vo=$k-j;M2^r{U65NAI0n7wkr())+twKg(k9!>-+4UY zQ13^_Ek^Dl?%!Z5F^bd@`qYxgP{=M0wC_&L?Vpq?F|?K#9u#$VPo6RmS(TVkpQXR> zw+YvcoT|sGWR4d7G@|tAqa3O7y}^Sx5sy_ENs&73TILuL%e|TU+g;K_nDc5Cg&xei zLrTqiBZtm$`IiG<Zb{dBkB4J1Pcf@pzE>m{!JY6X1ej)6>SN{h)?77+@{-p)9)l z*Y51;?+vDcUvqb3H!t+9Zx3&M)0bLdnasPT=d(01G`Rxipi4$Xk0<-q)cZ)dsXVWWib-~NE8V9#^=cGp>qz{V zPvXz1r2gGr!RK?77@JZ{7VtFGC&oxfV1^;3u1%i*)!_f6A|48bsFozq%W4riW8=>7q!J78PmT1CFz##S@u zD>_Qs!!8-fIHs*n?5IWxeQ?QiL^&yzl3v>eN6OTJByj{=Jcw2%uJ>CuP3#uzI&Bej`afVdA!xdFqT!HA@&)W^Nm zg}KLtFi`Z7$9O;eyUBj>W&!i^1`*=d&&Q&Ql6FK@Yc)M2O9p0aj}^6TC95KLN~Tts zeD?~5`M*3jf%??gfFTT^VCP)ZS+8K{wn!f(H?~dl2?s5H`R|1yb!lYdF70CZLN{+~ z)7FyaPI*bU&-ma-Mj5P`*npO_iYi+g!w^1P1aK*L%9TYB(DnxWKJz!g#{dUu76ny_jq!^%%%}*0TRc4KGutEAjm;|0D27yT=XAH z_j=8=Oo(6y6pd)|E1y{0#^CSKrf!aL{iP;5lZ2q7_WD~8h6)R)K4i`)lbd&A=D&kj0* z1h(&EGlx3RyDcfCen{k!!c9X)O9XPq43s<#*XE$>5QqWOCw>^6zqySel6Pr`zhZN8 zYdorDFdSL_@@UehtO}RtY&qiXvR$B-9|NppG02Lj-^m<>j(fwxn5~N*t=HI#dDV9V z?*9*2XB}2$x2^qW(H#QPt)bSF=)NN66GZKXBr~!R`eH6}(|U7j&?* zC%yUbMJ$%sdgxgOTwO@i#TBHub(wnkhbZdEM<_gnx{SoC%`4s-@xcd)E$|f&aZQSn zAd=!$S!5@PMuP=HLNEd1n&@pO3=mQ&0w&sjnsN=d`=^4fM$dzTj?r(=7s&wy7E#3@ z4t-dIWLO9VAdKI_+wToyPKN;~9 zlM=WCneh{!U4fM+AL_%Hdx<3&(#D}}LgZEU{B8=drjgzVEBvADgYVx<)qZCh*xI{! z2F=n0DCuvM-L>O^R2-vsZH7gHm84>ty6{ zL}RnSt)u!}a2|66r|g|rMa)kxQAY~qyC30NRd?7EDNwuLdZ0Xd&)=bZeZv2OF!p3b z?yAoeP|hlusv_H9jAZe+_;Kq)y<@}Lu8W>yAbhJ$J;6>|>lyuz#`{>ZXZwNH%4-wd z2Nr&>k?`8@iD8v{J$YDO(5zF8J;;T7M6 z(XZN-nN5V-CYz(9je>0|cw+pbEW4eGugL{#ZyIpzl#{s)HErkRpc^I*sGJp**$|gJ zD6Q-}F7gD;(>uDO_~*w}J+Hbc%W+4Plgem)Qq#ju*HkkE@!x7C)N-; z<1^9h`L35RtzmMlCFC7--V?rA!JSF1-JJK1%nZq7a4yNjtMIT* zEhm8sT=`Vx@h!=<5xgw!feC#5%;j}Hwt4KF*$SIZeG}9G6zO%#m^%6~3;))AR9Iy4 zo9}Gdld;3`+>xdsU=KNXKbBpV;87s+qJsu=;Fz}zsb<@`79>bKARF$8X&ct)9joM* zT?=qbzvR$sRE3m8RQnz$7W0LJP<1idJ?~a42j304wFsMlX%58z!nj zOZtcK)J(2kQIAOm#KEvR_gBd@3Wdo!&qHhx(QQ+DvDTv!Yl?!H#ak;T`}TH7`i!Kt z%YK1=3wJeXgUjLP;X_Q4V>_$(a6n|}bHM-knAYhmW#9$aZ=cv))}SrBZ2WL;IAVQE zKM>!mlxKO4kvB(klKm|=n8UDU)(T7d#FNf&E1WXp(wZ-hWutd1JiE`!GG<=vTbxv{ zugJUlw$s=XNzV6H$+VrJGRo}N@Unb(*b@=T=%&kViS>PA+lb9ABGnyo&^8#*7|LvX z*uhbuq$XMPhgCR=cvn1M|3%e5ad(YX+;nQ2u=e(-%&wP-J|kEBuh64#{tf-gZXPaF zOibvbH`4o6vZRy<0D5Bx`_u^w5XMFBS0=#BzV@jOPo4&Xygiv<46- zq=c>RHl4FaYl^c!@fCJFe$Dd|s>D{B5;HVYNsdmkH;pCs58j;{NnA(}?coTMY~0!} zI)5!bg@CSY`TTdY?>+H4+X{LeyQYqsznzQ1GcofM22!mT75n!q4PA9|=!dM#sdzxx zi@>Oe{&!UR|3>BD>jySAF|jro(Y`1Cn##13em}$-f2Rx=o6sT!Dr_wect9Xd%itW^ zG@5yP7L8xKCa(MN^FF2sdSeBdVfA+Z$>5gZ7pa}cUYEz7uCyG~f6T%pJtNv!mex%U zr||8Y^UHx7`GS9~0!nQAR~2GXZ|UU*bfgtfgsHO9>vUDDNMDQJo5SFTeDhS0STW;a zXI?bc_Q3T%{&eZ9tTLO@CQJ{Cio19M$9{WkZITM_6~U{3iy$@o9tPmuzpMlRqA-r@ zSDSyu@WRf6* zq!ul$kCyEPT`pY{Q(H;503h8*|7uexi)dN@^WZf#G37fsTr-KEbV)RhgQ}upU=ndZ zWA=0}d`YqhihCi(;Iim5O$y@w5ml^L9bcDliQv>Ov%yt^>-GHga{aQ!AC8mNmseR3 zfco}Xh-LGCFWa|&=S~#Lzup-7{@rRGANwb%FmIzDQtEpvPfym*qc_|fwU3% zfp~>60W8Jfbaz4R>HL&7xr?Y5Ts_;^27?M zZB{r6*jih}Gyg2a@m+nOP5zZ=HDA!G_6j;H{qb6MHcX<-X4R6Vmn?RttQ%9HM= zT5meb@_)9etpAO$_+LDWfBoZp9Bv#Vo~j4$(LUGr$FEi)A*R=JkZgBaeX6WfOElew zcdv*4=S_HLYHTJo*0b+8M?UKD|9(vi^1_2FDaZYe9ZX8DInlJC`PC(`QPtSQ2JWl+%M!d z?gV%EhVI8df1-{}{ha;}v}3pLTS{w}@HRy5aiACjyDO-lb1kZZVFk-!kXRy_f-<|$ zjz7Um;{p*DMduEq!HqOMA4Tc_gn)oQr0*pd&!r99#pFRr27<2uY5(;Ig(`~jgx;~($5u_9@!~6H=i2fn*9Nnhyb)12f-ulGqsG9FxP3JaGDOP*Xvx*oS9cI%I=C^I<#Fm>{Sa=K1ly zw+VV%gF@Gp8(f(s{~J*=Q%rq`Lig(%4?)!nzF%uxJq$!IlJ71wNvQ%0676&cNttu? zW=8tcDm<0(4Zae>*rc~U$r51-3|L5jCx4@L#Uhq}hWS=V7KDvlPAKA@^XKVAKR;*x z(R_yvVtNKBuqP(|2+VK7HB3$G_wQq|$#&yzR#K%6f(+}J3SvaCPZC(kyPD>S3> zpls_iQ2^-A49_}fxXEKeCjY?NQiO<_!EK)fM@Zc!lRh8u1K~@sNo4S@0})FoqUN= z=z54?jxxJ~fl|n5@oDO2Z7$pGn1aimz2~{&cXSp%1gfT&BVHXSA0;vf5f1oC>U3L> zuU1#pi1Ws@`!tg}s05a9?D$uMH{21yqv#vv*HhN7LxOkDc%jvnrwRz6SNe_3XD76! zWZru`)+M_IeQuX$7^2>#@{`$}65t(g^Ve*SnoYMa4Xo!zY!(Rw;M`A(GZ$FZ!Z4Ru zL`DgI1NMFPIjtP_+$EFZn?b90)3N z{=G4Ji!7J#6PXIO>;5*Vhos$i6t@RIz4T9{3YgN~Y^<^wv+#>zMz; zL_CHNEduaaHq~>%;f#lfY+?`VY2WLOEtampTtVx=+uz4zF8aq;WN~sVf^D@ks@dBy zSqA0_kIxoo69~T|Jx5Wx?TYf5YJbH4AspszS`$RMHUw(OEeVc{f z7(0�f=7=`V7OK+8Iz7FMyDTEt5bMbT%p_nXWjncowiw?ZGCgheEknYlL4NWtApo zHAO(a=`lM&Ph(N-Snw!HjwU6koA^m@_WQ+bq0_v-*QuQB6-iE{F#9_h&l~4JCSR_@ zgSVleXy+3~YU{_{2&8Vx*};OFD++C=^e;vdX=iP-*v83yZxeq?7N+P|Yf;=MqMWik zp_Z2OUMdBbE}+S5#ZWP%x0+t%-qthma~jew$d$bwlyLRcHAoBXwOaRs8IN>r;JjFS z%k*3qdT=q=i%2q0FAn{N^I{5l|Hrsq>&uPa5NuBJ49c(##>d)asQ;n(rZp<5dB(2v?b3eUX>d z@&sn6;YKt~+cVPY2dXg`O06=mH%z`yUn0L^&=BB{RVG14+&HB4+Qh&W`)-TfKv(Bq z^R+Fe=+`u7)|^gBI&Ke|VrYaTb&IWi_b5OLF+9Tma`|Jb>e^VCKB4M5zJjmq zb}jJQ6m>I#ET4U0fb~;EBWD!*nZ@wH` zY{$O`?U+DHJAUtrY^+$BbODWPN(ReyHc3xvQ_?Tl!U!>_)eX2ojrV#xFSWBwkhANV z%lLRn<*(#OvP-Dfk@$;>(%lT=b!IxJO1dah#OBz$_|Hw;nZztvf<_rCj=yttKxj{J z`NcEK3m4GymD~Dj*w+FXIYORaj z17&?|{GaqLgyfGsX>>tuM0*2ym&Qc7hoMJ;0xd;;UbU1K~ zZjl19DT^+$w4RlZKM-L&&M^Ew2VKqOC4l9FT6`Ni0#*kr@ut;Y;-NKVz2%6XvInsl z_Va6lbQ)ZC%Vl8qU1RtMIDi{3k6y*}pK*hkvc1d&)3?OQamvS8~HZ66p!v&G>fmiw(TgaVUXyq9-Arm>*#>6ddPbUGMlmt-{pSc7v+7_P09* zX<3XJQFCh#!CLH%9jcP_E+#g+HOIbp4P`=YQz^99>8|298|;g8Mb*M^WC8hkx8%1p znFa+poO=~Y``W*p1Oqs|nv4+!SyczSAONM<+$?s-^Wob`Fe@9D_2@9c;6hP+smpVI zV(6E3oDTA39n!R{44yB*&T2baLSS7cV^U%`!~`Lp z#0oQQrkI(J$cTW^>kt6SajYJN1t3N4UJ{Fj3X#<@AsjO;HuZ^K>k_^$TJn(s8))mW zo42hlBB}CE&h|HuX2Ck-@M`dq;28`{O%VK62TU26-dXvr#>#-%X7e{)Ij}(c!7bJc z>zS#yhv4KF(I>)Q(Uze;NpRu2+vb1Nq>_t*WOZDOuYUJbdxY=;QR>0I|-KVSLEQ?kA;(8ctt-9>}yYZ7jse>Hy>N*VG7 z2QbJt#8W%ww5);v(=!8wwR6WO8_oyi!^e8Loy5P$I3ivDCwNLg2AZbn>cF2~NXp+m zgM5lWmz)NiOoyCF%hC84K&;`t#Eq3vRM4qmY0R$_Z70F!>yX|@Kv}+ zV1EOcrTZsv3xcq4tx3A+Zu?!^27c;ZsIBIL)6LM$(l=mjv_mlGk)6&|$5`#{9WiqG zR9_#c-xx+5J^3D)c)XUZV_ZHLm8;xnHi4=+VU@1CZ2hiRm>9|oNnPBt8YMcPvaVf) zMp6+IZ)u{ScMvn#caAN(b(biyz!(tzoc!sw9`lmStYQUZ^%Q5*+wclFzR$%6~^_N{7cihbbmp}*|e8P#vK_10iKw9 zY>Q@r5RN9NP!gfk5Nx zL}3W5Td)UrYR%GQgA=8rJmce67#4-m6xq}B*C+tNdRG`lN}qtm!4djW%n|rG?X-a- z_B(<+_*%|KYEKB)$!G#BoeuhCe9{Khg)Nf|%Q4DDe!Ph@CgxMJyBKf(JZk$j*t}wD zYl{8$^PXzIfBOdjoJtuT)OSE?^|eLuUgum73Eu|=!M|6#FB^%~pE8i9;$paE>j_D< zFzSu=A_FqI(qVmM=NU++$ibH`72*L>l?;9NK$Cq3s6-^4q}Yvi^Dgs$H?PySOiZ_gIC*hwQzEj!8 z`||pA7dn!Gr3|EWw@Hbg2JE>);JLa^)${vTxF)9@E^1NCuP-3L4O5fM0=m;u86xoF z!|H|?mnXR|={{zSBXR|^O_$4vZoH$BOQZ*PV$IrQgEQqj-;`PlcAU@KNfCk@whEwk z8n?t-T6pLIVf!k+h&u^j;8yOx?e>Rk7PEIR=T8>5s6~!s(^bcqcXfI~?S>=bk4*nJ z<}ExcMmb1E{%sn>P&G;{XfIW9DO;WM+LH(-m`OUCM{}4@fQOuhL(2n~0G4)6KTRfX zPSfbpupsa3pW7tk2CM!VP8zvF#&|T4(=efz-MXV#!8f0~<5_+=(3YG2-Y1-_-haBQ zqZm7Wl=S6f0nABC#LFlqE=pj$X*{-ksir*xPm7bQ{g(h}l@o5%|4W`Qs_ z$cYV{AXU2(#;HZc`*Bru&FWMwIpqt`y_XjQ=C4}sl_5|(F}E(iIL@YTiBCviBdr<) zFt`Q>wT2!Q*Ae9=4M4H{GvwyMZ;u5LQ2MYs;l*Y5$+K9fTbWcSeJ;?Hd%I?cx@VvE z(t*)B^=HiEdtUW*?K(GoIkpDWEC_UTK}o~8+Fqn*J2JkgkKg4e_A@gcm+8mBjBZ zH`zy!`%UU))O-a_+eFwepuB6V??9 zsG##9XbGs5He3?1r$DuK=Gn%jp|X6ziIk|b2|jU)w()PjkKCOiB-Y#z#qsRfQwab=6LwgRI72x zR*C}y)PQX*TzbGy!)I&%o(|B}Qn^LdhV@5NUWY%Z$UiL;v>Nu*Em*d&eh!6c&wdSO zFdt8{Oa~#jDnKd`X>cI~YncJO248tekH-4GM+$-|XDs~)y~V7dY*Wa4pgkb7Y?~OH zs{4`P?rNSo&=M+)yGSh2V%v>%2)atVIf%D-`m&%#`iN8{=zeXv@T*$G)((TD^1g4x z_A95tfR+#PQl(^`NXAda-hB^W`)@emQ){0bQ&f4TpQPnz+z~Hk#MR*D4J7!6>Z@N^ zd8?ngcc`|0frPN+qT^c|a}$k|U+UN#g{xr(RbFZGGWM&Te|bHI_4(TC&)S%kVrk}$ z@ni%4XH0b_t)Pn2B;8t^cx!W&LRUwFpoScKoln z{D1)cN9ELZ*=QD$Mew6YTbxl+*24yyW~)JPXtBLB9jt&syeqO{kPU*tkTNLCN^1sh zR$|colB;~M5PmU~?1N4JCVj?y*bYs(S-6_>t24;Qo>?U_)1SsM}N?+BpdKbVoYp&KPR(MYVXsxi2arI>aBmj5T4D9tOrqAv< zWKqHqYjZV)p3K^9SC*Rq&dhT#{(;0PRG1FqjNhG{P1XoY=x;y;suuM;CL+M7TRa8_ zJdAM>jIDLEilYXUFQU|ezgPlWe2@wR4X-R$?kaq3GZX7*-ZORe3b~+hD zdPrNodJ8^*wG=!C_~K7KENSr-n*}UJ&4kFe>zyvTIeG~fOy_eh7jtzf_7CjLedf>K zobHM$Zi)Y>1*{XooTNrrt&GWL9+8M@X3BYAl3VH99>liKAw2jaNScCy;_gI8cNwGn zDd-_8eL0n>Sgk9*D(gM^>)iZ{UL0A7@a>y9dxqFJB&^K^lE6E^(Ev9t zl@~Zo?2JpjXP}7l_7E1xk%u03yuAdQUAE|qN5RQdER5zlJd(y|^tIWl3E zU0sW%OF^G8_qi_}URjs@jCl!s4s37Q-ee$JjM*r;v=r7&nZE-YRyJx1bdZfuyR zja2}^z3fnQ%o9+I+mA(rM@Ku(CaENeA1@uhg1Eb{CfaCDoYOJ3!fAKc_D#-Tl_t$v zZJov({Zle3KzTViU?#l5GE}v{=I(J_Q!+S4@t*LbhY-wZ;eFd;`m10#pn2y5^4>!I zm7ugu#i9#bPMEa_@hloN&bkj(8ls_T#ts1aQJD-a;&7Ot{_%qaIY7Y=qXMh#P{D<4 z03JD=vNwlQR|s;Y{4}Pg#vcY=TMK@nJwXOO*Qs&=SPI^qM^h#0A<}qs&irj}-HJ_p z+wfd4CBA(HnNJ9QP;?mV+=BsI`9aIw)?V?qpRu5SqTLwvt53v);Dyyp-AQSnUYR6s(O(aev~d zOd~?3ZlQH1pbWHlL)Z$lUgI6GyA-$(Uv2O5N87pg;wwzzpZ7}w5=FA%tfiWp;|{vo zl;?dMI0WTi=ZMo5oRO-lbwXe}7%!QB3j!HcZYIp?e5YNY+-DyTb={on$ikL6`JMU_0?3g+?iphuMR-ieES3SFPu;?&OOJh46 zwS`NHDEKfA(BGtk>Q$k=!WPr3qn;L_+RvbSYjC`Xdgt@>u=RE=jcWyh$oyghLpFat z>`YfhX>i}9BP?K?xN(o>=Qbi)hEB~&o@OfeKKyjf*CN&L!+5MiUsQqpxRzvpr^w%k z=Cf>BVVtjK1#V7Swh@=dhZba$@yv2od9%e+HE0JGCEJ|!)f{zVdi_9_{a8Vz@rh*> zw$W!P84KEB!#YPg{hOdgx#=AR3XkFEhzXu^(|vf3KaFs7waLhHVF6G;XO z5)Vye#eP_%rA_5I-~PV8>L|*5Rz}QB$qLKZZzbdZ&P(ewexuobQ{iVt$UwAW{e61@ zikfaJ5>U+?XE20SotO4up&$$WlKF;1BgG- zCHM3eX)*VOFCB^*URdqb+Y;AB3Vc}Cwtxw3#!9?3U<0|D!zqd@JWH)2#D=FkAh8C8 zYdYb4hqSMgYBnT;t<0coZ{MS>ec{2%vaHrSlRA|TF%Z?FoK2BY($&Sl>86o}-oKb` zV@swTs3d&2a;3~z%E(2wEvGXYs94Z8KjCDj&j^!{V;rAxT5#*SFrs z7?W=GnGzR|@Hy)vP@lJS!h3B8v(W4H5FnXK2<0Z6zocT5IR$OYlBle!z_k-{b?J#%M4g zj|(rAq{@spNm6Px%B#k7CdfjfKCPr}yo?^VjTLAr`H~!}>7_CIlDKhgQ-n0148w%f zc&}J^5X<65P;b3xL_E5elRRui(fL(%%2jKFnbJz=bc|`&Jo){-!E5XfN{EOQY*m#enb#K_ z*4+qeOfqRQ!%dU``#IcwF$N^}TdRn&s2JEX_OS^-w`+M3yjt2aB+I(eJ; zlD@zw`mdv52u;nK!T|Mksw@DsMDX^?(vFs5Y0hlB+=S+sKe>A?}aO@lHI zap2)>77lE33>0cFRt|8*2g)fvz@%OfMO*J-z&o>8lh+!4psD*abDTKWIf2BL?Le{r zxbbYwg}AF7hq~_rsm@~g?!$641wx1bl=?^qJCi7IY7rO)U{}q$xF&%P!?rW1fI*Rb zt9PSQH@6+WkG13c_c;coqabiV)A2_u>0lEg_;*8Ss0Z;eYUkmL8i& zw{YxY#s{<1C3g_OwS&ScE;}(K(p24hu$)~Z&MA|jG-Jx{r?02%!?_n{2<3u+a zD_my32y?BYv&s3POe`C{RyiRm2x0mN9w^=jO!>*!9P;P@Zi_Q<$tAHMOPRx>N|TTX zP~a!N9Ch2;HP|CC-_?oP>mVG>Rtj%u-w89J0ih$f4d}0)P~44su0HG_de@V_B;}7G zfd@D^=eqZG586d3o5P%G;WFYAjh12&)(DMNtv_V?VYM$he*1C1JYfxb8&_KAZ~#zB ztYwJmt@d)|5C{pjEkXhSb?^5lQ>BzgBg%DTpW-&P0KgCn4eap*eVIkXpXZw@(>{n0 zc;Slv<7SS^(s1#p@94^zrkq#%6{QUJd7)e3_vlJ5YbuKLJ0OwszCNdIn_j8(1y(7OZ(hR<7q# zgjpciUrUV(=-|+v2(;Uozyd?2s4nLVoCo2p_&{Q$p#U5pMfimq5~+V6?LrOT#y?*7fhjqU;Z`0PK*~NKpN=QRnyuvc69Bv~aRPG! z2XD3IaYPqIrbg;HH(S7sgu5RHrs4#X(gT!YotG5nEVZtbemgglR@B2sfJeDn&~ zg1DPhI1nHlT6(Lswza)F85{xY(ay~_JA4>}?)*x%q_IQ9gUvvn%Nb?sljJ`4Vd)no z(0iQ&KbXL}DHnjW@6@2o-Gauw2ysl{C74dsLS}SZOSb5q0$eafi~#iF4xx^biC1KE zZS3cZdoWKtMS)fKC<@Zu_H#aQpEP^eXDx2@MRDDUCgvP*!2kj^=~e$kfJP5@KcJF7 zpX+;&cd69sB;A4;b>rOq+UthHc26Zw^xJ_SHK_)mg=skGp!?l_eGT_huEF7$M7^~B}Nw# za0=EqCsnZ$MKsYWSyb}c@eT6jc4fl5$6V)oi5*&P4FEEK+r1}y}9X^5^$g+cm{EHgm zo~H${4kV=QxCDxQ0A^LeZx&XjM@@u zQRF|&Pd47eOLy z^ER`<0}@wkJ64Wnb;~Us`Yub%gpAtT@5+Zm0AP*5e1uF19eHY1GdeM;&~5Kqz{pb@ z0HlMc5*|;^)f^?qtlzIpV1Ji=<={up`StdS;mtc!e>5bx_KZqjSOAN=SJ9E9!ae|4 zuPLh&HUe3HwS{m1R4xvZzH$`z1}zg+ZVBC7tS~)k0?O(i0tJfk-{nm}PIqNP_~bS7(xmm8n1z)Y9t~ zjz!XF$wpnoE8{;#C563RIAP^?K+EwzigFg5t!P4Ins)aOP>I+~UD^9Cs@q%gq)1*r z!CaFpj{qcdFGn&RGx3ppPW#SuGS0Yj-=%HEQi}>fYzD6t&Y5c@Zh6_Cr!X^WyJ=}r zO<&C)KcfPt>_A5DxU9?R1t4HJ>tfONmWab}ZyC)|`j6R{CH zFaRy05{8cSBLWcZAX-~bUMZ<=hZGebl4cB2T?t%*~`grejU2ocd1&zloVp6uJh0BSAVy6uPNuR3H=c1bA+ zB#iUm6bQW^k%V0+Pqf!cMe=(15TAJgfR|KV(d~_03CEdvpVF4N5jy-#3us3$O^*Zg zxA}mj2}2LK5y}}yyIoM3`JcH#VY|UN%2%X^>AdVDLcjWPmB(Hm0IHk5zE-gi7~SFY zRG|4D^hq}=^(W4P%BIA{T@Zm!a1!=MKx#~K=l*T+!WUl+0XlK{f&MCuvmeeAfvF!7 z&ust-3@($9duC$0)Wty3dn`6C?VxAp4@WEj;CeeE?G}s$#WNu}c&Lj}5J`Flf6MLz ze{NThrv>EAh{7LS5_xzUPR7Wk*hunq!4R>m++QDCF#zFddVHY26$}CER-Nhl zknyulGa1mx9v#MUX-!ob^j7^R1aNAjhZ*dP9S55lb0h$?>gH~x^95s0KbCSlqD$6i z?m4^x4PNRBSGmVH`uUwr?(0nG$)`DEHUf_^oR1E29mIAtgVIhqB;zqSWl_F z%w=P}!W`sR+YHVFE72o;L|~l~I1o7Pc0aZnJ`Q`Tc}*B}8oj5I(*HtHLpLgB$^;4<-H|>5QWPGj<_7fIH;k z)3umoiZGSu=&tTwsG48M#NwzStA!%pw-%f1(N2jVS&{4VO~XMU7!E+ zm0Jkqc~=OD)hKWMjAe!ZZwmEPeAsmG&1Sf#v+LXyXzoyV8mX#(;*4&ZH03TD={@6i z$qVAs@;{NKMR2n3eb&C&#YFWm-J82i)tBJm5}|3eyp#bbkhp#mzZ96F*%c7YH9rpZ z*g`p8omb#v)#*v_PK5wi1(JLL8w7&M1Km&df1cYAfPRvZGO)Fg-j2glfi*p;Hq+ZW z{==r%F`+a*r(vp1hpU;)*CUJt@8w18DXFQ`P`)M=nQP@2!>Yp@8h!Lc75RTJAt}w< z=Sl!Y%j19v5G5DaE7iD=)y#~jdJUG2l#0NUz~h}Akg=r^;T=ju-}?&GF76P*>1d{( zluSE=g*N%^<_m7#dOdInP%SCCa}CA=z*nv!j9b>5%EFipjX3A30e{{JeQ*OX+?}u} zYAumLUt2T!{CvFKcQ%k~BDimH@u}|}G^)yE7mP=kdk+HoqDZA;%5-qubXOoc0Jjn7 z)%Bi@`ncuQqV_7ChReGtIY=FmdseACHZab}s-=aV3U|P6j-Qn98i)hoYtLmMNv1^! zkBWT|0u{g5y6VtgyROuvofyZ4VNB@#tgm_DvGCiSK_`N^QxaUwgSZwsTNtZ->VlX% zP3L4(qTd#DA0Nqd#W7@iaU@KN=&ns*znS_sj4;7;{hK*Lgf>48&R zb7sJycyD@hMdt^&J+?WNGAN+|I%%zq!>5l-f!B{S*nBv@MkGl``fzI+i2;p?qHrHw zWB$<^GmcZ^9)-Mv{VasV$3hysx! zRqKO^opv})Z#QN6t3QF@vq0im_(1W#%BwsBs=+nO=5Z|Ngq%zr&qhgP>wiMR+P%^B zwp>N#q@!{{bav3xaM&IJ&?3S+w2TY+p!weSVtR=5bSMi!SEA=sC)v@|SFgTx%kCh8 zhc#aq9XevCYm*<_@t^4U z0m6l9;IVf9Z*(&8|KOen417JaLj*p)MXIk9WLf_CMo%t&b;oLS3tUN!ortsy?{{7E zS9Tz8kC6fBxJt;XaZQvDg=!7etNq3nA-l7TkALvNgQnC6#5Bp9Ri?xNpRkRDqk-@{ zR^Pti6wI_{qutwekj#bAl%>x_2nQ^TLeVKm!*R)6e|_zsw~7e`FCEbajBJb~UGa9= z1v@rx0uz)Jn{n>Zv^`?WU8ViaL8q+mPjDGr4YZ!}G`246TGB3Luv|Vd!lpN#S$vM_@mNpqOMf`Kcz#j?6 zX9AlbX16zhgCll)ztS(=RoCKQsVMDh}M6QD^4b=|3Qg`VeYuHnuo|?#@V1;!z#&1 zW}_e+SvOg-FU;unfcn#z&REJ#AJdCA!|rb-ikcTW4RW8k$T5iTcDI+K>ff(bd^I>u z022s?4AaqH;EMC0ik;N+4OZG_m@Zi`A`GFN4o0K5fGyH$;GtHO%*U?%&;D#Axr+w_ zTrne8+c%Vg*BhFQPs$%* zNROYvWQ}X8t6FV7>5PTU8qYA^7oJ`djEo2#I0`)GAr_o)pJV}10%nmRx|O%f=LTDG zTM;D9`?^11k908JPFowH_Kb@r;%|@pk?cAC$htJ_!0{~u0NE^k&r#{PNtq-xzaP;B zq^3*ZO`o4@0O4Xa&{pZ;(i?mt%1pjdh`Dg*0Y={bMS9SB5>385Z&`&rLN!w*fJ@~E=kC7>U7D7&W zbf=8AmdUqx=9M2%MO8aIiiiVfcw43r)Z8eBkFe+?9PKggs##KDMWUlIJhGDB$&csg~hjAr0+W0BYRLM}!( zE$UERa+U`2RV5EB&Q+ePM?1Ye8-{px8aOiwPb%hgC9-DQO`%?x`(nNuI_d%C&V#bV z4+cFEY!4_fs{A{)U(vGKV-LL?AW+rrq~TaBBw(vkb$2)kiEm<{>EQL*5A@4wwV%m)HO_GM zxh8xg=u=w8sQ$q_REGYI_Y0uV|99oJ$h!7cemC+WdltP?1*dyoy)%zjIS6NTFW6n& z7yn*7^-GQ~*8jH{ARGbM%N48YYtY3|mQxATmsieszX6ZCGfDv9?M)7}3oG#nsUb9O zRdgu5!iNRS3E}uP$FTn{$Mh(o zFQjsbLl9V-8J4rpTuMY7ekq7k*YVGZ^ruzePtoKMYDt@?S6yWY8P?x!%K@JmKdY%T z-Iss5B=V6n{w%uBzB8KkwqC3oo-;KsmDRE)k3NNwEVZt*3e`p^0Cm`%=(mAAR*=O= z^VpHaK;M&qgHpdWOW`J6>O>{WBf#36NCgoVz;0rJ7IYRtM1gpgx(%wLKVeMqjm}nm zI0-{oeHuJ~@X(ToS!lu!LM0aU5jZ}BBI90}#~a~=1{8yfkHIncQ}YPA@KNgoQYRpbvYqkUlvDBi!4 z)IXph*ONQD)np+ublrD)1qde_6z(x{Z^E8TOKASo2|T@u<-b5(DE)OhCkaZ~w3rZp z@;OjB!nE1MkbZ*iDFeGGAQ1tcsH@Om;)~6Z!Dq5+jI`NLjJE)o49atKmODr(MiN zYi^Dw0{fNv)`p{yBD);<#aKQOSF_$paJzDZw12{_ZggLBnet5MeRYq2G0k=9|MlLy z@=IyI-yEmlUgUFR1$v>Lf1*-Y{sV(0%Rm}jSY2p(rw2=IzP0f^ z4Bdzz4T6G5cf*JQN=tW#ASK;Hiy&dqE!`m?Idq2zNT+mn!~6I-=lx#iT<<^deSRFc zX7;o9+H0@9*1hgq)|H4fgU~Ljj=`>rMu(E(Q&ct2Gh4HK*S2AyvK6+2e{rQ^Zi4x` zGND*&^O-^j(Z!Jvz3pr=yAy#B43JSd260LxC!@mn*QlEsNa(DoISSk8Aby!Eht@l- zChV02)%6v#q?2=)&yOSH%o6ivR+4jgtQ`o7<}utMMYO1=LPB;WQ)koYuL;}@sJ;z3 zy}h^&3#w`?Da_&Wqywco=PM`vo^_{_!3&(8)2}}=OAQVYbecQq+v!;dlL~)HYMBc$%hS1-td7Am*1C3I99Y^X| zm14&CaG_)>w`E^3>uMq@?>+f*TCPI4=sD;AH@^^$oHL{yVt&}I=kvqE^6KXR;8Mgu9zxE++>yG3Wcw7$Ma@IGGHk-jQ)vhhmro%&!B zhMnMlLeNf4{SEww>QjZ|R|+9QG&W|aY_8)G3L)w;?>N!^PiV0noTIXGn|&vV$3vpy z54qLa2HhvnfP17aDt4P*^anbUV$R%-Y-$012+dV+0HUZ;J;`q+eL&eAH zHNDj&AXivmul`Srih325{?=`)PKzFe5UB<~g}MJkDv2&>7$blS6{;^U| z9P43WwrLBVzC+2Fe#hF#<`YI+6M(XvN!)cHrTOlI()!o2_W)Qb0Kl*a?J2*Vrwd=8!=AM3b zWy)_Oe>`6sR>`3sw?B~121M9T13z>`TFQSMm0(8$^@xcP!8Szxuv_gNOW&W&u;CX1 zgC5d5^nea2 zb$c26-(^?nmC45^n!RP^m8P!*qc(lmc0J;#u)wQHhJqB4sodse4SAvsHNS6$Q*qJ!Z|cA-!L zrF{8SU#P)aXyPe}I(8%BV1O5!qCABavLrDc(zrsIC@pqL$Gs-~c zt`XlDGe~r)vTtcLIc-q3m48BQH5xKD_!!aNE1vuLI@q+pLRVDplH>fCh4Lom^^rw$ zbJh!jfLBxrQ7UC22?dFs;~8~(XF{yDnMgE#PgCSulT2(ZQ`+y4C-vkqE4yPKA@@wx zg7DScn~aYQ{*mY!=0D)ASxcDeVVAnly>$c`hFeK>G`x+fL?U=4EWyrBfdkW5d?FeN}# z%l1PnHSf~vDAi*y2W31CWX_vSOc{aZ*6{bkpOiqjn_<4oGsPh`L0Dikm(}T?*_B|N zX2@NqJB*lcal6#puV}sPJ&6t%rP4R7QCmKF9wX?fUsjOfF_ru0V?Qs^hO^&7S3Vwl z@<)K;;=Q6M&7m89EpX+*?3h|!yl`*0wb8jMRNmFrPF0AIlGC&fD>2vZqt7(HwSsQy ze&o(>7K=O0-lWWwrFG~%`kZEu%~DLRoBq9zsYSn@-=P(k&8S_7xtg22iE(I+HSE=l zKU%=_#3tMbQM%;~@HsMawK3{%a|vLZnUHDP9%5B&ZKXZm*&t}pfMxO}cn!ok#eWDbBL;;nyaLNwA69(QPQMKPA$CvYXT zt_SAtby!r>-%5Xe>%TKg=oZiZ&b^dI%$)9)?VTB7K6KcLt#V+3k*I&l``cTRVlOH6 zz6vhL0WDvcc$X{OpteCnzfkyO#lG5)C5lJu4Gge&&5SD|4qej-TU{`4T-%CH3Xjd z;Mh&x3np4yyO>k`D*iJUK(WZ49C^NI91db%9iG;_yeKPJ@0H_o z!NI}txjTCJ#_~q7kSe3mY^s54I#cS$0gd)wbR_isrn#9*mhJLag5clx>x9gWHe?rU zvm;r5Q?4}?FMUny{>@CE0HCJ9K{W7+dyl+dY{Ft!Qly-|E@AfMKVu(qPf_7-97Cs- zgKnw0u1ZBo%gHl4vUj^VoG}#w9$b@yJ(2r>v#Cz1><-3OHVXp>8Y#==S5_cljva8% z^BE~(ZJ*REoO{+101=B)b;hdf>Cb!@&08ZeCD_pLd05vr60M(k_b%o8#{X3R{!(sq zC-1A*kUz8hxyFO)q4cAm>)H~5OALTmgWh3y+sF3lj*TH1Yt{6!XI*~H>xLu`f1Xbz zeUB^Fx_R2_j|2h-4*18{ts=ZC4k6oSfdQYJ;A6}%p7%{{sY$=T2mo zU6i}i-fbH!1-{z+#w3%Q~KPf}RGTL&8@ z{zEe?chdO0SnM=!!Cdxv>{ca?Q=t4|vi6-07x)iVA&xxf+rB61i32OG_KdlOJ=` z9p>-M9S3)kOV%B*gL$2pY3ZB75c6P0?V%MSG{x<(;D0dkFyA+>ny4sxh<%1KhOC4>KX;Z^2dhvu_ic z=Se@H(nXft&CL{|KvHCtC;qbRR!UHwooq@Yl|eV?v@uW(^`vn49uym$poE$fc5WyzM=$0Q~a(byvgIm^YZAps%} zjq2*alHWGTrBW$PVdLE=I>ilVFZ0Hzy#9O|JF&G2&K;P&&k!p~3ZZ&`&&AzsWS za^2|C3Sh3UiPjw!1?HN9!pwA5`N2*qgD4hX6d{zL}WqK)a(^1q}7S_^UTJn}--fPSv-;v)8F| zC%%Me%3qr3nb2m27jdcO%T9f%d&9gO1IcftTtXzNL2j~^R%d?A9M#bM-oaKp5vWlI zI>u*LoNJ)>2-h>&Y@E3N$~+5KpOa7C$L!Bw&Fc#sgN?>_+9Rez&?~S4l;q(N)Ngjg z9BUXmrgIl4lP>S80@RFKJe{72G?yzb{>Tj>x%`v4WGw2+DBs6pbJe@jFl51010&tn z=ambYoy>z%))>TA*r<@HQx$9kHui|YXP2|gu<3~e97s0J?-YVa``rU+Z7rf&sGAXF zKD$&w>^tb*E{z7fL#&=wNG(B3EDBDtUeE{PC%;n!-%9j1K}zl=dgP8JhfX2`(A7{U z1Va5>g>8H@EIPG;>TaUzSk!h%% zwuj4Z@bg=~tsAagQevb@&{Y9o_9(8w*5>!Wozstl)Riu7UBt$3|6)hYG8WBRPm7k7 z5@v1WVDb+Ra;><-KoB}`ClZJ--+2cRPb_jRpe^_w5A^Nq2(;*OL&f?Udp+{**{&N1 z%4Agi#0?uFNf#hHU_%G&m`);KsA!*YV6MaNX`!|h&Gh{f1sSQc>tEp^ho>C#DAqf` zy=wR4nK_kc)(&Txmvt+a+0IV9_?L|k9M{{1S`}SLCJ1n2=i5>7~1g0KC8siiN}REH&paz%K9jg%2{-TOcl!)zK+^dy@s7P zFE#TGw|X7RHg+v6O6)AMt!rf>f6i&wCpYm{H#YpHiRHi@9Z79{35CU ze)VR5Mxg1((Wwo6>ek+swilPvn-4JLA^ z;!JO;Gl!>TI~3nG??kzIe&?d7FG0#XYJV%qy9%pk4{psvGXzHr$4$|O*O$U}=2;D5$4 zlG_wp@&q7rrtDMYcY#})2Wo*+Bp&(mcAf}@+bRvvxPjxLqZP8bjq~_6w21Rk6Af5o z|4JIcz8h~3tg zUqfAIBTq_p*MiqCP#Q%6GY4@ZVNC^ldg74zdhO#%osideJKgdTBheHmJPiCG9wGFL zOW(Kd!a!`e`eZJf$};Je1 z*xmor6*;(a667Ft?nfp0BdK;YLY{Q4$-R!LG+C1f&IfYeazYwS={M-<#HRcynQ>RR zWE)&l0Lgr$(>c1;I61#v>mtGaQSFJm+G-|Dw0tVB>A2;qFxaaP8=7Ymcn{`lZ~wxn zXVfTauOU?Sw~bvzWlt1482Wa0D+TGK-ML)hiGieQ%KS5qZ5qGZMcPR2NdpOdz2CW3{~6~xdOX!r zTxgtPV^JUR@PNa@m}*mq;FUz#@dpm~Yigf1<5x^qIe4q~74z7TKI?QQ!3*as4Or}- zx2N=exu|D#kA)-l+ye|wR;37kWzaybcmH;P|BrPsPD=+pCXl?J)aZb)n6Nk(UR`W` zD_flt^dFyjHIz#^P^v~bbyIp0#J%B%{oX?PaJndgLW~NU&218=%MIhWxR~t`Zrj=9X1{{5rqU_T|sjo5m9wk8O|RW?E$T8}tqPM2ou(3}eiW?;7z4 zahx%Bq%`JFR6~OSqz$OrhlN>-=b&i!66!4e-g8Wzy0?^2=!R8QlR!aH+%pyYBIKS&%|P?6h+nwmqN6o3wBJ?*6=G_hp<6yWDU0lD##Qz;Dm@ zlEL!B0OJpahhq8fs|w)_LV>L*`+h>`r@Y;|!9R0YbJEAe4>xaTpNVPzor5@o5dK#p zkjB7M@(^cIg1sgl{n~FH?q}pUusuJaH;bHjGZ<@6aVVkQ(oODkR`CsAQPYPF+NFMN zd1C*rx9*fuP5w*&)KoDQe5N3DKBXDC(ff2W*=o1wD!bnow+6D0J;{TK-cM{EeOtU4=QMv#_# zbNr(fImsqtTjG@{iXAVu;eR4lM3Znxjj{~I4M zR37+r4ZYx$fkDgVF78S^Is(gIdD9l1xrU(m`QoRmDJc(weuHwUTX#8TEX0yaqbnkP zkp|3b`x$QT9JPl}WJ+D2x$ zdBpcFsqS_qaC2?i9lGZI`7o0KonvV;>m9uWtqKY|{iS4xbJ~|N6^BQ^qN; zy80nNAR=?OHz7Z&Xw9`?80dE57pVxu6`w@7`SS$N*4A;~p1_bhusk&qv$TM_er2S3 zKV|VE=glY6a-!zZQl_FpAPub^8n?Mpg2a0Jvq|P<(x1Ck}xry-M_|Nh{Ax_ix-Y6w+p}ggr?hj=X5P+8@e5M>)m3b(f zm%M6_fg$BedHkeAhsE`ez3w3I6RI>&7B%3yLL6+ZQiqVfX(9F1jfUUo&-U%6r?BF~ z;C-Ms#ET(jt;HZBw32 zy6(B)SQ9q5>P}=UiDWhjy%=~s_P0b%(XzB2eGX?mmAClMUu*g;Rr$MgCxs=weON=ioADi!iM7J0jokc9ABDa)_aGkP~xZjSr6LUPP68667- z2%aF-=-cJYZwz2y84`T1mR9u8#{DtpSCT_@&_U)oX&wwX-3?Hv)zGKFb!B4`7gUO{ zS`CX~^uoZFYs<1Hj;l4&aQ|ZI%Ou1I4y%)_(kotPUMu)Kmrb7P*(7vqtLtv@ zad(9LRYy-v`MxC?*2*;wg>vyRlS^dXkttH{q4koe$hWoC!Ic2QYKxkv~kt(D)a$EWpUH)$PQ2 z*NwF1!Usq6Ihw$s+xIwyp{s+Dbu*iuf`NeC?Pq*v7)|61mHiO1ESWk?_cKr|Jcd{k zjhJG;6SQAY>{5*~;XHUo#ZnX2!uDyzge@bL0exsy(~j2}&T9U7Q9?zWb^6!SZDSe- zSZ8@ZHI|=%nsK0zP+n+>*n(z;=#KnfJN0FPN7cgPB{C#WBTd`#nQCU~Mp+*Tx(1eq;~2MP2F_fFH5yH{yp_cW^7Vwz5^yJLg?Zy2DZw3S`~vq7*LOD zSikr%`x|d2d=vAs7XYOiW2si@y@0M^ksO721Hts0xCSC{XEv)%CJ!TJlpuFIz4Die_oIHRBHb$ofz2=>p}(xJ~e}go<*n* zs)?TSDj~d_&pBQ;0DGF~v35AHD=f(KjU?+NiEN~ysLdNNfZd5dlXWy=vFpSC(NKza zH%}iQXpsw^$xBt;#OxNZeE-a37##T!-orjCEIlc>-f=HIHC-awys3s5$i}w!hkTbC zfi4tue(g&Zz7WdRU4}_-+F0RjLNjhsvM9uMP#|n9<4j-yL#D7#9x~-qEWGT50je<; z(G?ekwzA;EDDS~{b;QHHthqr2{!)-&=J+CnQf{C$WV+l|9~juzyh7G&eAiy)4oYvG zJ-$QXM-TR#b*8Yz^Y|<<39p+oa83`0jr)t_)yPM^Sv?^9hXcoa_#O=CT2R59CZ6vD zmu|hEwKQN{wf~9!`7R9EzJq)NY1mK=3B0~s3`f>j z8h6C3)1-oI^+xe!gs%=rigQrB5`a#O!)dmfX` zI5mI;>d8knAen6bNrBiOnUf}oA$9qXhk()lh z&5}TE0lDvQi05|aUw!j|Y554JoYII||6ckVH~i=G4BrE@PTd{$QK^8lcRL%I?s8;) zqKhX9aoN^yt1*z65C-oJCmZg6R^8*6o@L{HPfO^^v7$(kH6z#5n+R*%9@ z98~h5s@>yz^_L@JzE8sKRaPwtff`cAnN@10v0^Ml=tj+P5QnMaD%U|ir=nUkNuy4bI6xUbxaK?lm72Ck`k5m8Wh#sy5*^&de^d~poy_8O`}aoO(}4V?`kT!+ zq(?UFzvRfUl^XvY0`nd0J#Bo~bWmsn=SJbS^APU~KJ!GJA(q|L`Kws@{Oxn?(ZTCf z$73ooN=6=Y*xkvF4LT%E%hGodHhd!)A`-el?|@;cTeS7EgSSTMhRVR#RdWDmD@qVb#x^;j!#sUL2m@k{67a1~Q9T}?*8kF~X; zukA)&c1ZnH{N!54B75q~{i@y))ihMTtNb>oK5&cb?8($1kSBN5dW|5sl_sJeMMy?PZOA=1p*QA0XKK-Alem zu0KiP-v8$RK>=GiHC=-wrOQ6(ghiSQK7%UGbr9qxGWz^+=mbq{ZiSIS)OooK+kyk{MLNK0PEqE(VWG-fLyq z^+WX;BqNXqX?qdXd3DlT+=KAORp1SZ?{AsAAH!9cAe5agsq+hK0ELsyOVH!wd3Ec&QNmplb&n2ove)dJi1E49|YA= z`P2ti#tFdxJn+>Z4t&`9+Nn555+6`-Kg&7IphNiCi-Gy`+g)@pIRw0Y6QB5EwQ#!j z8Nty2DIwrz2;7LHX4{J^AD|91wbl=KafDr`dgw6o&P(v!$C7xy%Q7q&(EpAelbYH) zZegAZ*R^Ri#_*iL(0c2SdBYCjj*nd-z6N4~7_%s+FR2qq7b1tF`@cg=oUW)+=nG5x zqZyhyzuW}bWe9heC%U{`aPf)M{tcCoNp@KSfjs(D$)9cwWYghUmD-JXVIDt|^Z5O` za>Vqi<@;G)lE>7kkQDv=^A?R|fQT=mEW9T(@bK_Zo7nV zGO>@zC1;3xtPG!xjX|p&jrfc4UrjOCn-$2ocOq>~gT_x>e0@dSHeRoGZwN?hJsEDz zXca>SkXc#tgi^`781#fI;TPmR@pvh7lS*jg#k=sXEt&w-puaUZa&Byca!|hav*C(i z7}zKakQRpKHj4pj){NGk-P-+5&|~zi?wb#G&>P;%r6MQhd-OdJkITl5;s zVboBGzv@yL06cM++&gLpCqIl>a&|px-8H@9xRY8qnjE9$6z^JV+h zxvDIqYFC!J@wv~LWK-6fY!IvqKF)(WceHr4_Z^Eyy>Witw92LP6GEryQc>O|z^FjJ~#-iU4H`o1G*%ETW+}ZKkr9jd=;Oz;?6e z!`J=Q(UqW+7>G@5VDFaeixAAMNVL$l|EsBVC?jY#KWHp`v=|6w6)>vyLX6f$G{#kF zyK{YKW(}*81u_Q6SkdU%?I_Y+a|;Wby><^W1Z)CzsJ^U~pEO5Hp>y9Wg+KkG&h4G+ z;Gt2WnC#U$R)P6Nv)(jbO8}Edp^OTL82Na?P7okF{%XGnGX-E?EqAk|c_ZqGjz}c) zKDrSb*rQo<%zPz*58j)8wwDi&o6@RBM26OdY{8fTxtb!UC&4N zt<5HqHNGa4IU?yhA~#)Bhf=?65EN!;8t_7wAR(m$w3QmVNhu#EHpMzjXw}DG*HI zX%GrBdXingaF@yX~GY@uq9~)gpb?kn*!d zi2I{#WP%{=2k&_7S8;;CByb9fKij&RNcar89*l^l3> zpMDxcF9a!M*km?bgrtgAmFyGa%sZ2zs`YKtJ%Ekzq33E~k5{OFK6tz~B3^j;=&?Jm zG4H@9lNV)zOd+KQtFi8hu8vH-+DR+V01Cxf;r}>oiL}3hMBEz>4ko*bQ=zX>e&}E@ z@fkk@axSR5A zE{&X6Gv4}{YL=sPG}=-j_V($Rk9POPxO@h`G1F|k$`}YHq_i`0s%OaGf}|zUXi#)k zHhL_D!t7j&`#K4PhwInGNY2fdCCLKyJdfB3*$^^;7mvd=HjnBa)0&l2o^2_UrXUE$ zYhKDwC;4}55xba+g%mDQ(!G?KgylP+#m-`zYeE?$d~sCLoluC9f>8t|M>lO9m)Ev1 z4ar@^uv{ua_1KOG<~IXg@rf3DDy~S4*^0N}PPO~47}RPVE;LKLu@B7f#c5Eya@3A% zf}M~8L@5{QVC-1~I_AfsIQUbfTIXS*+9UjBqcXn!fPw-Jwe@fDk=2 zdfbZjV~$n2YImJn{b%sg#KNLEhfwt2(D$AJqYU}kN9c%E+YKJFZr2HIxWITR^ZST6 z<615Wllwj%)$R8_pzX)hWNgyIh5NF?t?KM9&?hum8W-qPuG^gtOjeh30tZiAEPy1Rb-;_xHQJdwk4EM4+e^{J5W6+p9?t%3{Naw+Q-c=4*EBs|AgmECa_ty9_9s^J?PWA@Oyj117 zYc+q136%dvw=KX%JiHlJZ1bk>h}jSswlEJkUK?$a2(e6mp4sPpLWh#9%N_IDrL53! zg(0N)t|etdChCRP^0s@aAn<*|f{2+h@g;?pvuT!ojnM833r(B! zZ~jkS5!0Mc^NF(=4bxvDb`PwF-GeyvyB~tKj<;P!2~bhG)@c16RE=o1`5}f6YATK$ zDKUbD5ARv*>nNI5IpK79Xb=LYutV4a+qlWy4Z|!Wf*GG^9F{;649W& zj~ge(oSsX2+|t85j@B6VJ&=6cdQvl*OyTc(t|A(U+trQiH+;@xiR}FyQ1m@-6_S!d@#KsUZiXsAt}LP8Da5<{iF@a`6;2Ey>DvF)C{n{Tkrhz)<0zX zmimZo^<<$PEpYWZhqI;9B zTJ!e;{8j{0A85dd@~XP!@9;i zBI{Yj0Y<+JNE&Q-^`tndr9&dgu+b5kE0E#pK6or@$vXLVuyc#`*Fz?57e8fNhd?ur z?5C6`+^c<0GoB>8kP&iN@-!5(Je2L%lLiPi zU;ZwIoLxB#Z@Q-x72OkuMsPI;K&0!75Mp`;&aNWWkmNBO)RK0HOgjIETSqjcFsrHN zDkj!xy*Tn5A8GoMid(ll>+|U?>#eDYt%7L2+6OR1okEb=z8C$%B-rKVt`Ze(OI07E zFdXa=gMJKvYumqgUGylhPyucp?wsfetj#(rzynu{$n0=;s_~3(z2%K)7s_a zD(uIg`S>{UdPOm+v6%7SH4))xCe**@$*Y+%q<7!#E*L6oX?*Svwg2W;K@E9YAzclIZarLKH(AXI`R?vctUWWJGO>D#ZW+Va;hqSyKdCUiuqM)!J13;Ol zuSvm+>=7<=eqEMw_s28P9J{HM5C2%>o1qXNE8ib^asX~9JICkSo9dqruLwO5*n@nw z6J@iV*!NYFXXQ^s8ehss_EZ%8`Yq(**^X$Cr+3X#TyA*M#w@;l!P)e2;GL>TVd9T= zK?^t@{sR1u_-PHxsaB$_r`hW}4&^b4mzO+j9lvPgcGeU}iT#d)$(tdXFt>#W3p5a1 zwbJ-=3&(};H+I48>o)>JzhVgV*R^bdr(-++dxA;sm>6?m%A(I-1`Vi{po1^fkurBX zq9o#X$}vEfi_b^mI0~$$0SCkcGbt`mRw4Z3e5)d1XVpxy&W&WaXkhBAr#tc2qd|$aWnd=ay)H4a zpTwN~8eo{nxn8z93Zo^C?UrgBBF2hHeW|EtxA|iY4VCfM-}{z6h)yS^@$DLI-y;R1 z6?EithlK~TyrRjOwfqG3p_CdQ?mvuw=alV~v-~H6kQf)iNI-t|7q$w)6iGLRDbzGJ=PDg2Ck8wNIN z?hH$pLv2~5XXNUO)cmTm=c%^3EGaXueIbq~)!>4rwfIm|t^vpc2W9YY)_o&<)cI|d z&apgYA>$D>R!#pZUFR|1Y}ww5FyO%ACJcX^k`Hr`@A9hm|?y~60}WFG3X@NWo@b{j03`WGJ~Pr zi&A0P4GyxybNK3^^pGTZ`p03#Q`IRQ_Fo4jPoaq zCoZWi-SFI|c&Gbsbcpp1nq_%R|C99wseC4N z&4Is9VlBKEo05&3jXpnjxC2US`~1pNN@}65WKI59(j1;W%Dw^fQRI!EhvthFo#qYN zN9j;8bSU(7!(+P70ci1B70~rAOO)C+)Y%;& z1j)h$C%QG%Z?>1Cd)M;4B;;)}ioDQdi?8fS0mCjYMH~8Es2C11K32p6K+YdWj91O9 zGLec2ymg7)#Rc!OD?zabgg>!!YkR>lfl5JZ%?WU;`N1;SX*897x)+4w?S`+{o$!86 z9WX@Iu1_4jO;`FnNItZ8eS7ha6U^tRD#ts7`TzuVUtmJ%9x@6IjLnd0LO;;=+)2d# zxHjgJJv^VX%l(zB=6JlokSFVZ-m`Of!&_?EIF5#)f5(*uM4yG(*3g^+05LQg=u37T ze5rk52?KIgoR2d&WAhREO84bkQ*pClfEW93CO|$!PfJ(inC);%N>lP80Lpu;zZPh3@?GqH7r+cw8*|ocJ3?GR{&u zx(`Dn^PnlN0F?j%J`39Ys#T&QK5W>2M8C^GpvrN^9z=PXE7IZ<;kAR}=B)B%k zObYA?4R7{rI)pD*0HljSr#%FTic6Nu=c)8TZQ~|^(w*TS(j(z`wh)|7GPdLBul8tg zHToD-7Sa2p@W7|67q>ycb6y;z@%(v0t?)0Xoq4YI2RY#9;$M=bL2M)M6ZqyPf1QP$ zJH`{!gD2cP`_E~g8vuBNuVXa?PAdcjDnBv-#6|cMp?Y-i{@Z|)P?jVXFp^4#At@V0 zfoIkQ0fZc%Mq|iNNcYD82wWpeaG}MUD9iIES|k~34fD_SsBeW)h!p8{NDj+h!)1L| z$IEAP(i3R)Q>hK%9xmh_HGi4VA?1RU1htZbCJ`K=EL1UyfME> z>)w-YYnkTKRc@>g0nST`TbYo|WgW~@0%WXgHyahn#So-$q~+je+okFiF|qq&?oT^Q zLxtxzZ@G1teE*gXF$xobQoMWKLQoPTXaO(ZqeVD>77o;iPXwcFFcN9B{+$v-J6&C2 z_;>Eq0$~>uvopu{Q0~B}{Ao`76NLUvSGg{_*e@}N<#TMcd%NV9HvKi!HQTVvwRDSx z@pkj0b5gqtcK=t-M0CdG^y0mVR;_|CQGM6<12rMPR+Q2iK2TO`O}3jP4Ret~T*Sbx zrw9t2p~+zI(r9bDEP`&VI^Q;hV)UeVX7TF-ZFra`qi>9-1r7lbi$)7yyUi@J{DZD{1!jB( zrXnCURvn-}hY}EifH;W+>RrG9j|WwIGPNYTUd~h{Z!2RU_13Ef?hFyl#$pQaGG3+| zLTBoq(u^M9xbcXfPh{bnl;_nsK=!|lsK)t5#4?p=5+nAIX%0-CacWU*=l56-Wma}i z>!kS;!1bJA^BC_rcvywhu&d)ldzFjDh=5h9&WIy7NvlKLWu^AAMz5l(qZjTJt|uNC z@@RYr2ahTRPN8NzI@uJ`98>mS5mut@GP3d>M zxti=OyADe3LSbeZ-LpPohQMqg($5nc9`K&Wiht=_vLD6nAiR#XL+lvTwXQg3$^sQOAmm`_~2PCD#Nh#9a9n$P)N}M z?sy;j`E&GApK{s~WZX4t9-BC9e)S%<5(rv{d1Dm%PuPWHX_yNGXGj3l94sHD zuWIDPSeYRX(Ay_phtmIK-_mXTI4S-`gmNiz7vc8&X~;*FkLRb>G5&BgLf5j{3Z(EV zCfS<+mG_pkWd$nDF>ouw*f8!S&fs?H>DiWSSxe>dUzgvQ7o?mQzd~*)#u^5YN0c_+ z@7mfz9FlJS!d)0}ccX)|;xGzyPGw}$IMPTGU+x}ZK$3(0dAS=GeV9V|{!tM3R}r=$ zA^7g~mxDwqn$97fyaSp)v!_b{RopAA8tBBDuS8MUP7}>` zK8@fV^$6KeLIY>He^OPZk49|ThkLy&><@EV1ukt53lV1+uzm@kYy(^?c&^Y$4Dj&~S?7a>o zdl$pzo&Bf+lP=;&GjvhpN2}0G*CLtk8Af7;Co|Ev5&!3cJc3y8&xcL*n0pC^c>+)D zW@6s{=r<=4S?GtRMT6dqu-`y=z$0E`UwMjZH`;&6NoNROy9|c_-S9q(+x?}+K(U}c zgHxzH{W64}$OQ#2>I*5}hk@2e8Xp|U2HrB!%3%-%Z^IXun1AsR2dd*twa3F_>z4%3 znvQ=J(AK29+I3074#knl=&W%vCG*YWvaC}c5Ji>TkajdQy)>F70QeJe@AvO#A`?Eb zzq*V1j>{3C3I&<<5&n<_XN7>!fVmvaYn+^S#u*`NPK^mzON5-V9_ngX(O{3VXe>zT zE`h?MN+NV1zY&QaBgXhZ?U}&C2OH1{PmZtO&~uO^^tWEAnL3Ye-C0!0zgR;rc}qaN z(n?}AF@UBW&l3KC@7eW1WQgq!55X}JmJNEF+>4^SHYe=lnNX_>X5yg0i;dSh-p?A& z<@q@ci)v>iXe-di-9EMvPbsa8T7mOK;6?5qC_$84nN;78xh3PoHBoye?$F1De>ufg* zNyANNTV7t>@m}Uwe8)U=*NwFjTM-5re|49RR81sMufAS5QHry~Zvbh9RJ*Eg?=p22 zGbw`*0UnndG$bhNT{_i+~5B|lW1d+76-DuLWHu%xa$Q8V|0Q=_-% zM%xJ|Thgl^xlc#=e!~0N6>+)?d{ml$uXbZm5EQ}gPdCv3?lU^`esQ$Y$QPAT88kJ= z?T=?O>TGO72UuRw8sbZ=_a=j=EDJ_BaOBinR6Oq@`$KCezL2pS0L?!=|^m#?^>mFkf(oa zweAcM3&Wh|bi7~9v5Et`D67Nx%!zACa350*r)-{~BR*Z5JU}x;@JZO0>@9jhI^E72 zx0+gGIb>)KS_ZgWr*WKP@GBaiI*Y1jQx|7ngLs6t#wVdHnU0VA?uu_0A|P1YSFi zZKDdtJKz5xP;aaXSacnJe|T&nPdTVV6JPGpjXfvnYtE$HTlOIncFoTpp2F-Ljg>Mo zX+*w10iCE8{T^(PSf`UgfKo6_cmclsNoD$Gg#`{`SwEb*=AIFz$cuy~4pIB30)43} z(H7PBUw(8||9BJ))vdGtu4qEu*RmyRPAVK)Sm`kdP3N?vhrz z1f&s=knTQohjfQD(%m3PNOyN5EuH7xdf(6Y#`yLh$8ZeJ-dA61uDRya!9?Di`XMF9 zokd$gnr`#jnOqc3G_IuLm5_6etN14S8&IM^az3TDR6$Srjv^66ce%fM~Up!u>wESlFAo9?{;E|C0f%TsOL*PgbG z65VLKX*V5?@Kii|-q!4Zxy0%XU@(@A_Pb5KerKlXivj+!;s-^2KuHPX$8FGZ0)Cho zz~OU&p1YKvm%SL!E`h;$rLq=9-w&QraN8F8s)JIhW;!h>0PEa)>5RdFyE~7gDSIo7 zmlqqI<0eks8Y+fx^zw}dD3RP;9771Q7GcMt-8~+qyyf3KR^=L?*iKJGa-BmPcHS7E zyi5e?4@s_HhN%Aj0>%R5q~FvTG4DR=2`O+WR7RK(xX5hKR`%YD)%EcR+h5`3bQ z%CtMGo1Z^@jH8dVGZ=C=a`>ILa9`iNPv;3g(Fs?5xH}8F2k&vLvG#mIFEg@S^9P`b z9*qy66=ICD6a7(k;41ZWo{FVYFWFq@kD*khgUkJIMM8wLN$CSeV~BIVOb(WU7+Sdu zzP$`mlFFz1W$=ZBA=N7^3*BuDZDY z-0w}%XZ&9LhFmrggOOh0dt`>8-1Lob@-6(DM}~f9#NxsyTLgc?zf0R%^ zZc(jaa*n?uDo7+>MVo5?(YiYS4uK-{)XF&F2s{y}$zgb61At$5Aw1~Mn$|syc-M(& z*h%_*m8!Q|%7gp1mEX{m`=)u7Br+4h0ik%y?=d9IaFeU};jMPhP*1u)v@!ZyRstatOw;-}N_m#Be1hRbzI^h6R`AILJlU?+H zIo1U$H#}N9#!Z@J+V~Lu1Gza|C+BY8rhQuv>a^%djhOc6g&UgNe!T)4CZ_-|8%L= zY+F%XaTzb^4Ly)8+xoWc$Zz4>bnCMvg9*$lWWnQ$Ki=y|zpI9;aWH(ZUFt21-kA1A z6=~X(NNwG$PXIhkOrN?rTc~ivEK5x%j?sF59NLpsc&Pa5V(&c)pS&(F5nQ4lSMF`i zo`1j3HPP>eIOU$daM>ped4EIr;|Cy$vHb%CBk~LOS%6OetP__>5z+PhvXrDzc5RG@ z)XQnoj@P7+!Bp#H+}HS;QEoYrWrk5E+e(gjE?}5U%+L1j)fqN>TYK?*4`Ofjh9EE| zSuIT$d-1|gx7Zq)@nD~YMQrqPShuLjF>Xz3tK7yW(Qvu<^t#Mp6l(@?9{Ohl4y*a< zwflR-V2sy-QV2a14ii&EqqUJV;$-L!9F&W|tYIVVhBs-ZquM$w+pTY*0jAJzvgpCtAsGGhDp#G#lU?4rqE2(^$N6{U#ij?E=bm$3U#7iartlhZmI8nNcCBV&TfVWIB-*{5s<#x{>Ocop@2@GSC@rWcZUOABxm34 z>q=zT5iZL>-3c@x{BLsFkq8u4%WcPp1LiG2O4LhT6nXJExs4`y%uEgUZ1P?`x4$?d z08|=>vS}FlS|(lJ#_W#Dd6VSK(k^q18ndnu>1#?!_Kbb&L|X3BWc%c+E6DM=QI7Zx z$*=TL#wkKj0&sj)Zb2;#?b%LIVQ<#nJ0uVEB&!~j3VQO#fi&c#2DeW)2&Zx_?7OxU zKuqOU9|UOsIZiB4_m+QZ>4_k;+xCvd7bb0LTcTBa|9ZI63eY%k3`lj7ray=v;I#yMzu2NNMp>&507%UHHWik>dff$#Ela0vO4gpDK&Mm3 zG}D9{e0d;%^_ZL?##(+oKLwz9*chs9`JwCOB23-Xfg(m*FdVwBixj9WJl!J#Cbb13iNRaan z&%e?+m@#8r1#3E|F{3Is(M78H>QxaXv2ts?zDTOKeVWr^`rFqv8pJ!Wa|l%B?~2AQ zx11%QRQ;MItJZxfQ}1F@TW@LD&DE*eXs!ByD;wnhhWR*TnCebUj7_$<+$TV{S;Q(k z8?IL&#;!W0wuvj5d-mcwv0TVpg-m&QCgBMApvpQptvYg~5VHD6ZzfM8o$z$OB27y8 z)2L{MS@&_TDsb_8%i^Y^EJ>oKsGZ}?kV6srUH%?VF9#c`E~n3NAnq$Au$~}q<^$VTz zCETY1lt=cAMr;ZZi5L}!TUT>-oGbufBFENVvXtfgV7es8R4LL@qJTs2p>o4Q;h0rN zok!4$T;*Y#2@cUp)6m2CLyoz7M327d=i>^*koMhK!yC(ObK25BDeK(%Z>Dc)?r$)upHgU)!5p1JvzeBWIcN1P%o{MH#i_reXa4` zp&xXh5~8Ic?`Pwax@h%x>V1D&#&8Zd-gm7E+StAQc(O|_XX`Sy{Apj-^E~6g<*u!G zvAPR0QA?yjaC!(gtgk%b@sXMH^F?$y^2?l2ni}cxP#ni7?%^5Y=Yj(6 zy$FCSuJ;{SIt&4x-T>K#86eUumAX~u`O_BwDEe41l6zwIKP~CRu^F%*=~5idjo%8G zCF_q5EJh4;5r7VQqrzqlt*uUFhm@J&xWV*PT@x+BVtV+ZP&^{rK{Kh4?mIhL z^ zwb`}XJ0iUVIKA6@iIKZB7x>(ORqe^GME0D3d0d5Umz-FOs>2UHX)LC!tkT&9~_pYL0#4ro-p?)RsP6-uJ5g6W!W2Iv<=R zKkCAWQ$+)%PW*T?#~E<2vxf1Qy7be@vtJ-~9xJJFsG zQm)(O2JgTLxL~1sO~Cz*KA!YF#`Lg?IDb8%K+gTNpX}lRM?8cz`1M>(V!-f1-RtDV zO4J}_D#5~(4f&kJ&nveTdFh$f&p)0%H&+&>7%zP|m~N?fabVPFfZTaIH^K=kSOe!B zDDXCiv{?H5(LMQ{&7dZj1_P_Y^~H}ycdESbe6{rl;0k28jI?_l&o*Mz4>l2pqa-*# zGiUFU|2m%|jj7}Qy{}7>!}E85T1?-c@S4sT*OIDzMcG@u!QipEA7&LQ67W0!(4e+o~y!&swf?yrW z3l|l^jC5b4z?!KCUUeKltAOhPlNOi3edJVlAJeWW=_rrgv0?aX*Cs--9GBMjkgatC4&4inf(ar^@C#kKt}9Cw(rYnEWmU(k zW0}Wi@@K5&DvnlSYd1xxq%m!Tb>|Z1yWlMBPLM`rNeHs(^=l0Ihgi?mS2KuDp#)dp zA@lWdhDEOF41d;A<=~dxGk(qhl-u#n%!J;Z(xos8y*nLwWlG-i-Jl|?SGx7U&ZT^5 zthnVtV}Xej!irzCK~_pSI$RXg-L2Q~CfjYoX9P;RqgdB{R%e&iSl-0oHjR0H{{ZVc zQ~aNg{}v`Ah4J^}uUS$Gt_F4ze)k&0r;qb6%qiTM&RVVOkXV0B&|a!-k#O)D)8RW1 zW~acXd)WaRo(Ki z&&ere8xa7jYKyzZ#QmF!RUzxFB8#y)-=Pt*2bc;#NphZRy6&>wAF3ZOqhDKwMY4i& zB&CPimCwzbf~o0Ami^t1aQj+p6K*3=Y&cb}UMjqGuT`$ido$anQ*%;rbySXg@&gW# z9pG?Teka@+OMnYji}P;N9A`M-FtOcLn}WR+lt5|>qJF)+!}UpX*aQa(GPhNK zfwn)%lmxmNYun`>`zh7Ek5oYA-&bQhY&Tpk{K6;}JE4-4we7(@Emg628a)TprM_ef zO(EJ<5z54C*NI!u@cQ4L2lntyoh&j6kO8dIg$m_{a6orU{I)63Y0&Xp@B?URE~8&k zHcGtGxhfVZ9gz@!M!Q(~Y5rcIL*UE7Na!Dr1Q(rl?%EXG^g6|4DJ0gBIpM^C!Q-K# zLj7mJRXHmJFe-nj)|0hY%i(!X!4F8*Y^ZAH*9J5{xTR~5bI+F(jx2I|@0b!si-)Jy zs!x*Kvu4s+Hb)5PYo?D&-WQH$Sc&vamuq`$Hs_SJ8(P&qEht&>%(X1pd~ zMW-XUmIh#w)`4@Qxg#uAbM6tPbp7i73r4X5+36+ot1c_f^rLG-o9HKA%a7|l9868? zFZH?E%Pj7LsU9Z%WoVsT@Qi#)T|So}w(DPWzE>QI{{6YY`Wp3~Vt-V$^2$y+@W|j)L+NxrO9GtB~#vP@pP0W`0|NQs=&%asn4mf3e zXd4D9%%9}~!E3_*e!P(YS1N!-5V&vkP<-%t`F}n+SpblU+)1p)5eEBz6xTqREj-9x z+eh~^*#Gl;=zo9DQpJ(>spJ0=ZyP%qCx>XB%sXws&_LbF|NT5N!5L8aX#MXWYL9Ha zQTX>AInUw7R-RV>kGF&DDlCq$N>G}T5&%6C9xDi8`u~-V+v|V;sVfSzJaht%^0eLb z;PDVM<^xu0`M^?s!ifH>wRfio077pWz6JhO(7?T;zy{7Ar2j{JZV%*)LfWa{%YY&$ z|KBr_9RS-Pz{b7Pv#216x4I7mpcycIz+iBDzT*d@Nmd?GLn{vKH7I!M6UP4Uuf|0{ z+Vf*W-g0-P{oNvH8E|qlrFSl>3#wziE8W2>+rctS_@-DLv-zexAO<|c{*Bl-AMlIr zD1NyXB)GxYncO$QgnQWZ1L^l$aO!Tw^@=ANV;Xp+5 z_xJujpsvXUzx{#faTeE3I}UJDkw5e6!}N-VswC&&BSp#rMKT289G1p@d>ti zX2N}#<%))`YV{*4{88TmzK3=AI$KV^^4%Cl?lL^3rQ;hG)AlJCRztYo zn@b)O*0nNZldd}*$m10cA~ zLToOc0`E8^USa{fI%=%wW}$)WNqn*_@M}NXf9!5!ZwM&`r%k{zH8hXt9})i)gCaIc z?2lv@OV6N-@MSf6j8L!0`lX~e*}-nOlBa+MR!3x_$28DKu0WqOGb{4qd-fGC>M4~~)hyjd2zcjza4Z+uy*+hgWn=Sd zM`5f*@L{>~$-qcAqH{4{Wr(@@g>*k-ngBpN_Y>f*Onq_AKzgVnEZ6@EMAi2Wv>i z@GqaTM9)Z0R5vr=UG6@IWK2zNV0c_T`JC-s*4UDZPW93}`Eat2WAT}aXyeYljXtQJSHSu4onXf~0{0Puv5@ja@?E=j`iKK8ER(Ai-5` zUpzdW-}Wx*WYHlue%M*9;F!Yb6}G1+CDHTzqk#A($tL-tV~eNVp&&(E&ZdUU=A+Ah z=dm%o0Fu<96>{gp(nS0EncZrW>oep((V-m}yYH={2751!FrZIsJ3>otfw2R2J-^u=}Hn4oqwIA-4PdZ_v?s-8ci~ zeJ{xa>N32(ePA;qqJI?*JN+6N%g2D+uW`fmyhHvt5M^7KE~zCLTz_5+O-Xqw7>46< zvy?!pin*j(f-!>5>l@}`yJbRAU+tL26;3HqtE>hkQG)n7P4aw2OlyAX!S1ZG0-ed% zhzIPizoy0}fyyU&al73P3`fL49vD0y_P83z)zi<1v*=q>SkUN9`C+7WiLJ-x!|AH8 zkjOs$nRYNw(6iYZlpfg^n|^$?pOs#Q*XT8LX;ZGO9(Lwe$p6`>uk83d7miomX!?e1 zGpm+N`J|9fjQj0&{n}{HlO6B_-Nm*WNafWx}(P> zIw$}ciQ%4OD#E^<-)_}{C3;l- zEmIjk9s(4c&Atr*x$Z|l5|9DfJK3^)Fl+)(egRqHm@Qk;IhY@-i5%D zk>_FH)>~nP__;C9K}r_>%%^Sj(fPl_n$5rCr zjJ$$Zde21cr@#$WuwVfW*2zy}%p)juC|IwLg(!u`LDWj|3Vi7-4RH8XktjP>5fStp zeXg`<{ym)(0HCX}=>)9*cMm-qjT}HA7uUoR+B97%wfLac#!kQ7>bp9$*YTyD8AmAlCaEZ$s-e%G)^lv5KYenw*g(NOs=@h2ET<7Ck!mI@rSw%?bzg* zK*~D}0QlsLPi=KW7~WrS*b+G0{u~v1FHSEL>tT3NOalvGQo39n1$`ztR~X%7MXsDy3A8S!r-t>@kS2`{;vP*_`gUE_UTM+uPyS`DgFP%wE`LrL)h^*&=VW zp$LlVujKvNMIB2xEB7H6)bi5V&52CupVq(h9Y6rZsfh*TJu7GWnhM6$uLKCsfMl!( zA)Ext(_>Ll+~(uTXF$Lu3YgMR3f{v&T5R~`rv2XgN!lIe{R*Ij84ch}5>3eB0y|C> z-BqtwWw4sFP(f0YmhsZd*X^_{gxS@Y? zXl-!`OloHQ1^Q26YsVS08u>YClnytpGth%9nqle8E_*MFfGnT zn;3~#s;D?`dt>a!B6DqOq?q7~`-xDo_bO=96gAR@=rwmtJe}HL`F3AUz`fs6ZhzA= zZ#D`9;Q6=287Y~k>N?33F9IOuZwH;iiky{|`;zEkHTbPf#HoL%09&FMggd0U9C^L6 zW5j`bZkTBA(K}x^K{lU>B~~x;HX4Y52n{#IN~!yThmhr~RvM!rX9Y{i_E*S2r%mXn z`AA@`DTd~N4r@s58ziqe|NS2m^CDrTFKE>g^bxIIVN$FeA9uX*2Ug1b{I4H3w;y@C z+de4p8wyvm1(<=LiJ1BonEXpkVQH7bvA1x1;jINJ?WioX3oiuq!?Od$lOO=ri#7nD z|8Ak}%CmF&eD_y)g^3$r0HG_Hu#Sg738O;(tP@yhpMJhcaVJZrg)i2hCG{_L8vHWz zrEDw5!jLdkxPkhMxG|z$)<}x=fT|H{5h>mFcnwS zeZy^?{`8i0KIsGzXwiWmvp=~{fCB6&&AUzR?)JcZxx!&CJ*ja&nuqHc+iAnhTk2wF zbjZd;C;(nhQ?g$BHu>DlEpt9&FKfKgi(iwO6gFZ+YOZgSEHWIsJOj`ZEOa(b+nj|6 zEnk)kHFS=)M5}@P*I`E#V6L_COX_KCu>Q;!dyD6MuY60}{uWp(<%{_Z!-#nGeextg07r2Zd#5 z!Qxw@Cr$`I095px;qPYdi{WaUH>`+<@}&GWrTGd^kj2t51+qyE?mT{iIYOd|Ip^#O z;ioJwk<&O^SM>vBRW1R>DdQQjj}BAq#3EDmt7HaPy$Sg{awCUTN9^6*ZZ}K6nr=hL zwSOBv)DC3)AW(InjK4eG^UOm(DquA$i<}+)7-FdiGO0iEhLB>-{B5izvQ`)5fqhHY zOJhRUfX;*dlfV2LYNR;0iGA&yUu1Ze%}d-|!VL!qg?V1?a~>GCym8XZUhGXZ$C`3289p2hh$UlJk!G2%ek zVcFIgsHFbJmg;VU{|B86p}Kl5s~zi%2JPqJv2D7+uGG0gABQF^TY!Jcg2&*h)^1Dx zB?3pa6SYt9L*mtYPov~9I4s41LzCvr!2a|>TzM6n{&>ldvPwdCV zt#O!1JuGOWT+#MLSMt@m0^jprPpm+;KAJYS196sNU1{f({=G+V;iU2gB0H$!tfKA>q46Po?@NNyKYTVVkjrEOlFOqX$M@Cgg6;P@e4fi%fP z@mUDaXL$b7J?`Llna=v8dC70ZPUOB%BaTh;q?Daze%MKvFeoPf=LriQ)+;rKEsAe; zJ%d>F@#E~t!!Rs`}nR{bv6yJ*=NKJ+CGDgIR~J=HV}h5*Ntb; zV4IW7o+Yoe>-GQ=e~%4i!$SKBYm@sn$d$p(b$)U+ACe{e$3Y7PmwA&7v0%jm`)@UV zI_Id2qeu_omwzT+Z(f>QTEP2?xqvmt5BnwILYANT(SVCQ{7dQYN7IP@+kaNs5J?D> z{Z4IP0!o89pibc9^5hXZNE2j=EqU?M^|)DRaoxKEUgC!@+_zIKCD9epnq|>>)xNJj zVNA#)#m?Uab^~%#`RA>K>`!4P@jLr83p{sHHkur?pFl6jJ3+8??Z>>us{)6gC_uEC zoX8@L;MI3y4gPDL^=gg!=#l`Ur}9BVDI#l=T$`*od99@8v8PEt+@tVtB2jrr&j?LN6t#p*1 z;LgtJ%n?nZF$j%Eo5U_(-m&o7_m1Y_r{{&Gxf25h{8)h8?nog!TN{)YvbH`Vl!dgp zQ$0HMQKs&P!Q-^ee20Ko^Nv#K#7@O(pF$*a<5&>>I@3XD8E=kEOs?Hqa{K6d_<@HbJZ^?wSz8602<-5xAea5<#ep1 z#K^J4t(kYr5mo_AW|{1j#0xYPqgHEt(T zySA1oF$4D`#~3rdb1(n_x0((wY=yu|J6RI4Zp^qpcIe;-iXmN2~S zRNk_M{E%C?$G%za*(6HqK<2bg1tL?AdV!$ANO(y}2DQ$&WMjEx8n?HGa2yG1@l$>L zhCJ+t#hiK;AH5l0s&p@Ak%ldnkvLDlCl9j(Whu<|V9q9xGezSWhw3RZC#zyolo-o5 zv>yPXo)1 zsJ{qA_?IFH-IP9&y(^>cWR+otKqpUQ0vO7eVyrEek)$729y}m`*1oJPY8pJ^1#J^E zQTU4(FD1B5`tz?yfJFra|LGf)_6;W-psVBGE=E|yaRik`+?#Ri&ezPO{WjS$IJ%qYck zrXGAzeTEt>X@<_Tlx((^ED>yPoL!2_4~)Uvi;>Yytv>&OQeK-Y{ArAl^8NN>yZRfgs}lzAqW5cxJ@4g zz%@XjT&iyIgWza>oCNf=4Cs_8otCiLb+e@Ms978y+#=vCH!{4KzZE@3y!K2=Wgvxj zAt=@#Lk5QIYzV5ySSN`A%I9qKuIXWnABJBZ1Z%^1T{KW3rjO%qi%ZVJq9xIht%*OqRE}S~jV_dC z_QnDDftaARDLc5w;i~*YG!T`h7tZ+0F{|90>?tfbS$9R&x;8d!u zsb`jRc{Z7{CIk$kL7r5)sUEABCpE`a)s&V^?GX*8?quGN_lm>sn7 z6#HRdLlbecNrss$c zu)6Pk2DJ@&g>JzIfd;|gP=t9XpE{ZIJKiFFLKYBsTiN2^S8_4QJ z%zTw3Yleg*(rH*R`neRYYI5Va`OcxfaAI#XVTmnM&)N>F4^ter(H z(^m!?weCyDs2<%xB6Nk~3A8n*9}j?Hw3UX|7TzcTqH)(6{mc~J8B7|w>A$|_1;lxWN8}D8{d_~9##5-M zOyPs;X`+P&utMar2gL^E`~gwv)mUx6N>QlY;`kZ54PNxGcjzL`eV7o=J=+=<9e7}k zZt-*N%+otd6&3ZpKZ;91Ovu@PV2w35l4=ZscR=_o@TH0j;R-t<3DY)}hC>gDICp?B zYytX}#gDdaB8Lm;#7;NJiRNfKc3eydGY?NeQfl*jLtQ zOLUojmC^mNx-qQ=@)!@XMd3ji5wuwVKopukPS`jZ(MD=6@%tDIV<^sG4XhegBd!h* z7ByX&HR3@%WFUKk<2C#|hhp8zlSTW3m^%;}2lQu`08j&pcB6E#Fo0k{&fl)g-!?YO zg#{aKO@@Hy)gK*^a21`gJLfO*e`o`kkx=@3C)A^iXuBg7se|JcV|+!MBC7_w@}NFmg~3y!Eu_J zOO(A90WNHTPsBZi)Z}HVd3eWNvNQTmKzNFzlPy zE}!SchBnEorm8s&h$=i~Au_!ui$T4RdH!Vrixr#x98}IUZk>Q<{Y2@tZhnJn7S;ok zc7iejoi)N-n*k7jl5h1#R<6orT5hA}D>%9CIHze0;?b805uI>*t21I>{ce3wftXEn z3@1#iNRYq@?nW0AH(7Xqp0pRPPFR9%`Ar7UxljDuDH+-R`U_Y`NWprYUQSUAHPwa` ziE{x;jS7`aXs6>Ar_=i!_pl<=V8KWKyZbYzX58;QS_NdXL zOs}TS#D{s=0Lm23yocRb;x@khZ0)X}VN{l4%iagg?LQ|dbJ^eAHP$>~PV+Gref>1} zhC*W5pys&upgj+}PBnw(Z`7Oo^z~osWK@51$_FUjfFzQrw7A}DIAH1)=!PkCMyUB8 zKg3q&I*+t`sk#T@nGEWe0>Tv-rv$j6Q@-esqYf-Ypi>+G*`%)96Y^}Vbs!|-rmkB& zPIss9ju)_ne^ZK)Ykjs-X|Z$ zj$U6dgnw1=nHg>p7M_)cc*aJZN`EE-PD@*%XJWOPw*IpqJLLJUS;gWCSmF3^zI6+A z<>8_w7f_-L=0q;ZI7bM5uZIo{ZOL7#pu@$Z-aq$(2&EP)tdJ3 z#8Tz$_`+{oEp;I*AUlaOTlB59UwI{&eXz5x)nvPoF^H7TmOte{w7#95gV}Kc1aS z+CjfPA&;IC}4@jNaf6av7rk;$0a1L>_}*7);rJbHK+x%_z_?~RJWc=oYq``TMR$Ms$)D3hNysl{sy`?3_{I?N~QW7Mi zKcal_C4{~Hxa?f;+RQia6O+Ie3@qlvZ3vZjns-u#2V!>NBLy9|8{YJnM(#<`SdDma zs^92x0m#Um=s&%vB8~i&X-VMlI6=pC^~YbzJ|G1SH)`~$O$PXVkljI; z^QO|ojjg>cFNlRee;$rhkPNqY8yFegk)6R{2g+GrPLnP1wc|BgYtDNNwx``^P@;)vNw2GWbR$4q zWV8{{*5!h;YVhmxLPyYr(MuS&{em0S!CcjNJe2z^N@qG_?RErByxI)$IGgc+LeC4{MF+4nDG^-#(oG(Qj8>Q~wz zHPesV&bj@WOwyIw`}Jj)wDekL;aYSW@W7v!iB6k8?IpPca*QpI1huw@d zy`LM}y@YiUfOv;S`gezK?zi5dJe*7ACDQzxYWiX>Ctkn(EQa}YrV)+US%g0Ge6|ev zw;SNT61$R|{`g+giw-dOUSp2p8k^_*yC~T&@O9`mu`(M4pda;(B1}*cZj~g-?!%Yi zbSzuui}zY)DdwzR1_ejInQX^)H|Ch1!=8V5)a&Zy1;)B>AJj>gO3}de6h|eBmuFSW z4T$b^EmvhbP~#R#_BY|pCO4=$`=bN>+KByeGDXj;4ZXl?Kz$@$f&hG_0qTkw#DQxQ zvMyr~8SUxqj|L9`@H>vfAyAV;G~X)Lj{KVGgICah``aLOOIi8o3*s+@Y{T$J-k>&h zBn%812y6Abs3QqlSP~(gbO7tuL8jMtk#c^&8%Ta9Q8Nt*>9J8zc0_cH%coMsF}PUg zCVd!cvQ6Rp_Mf|Ar{1uD_Pj1t3zS+1@+gXX&oP^)XYT-Q^A92 ze2gnCaaQ_+JNBr;d*1dzcSq_5iszg==aEQlcKh~}DtH#G!a+XzPD)qu6LTZ_l#j~y z7o`5^{@KSNc;LzdfUbOpjKM$~;2OA3|E3^I;mZr(T8&paOU;k$?I3(O^>=y6sCwW; zCr;=zD?S7E-X(JFCr@Gh4t=Q+O_Q;^qRK|W+7U4u#VOg;YD{pc#J20e;`y&3-3ZTU z+RPp!5EDR2-6got(HMbO3wn+-^l(6Rj_J5nO zUJQs{8_Z4U8j~}sIRRq#7rqF>n;j>e$+Fr z+hAfsY9%nsnolKwZ2qSXLSRp$)IjPR4O;}i>wAHCIfF|i&c(>j5CBfb-&S(y;u1`N zDzu6~9%-J$HM4w?HFeBL&xGq@9PykvITWRgDoDqZW( zhXzFf+w{?`BN_rYx<#bbsV0$+z^Fh0{`fOpUT|fAK~Du0n;cAlc<^H4XJOclz7Ifu zzwT%V*C~d=yNm=9d)IPS*S+*ErjO42O7y3G(v%lZzGo(gCB zEh|v?4~zn@kj75_`{j)11uq7&u8me6!wYGQ!A<4IODG{xt2$98BESi<|KI_ni5mJf z-%XWt*AQ+fLUY&`z6GS(g}wm9Dei$b8dr zH>zLkK{czWPO8TzUb@K8{GWU-`8AVV)k-3hDJP@)h`hV#320ZN zRjKw;YXo~$HdkOo-n16ke98o5gIr2dfHx*{nq=Ay%WC3YV{dQTtVb!@&1gG zu4Yz)-bpee8VpgCO`|Vl`^I;c2=NO4A;1o+73@9ClFpmf=s~{Aa{HX_P_oG5XmLO{ z?#)6G8kj!Fvuw)SG6D=b0x4yG5g@P#Q&h(fNX>YQ<}ULh0of@Bdc(>YA-Ptr8kj(3 zk$Z}Cs}7HXCqDVm7Saiq<8Aj-*o$sD?=J6!NHX=^kxXgE;I|LnJ;Vb(JPRU-KtK4o zEVsUYSziceFbT^c6hLBCLw9x>`Y32Dy9Ww*)1R=fzIPeVfCIRL$G0*%i+>9_fvaA2 z3<8MX7@d54yO566e`WEVNy(JIv5fNmk+cI{>2voUO9=L9ID^V6xL}{34KMA4*Y9_M zg?^He$ysQ?&E<>!>omDggMKI49S2pB>|tvVNs@Nhl~m}|fI``m zC@5!+=^!G;t&spIApu_?K?Ao?hiMPSUHHw}bss{lW8^9@gD*Xh?oyr((WXV4=Ey)2 zMRzAzi(PFfU_3{ZnfV8Y*Z#H%`vPjU1c{3D8`Kc z9u+b>ce<|}*+2Ef9a{m=A5@3lpKOq3{L{XRwW`i{l2ln|v zf9IPj&ukrw?cJyf0)dK2lWHY_$w2fF5{9E0f~e0}-ZtiaPu%%!U`0(gACL`xHw38d zg@I_Ub;fW2tiBtr?M1KYg*wHU(ckYDVtR4zRp6Munf*TW7(8{^?MM%%t(AS2dBbyM zOf{*Hb+g5Be4|Y zYs;*~0aqSitRk@JbNO;eF-C`yqA&%_2FKmUUKqRm(05PC_*RU+ROqMV?;0jjhLQip z+gpD{8TI|bd+3msl$H{tJ0zr2I#e0~Dd`j#x}>E+kP?*^k#3M~38g_wT1pT&+xxlK zd!BXvfOlMrA7GXvvZsZ8Bm&j*2??eN<{6y5UHfRrNzm$I_P`S?2x}OJRSFk z{-l4^jY}AAr_`|HB)xd(YHq(_Ib`g4@=*yrm4i{zb?rELpY*t5l4H7lhhOcLo}euG4|FMy{t&Ap7eL+{6L5iffmDW`6qSk0Iy6CS=KdiS%uB zfl?p{v;G~{?aTAcX0A46_y`1C@G&G)I}7zi#-L@!K2fP|z zyb?ct4D5u!0TOs&|5&*>L{-@cKv%6Wnw-{dTcs%=g>eS8d93P#i-j^KgIySP{;4O6 zrZ`};MS7LkZJ@5iU}@Bm8#+b#e7O5ZtsSBDDy{$Fyc&57{i$Zj0{NMbANOa9O~ZC( zpbVtFvGQax?zk^QOXQrAfNKGO{EL)b;;BmFi~1m$_uUB!ks+(ydr;dPN^hys_CZ)j zUKD@cJpY>oH~`9SjC~o;vVk&eoYKOog0Kfsf>rmNUwjXm{?&i)U)cArB6Li8*lO0+ zpjNK?I(}|K+Ln8Y6i;=L0C>NvcihZA^DK+MxdV__D+iKMwR}M@F`Z=fMijfq@1@k5 z(=?zAOh0BHS(aP%{d^xnI(+I->1jiMsHEO)8!}cS3cxsUqN~@|YNaOc8_!)jH1PE0Tr5{c7b4)$;J% zFhXQqp>mL5BF*1#it__MVw6ic4mWW~{$~sC$KLGkQdSIWM~LS;Lf_`uh73OBXD3KV z1Fc65{M&oh%FpJ$6W>gT7+yTa5l-zLyR9?ua&1;>?hO_Y5Y9uvRu0L`U}@?pOhXX& z`^6vnV>!P&oq}Dl2=EvneT^ZWFhZG+_qv)``;H2o^RQDkI#}^zbYR<2rfH*L$O@U! zn_U!sjQ}%UTTHwrGnxYSJ@uF~EyMU+;s%yveJ;vmvF=fOYeuNHmeMhTvS;jzzjnj0 z(*JXSuAH|jWdrFvBGWMr|CKoR=Fc4j>H#P~vuUT13g~J{#}7c zZ)rgOaX@f%n3a+2c#r%SxlmH3sT3V>%?30rJu+ayO_Bj73IK=mJlN#<1~&7C#8(RE z5=j(ruy+_%vL|o^llt?8v)tTY8wC_MH*imOt0kL!DqTKIjjDbkv@f16*slO(0%QTS zNiO4p7I~wu%Vvd$54s32ft4@G!`zPcHwmvYW?^uX5GC7b!QE6&VKaOE7T6icfl&mR zq3ooBummaKVY24=@3C_I?^wZ_6x6fsmrIg;KO0$22em)v)`DNu=+ZX7qyY&cnVi41 zJh|bShLoHroc7kqbGm$Ew5)(e$_v?4OCo5nd#JmOf(pb>!ep}eO6QX6*_5H<)p51qD?Q|Vu?kiW3^X4FcHpv;GtAUa_ zLp(_ecMM&%X>^9U7$u!%FP)A0jKkAynP}Yn&lEnDJECy1O08i@X!PG~vDH}B;&1Or zykDCeBTOHJ;qdj@i2BZF(TU1mhYtb$;CM~-Gsz`loySR{XC45!6h~DY?rjqj)W!*P z*7Dyx24-G!KM+VNxKqpu{vwd{g_$j6;J~Y}OpX_S5zQm&{;Z59tVMOTGt?55tao5qPDoeN?QNAGE?=C$=7jzX2#*` z+gl&P_h_tFuJ?}(B+Il|d+J+N?cCz4$i>$uT5gvKmA-s=?C`nil^`ZlrB!?~4@k)E zxUunFCryspf*F?(Qfrp)C9ew#WZTyA+=1&oJ$+$g-G8&OXQVgcjoWjqTi~^|v$YTp z@0AabX4bQZZ|5-5Mi(f~k2`dcV)^&N0Mf#%R|wDCJ7}l?JvZ=YHvDCq!<^)dy95Fl z{(WEx$EKDfTrrYd(s~{TBS9Doas#j@%bw2*MmJYPTD~PjZCwIDgaG7)+lwP^LuX0T z4wNmK4yR6US~q0{CD^df(jgB6zOH0|*)y>8@%fsgBugiNY zlduBVHI;cX^z8P3hC>0)&46?%Wkdu5cA?ktNdCbM4jVfIf9(?I+zZ6EGoC9M^mM~} z68?fk1JuEW>mOS5|Beeve`ay~ESbxx2#e=y^N1}nz2-c$;IzEJ)qS@GlWgAM!?2pD zZn=tbW)yHa#M((!ko!zra%Rz9|LuBCNli$K{eHXv8M%8!zdhb%Ub9!Y@CSB znd;1$zMOViXhqQq3%sP?>5pnr3&cmzKlc@f6=U-&bXd5Fzm5^qKwy1DEqojM-SsL5 zWiTMHbxN@27A5pgdh0v-&69MVn14DnA!BFABQxe*Q4I^15YslPLImIwc@=kvuj=V+yuE|2+sdfHdM(lXfhMkhOo|2-;4G zxJnC{=UVA*7QI$j^!bZhLqUQ-GbP~pMS?*3oMS7mt;vx6xGY{Y4X;N76#GLMJeOyI zVX4r84ef2it!*L)UO)1x>CnxG8y?et(xuJDcB_V8EfXpb)O&}%wRmAo3Fu4ze1PV+ zPuU*6QL5jQZFM30;>1|HOLwy`a&7b9`N~tg-uf7H^lbd*tngC{Mk6q>4a}@{K7@-MAV}idndVCsBv>rqJ1f_3xRnHfberAo zGv}99TQX00HzW-!5B>!HcR@*SFRZE|oUmJdYhnPQwDHy>ufMp5flJg?ii5`ngg|%V z)1lB7p3_JfW~c839X1q|d{+$%Jx>Xv8oPErew}JnZwR%Nt8y~GuHv8b(To%se05md z)}zB0hA|zEg%qQu(y85ijf)vW0eW@zJ+q;V^qh@!jN(y_uTs-!l#_qbaPs;~>p%Zp zTgdgj7Re}y6P46G$TOXJ8G1KS<~sIV%K4qqkMwIC6y)=Z=fF&wkfn*%x9FATVM@jzr}I|2uj&Im`b;oJqMVDbD#@Tc$b&#SI(@Z?{_8+8Uy z&`F0zo)u66HU{7~hDiu)LtaWoT6JgNNhSF2%=8PC?bkW8&0bFz_0)td%D098K_zAh z`1M>|{It|jEf5{iCU6DCswSe@V6;0(WQ#3}0ZLz#rFbb^r>;% zyiue^Yrq`Ets;z>=CDeaI5Zs>(K3iqj*yhp{HaVe$N!&BVOJM4%bI*L)j!Ietyj-G zrd;{v&W-R&AWLy;B%sd>fCPr`P&s{kY2Yuuca^MeuXAOqOP!#s%ge3Sju#%N7P3SD zsY|?fs7PX?zZ`+ORB&zUg6vk^p_pq3uok;$g}jP>$p8vGskSZ&yik;|)PIFx_$nR= zm%ly>VfEL$l38UI!l%CB=e?T1l2)F$69a@`Q`$PPDvN9)3V@I*DVI;*R`ek!^vT{~ zk+X>bt|1$j0WIPE(|8jCLJY@{c@>IO10t%c#tZs*KRRVTrMmOO80Cp}l>dCv|4%=P zEAIZTtBT(*eRj?FpR?h=Kdu@JMI`<21_lNaUz>LA=cd0fRg%c~*J}Uoi%z}6p61bM=UVy`0r~%abocBM*PpmWUNEs=*hu4Zl*VC|94EqkBSplZ@wIT zc~W4!dKncICwdmvmD~rL!2f+6w=;=e2l59xQV1-_DrivMXsq;E{pXZ`KN=#Z@-ip; zKNop_ub@B6Jii%Hd6Cgd5ZQLR;z@G#AowY>>b1fD{yGtwYINeer}CFKfqK68{`ylB zA3V2eztR3*|K|!}^p@;9e{a3(8@dz|sz7yWzN4U5`^^9ATjRe?mvsH!m?qB_sN?(o zFOAQ@`69#r^LLl;X=%Hf*Xmo$zYVw)yXp=S5BFLApZC1@KJ<(4^-baN)PX@<>ra%O zUZPbgfH<&%Prz6s`o--((!`wtHxz$;v{&e!4*6b5DVq$Wb48<0C97*lj>b-1HP}2j zF1WsO5qdB}_W#Xz)+*0HmSnC7ua4$XQ6rOztLJ#dt$NPC)eGKR4m2Yt{C5{yrM;d% z)({dsLH0A-p8h^8n7ChC3jh80nQ|B3gj|c3-s_MMmH1@VXxtR_VD;yh7HWn_qKefG zzAkQ(f>l=`YUQWOXHTkj`dCOjfoKds^KZsNh~&S#bXzc;3m2f$zVAt`oPAfPg?wPrL|y+7 ziSpXxYm;xW0$x5c!2!z*^h>U4>F^D2gP|0D(vSCW3I*miprwu z4}(qS&)HUM{Je}_XiIn-)7rPR3;E|S^D|Gb1agbr`n$azIn}^+Eu}tJXjgY=pB!K$ zuGWU}gD)BfL6qg+_+g8SR?ouw?mpSpafV&gwz|W&oW!!sPbi#$403Z@q^NZpwZqA& z`BRMgAIwj1sthnYf0NMhcIryq{d3wK#dYJnGFD1m^LQtkh>XcPisSP$ac!M!LG}TV z;_;604F4d94CCH|>bKoGpQAd{Mk#2>_EI_G23qePwpej+?r;Cq0(ss+219tJFVI1Q zv%w;o$wa5TTUPcRx#UI*O|A#z_daME{&DuW9APl0Zn#J;2qO|iCSrbAMdix_Mk$-krmNT$coOabV*%GWcb$?=eg^>dMCNRFWrY3odM zl+j1NIl_1*iU;VQ_r)~egWlBEZO12GO21VEOHCL&=WJ*aS}wnCEKmS%d_d2tBAvX2 zb^DK+2-6_?le37`jba(sQ3CZHOO}h9`ny7n^oxAqbSJTb*E>pUJk2$yCK2Fcys;3O z3zwqYZKNt9yGD5qhID+{~(oi@Pn( zOj{BVC&UMM>K=Z)cP5Ssd(j6DkEXN|8rO4S=Oup97zdmyY(XmzyUWBgc4?lVQ8#)V zrAGwsl+`y_oWitTOuae&1q(J@oAhKp&^7#`dHl^L{_7es!BSI(@TP4?$-WU$ISc>` znO54F_qY}K535QX9E{#;F4-iDll4ImfGbKk}W z(t^q&{ok-ESGG8N6IOj@>-9$p6V%l#^g*m3etHWzFeDATW5Ca}x z5i?i`*JY6Z3(X~IGJN>~p%2HBAAu2*CtPC+3q`9FojaZcwz2;_FL6 zKo}64KH`a~{5XY5sFcuks5$R!92KrJL9kS>8LcF&%@ zx-#l*AG`&?6~5Nx(ZZ@Lqexq}w$>Fi>ofCMflHC?0DV!MwfFU9edUU|_)Xdq@&Nas zEt&_}#R4>s>q+ICDRE0i5a11kXu+OCa{tD6IN&8zeFT|kyj^FC--97mC?F{4V8n1r zkIw#VwW*65u0yyIl+OsFXoBzB`=54?ll(c{DE*^;TrdEIDtxiQ(os6egrp3vC)O6T zxUus}P(7c^VzUH#TmDou1W$hgZLw`(b_$8KqtYTiYW*nPnKY8m`8U0t2)xOyrAcx6 z2!v|`Id*-F6tbVL>n;2i1N0SG%`Jv^pw@(U2Y;dUn-LoF2gF`%?;`#zWc~C7c>#8i z*5vr8t?X1M=P?>CC;mPML6j6KaA%$@nc_~fJ01!C;cGq4k~wZ;lSdHpX0BsV@oIlJ zGdeE{H~914OB-Jib=%BnOd~``iPwFGB?uKiBogZKXl{7P@3TGX@|XLm8=6#iZEq3j z`!zGN9sjVZ$rAGkoMq?vte5Glrf6W8G7~mqg%xzfMUJsZs;|-e!a_QEa(LSYp8a}Q zu$Xv$RYush-+k{R&0;0CP)A~b*RzMgkL}N7NBCa1zk|8<)P6U)i9DC!?EGG>yK|{% zf!}Cjrw|I)R03P2onKwm6>HbcCkf87)PV9|&JTA#e?N!y4g<7laskTfJLDKZ+jMbN z_xb*qupuN0Efuc0CYmm&o9nkXLYp30SH{H~Ygtmf!=$1!0uE95@N*7ISHu8Vtlyf3 zAvx!(a`DzS=a>L4d17Fu$Kw8jStyrZ zz%p_HEk=9uN|#$;;Meb#3@Te0wLNXVZb5<8x`rV0WlOL`$Ao?!*!iZtz?}1rb6Nqa z5I)Nijad-Nc4yh{BHc~=MvP$#yTukj1Q6#ka>0c3PT66mbanjxYgXfhGI~+ zhpFI(xb-P|*6=>8swj}!`93O)jg9-O9!IM|lG&fl1Y12EzIV6Xp>xOYTC+G}Lf9Q? zagO4LBYjU82KmW0?<;Tj`&-F;+i4T9yXCFIAP`4~}!#!% zC81hher@J7Xx_Qu0X(m9V`95k8gBu#Vryi+=>L(+Di_NXk;g2u>Dr#TGrp^WTc7 zPz*ZFA{Zt}FjM=YKw|@zLKhoZFGY5`8Cie39k^cyeV3ss2j`>$W^HeuR;Uddn`9-8 zBtkUM4cB8~1kR2pb8_zy!9L#1x$Po~sF_mO!|$EDyNj}!`pu~XAX_EDLaFCqA@2AS(-~KgnK#_$WSerwgXfnXdZ}GJRT~ z_ALt(J-;61CIXuFwbs%2&agA}IJ(vhpMHA+v|aby!zz2cSIiz4RvsRaet#3C`gpUN zVpyH-Di(n>Kmm%?@iHb3`b*AQ)nay_W_y@ZAkP0!Mc(_Gd=2uITYGw@-TxU2J;E;~ z$H1O+_014-Tmz4)3(}aW(B?lQkxBCQ!z)8EmOV+PmDn5r(yE_IZ)80owCrHM8y^L; zz4uY5R1GR15KNknc2cdm_}OJ9N>zeNS1#gX2+DBw%eiT~1j zb%5mhx|kEx5 z50gsSG4EBpqRn`th>H_F{3}JK(eL@g$i{RGCU{PoFB zXtUqUsMby>wDforL1(o6&aA4ZPT1;?-IboP9__dH{&nS7H>Y+j1AaTN+*d1#2Pd3A zGpcoyEDMf5j`zcPVX5$d6r3;eT+MO5B6Tn%#yl|Zwf?9zSbV28Q+xPvLEv6}00eqz zJLwt5xR9cPh?{-q*WDdNAoV5<FL#xtbbi`^FhTm&Ym+aJ~!1ew{p+pFSUsy z91p)q_E#I5{&jcmWl@`dH(8TGG=@tfO+!(QKJM~1ZP0!J0qQJ*ZVJ+tGhi){5={aHUD-y3(;*bJY9cX;&8G_D_h|xB4_Ur-?2d>so0U+ z5M?H!_u8;-(pN?mc9#zG={dUMGNll*$n4|5w33hPzkd|E>U^RiFFG~%y`Qx1==!Hd+ij;_uiUB3zE>V}GzLSV63XsR@crj~H0J*+@ zeIfBG4r|s=*QIUZ7MSS-d6y+N2qc7)Vu}iY8w;-8BRm;l=rVmT`eUiV5cAnru2t^W&0L|%&u8U)f&9K#i z_`Fh<3r9WraX@AXnv9$8+J;w)0PP*>KEzsyvJKO0o;d+Jn4$F&r7=uOd@X#W;7#>a zhgW`zS*Yef%Bt7<=K>uLkkD^U??c6q97Mg($KN2fHTOEi_g8R~t~)nYQ)D4y2J=sJ zEqxrC&w(Aa!o=nkZsf0C$ek!{Xf17x$r{I5>~>C`z8@UwHXTL;Rag1OCdQ<+yH=y#PeVR|JDgk!3Z6+x}GzvAoOYz4ml@zFr^7OYLj)gss z3DgdhRivtDdK*ckg?Gg~iL~xD8?D6S2}h)BV*r>3IV7Z@n>3X&6BNeVd?$k9)FT%I!y3#vZZ51ME}x|`%JPQwG&vC6ac_*E`>VAhBJ{DX>a6RC>Ka@Mm1OR%MPjAf$Ii97%w1=vaTr3TRi23@}=6&_{ z$B5#M&hSyR+OQTs{C5Cyg0Q(usQRTJSE~YKbRWb0AJLVu1a^Pw+@vAvu}!}}(WzJMQ1Ar+b1E4c^{Ir&UoeM*F>^LQ z!{x$ik`wud-=J;tEO!3q)OK3@Lhs@&VD&=1R0&{(;`y|S=2ayXYiAA@Z8j8wH?mD; zrr-C!&jE0sIg;^+IgKL*eD5SX`NER_Z#tWEMiIQSs3>@Jte6-F0IpQ{v2hlT%8K?^ zM;3{Z2`HdWMDttAeP#wp=Fk>Gkp4;XR%SPtcTe)K_~i^Ak}7CR#~p7F)2eDb(OOda z#yd|rRykSHSDLZ>OeHS?Qj4r-I6FUNbiBQZ5L`GTSMZWoBl2_# zb!4v&RTOJjp}~eQVALiIk7cX$To(@$lzy!4n+a!wc#|K((Alg8!#n*_t+8Wg5wcU7 z->ln(R4ZwHe5gQEbGDfTWy`?Ez~wk{-bD@A;GIC&re@=kdQ?0G{z`)cTPu9D!{h4XkB`&GRO zlc0pF86VtgZ1_r}+<_vZh>)s{z=VMBYdnL{%p~WFnPU_$3|bpio@px|3{dG`vfDk9 z?pO$=-&FjtJAMiZzw}mU{0v3nXXzcwNm5)ci#e-4-^9w5Z3voTfpkHbSCYOTUj6;PETF86E{xn3Y^oU54T^{>r{Rj}~lxJr1RlT!b1lcwnsYgAu)kHIQfBmJt z)(a|=KEys^OxzCQci3Q(fA>PpWb_&HqShtrriFV0O_v;d-Ei2(oRYYZ+n%|~LXps9)GudcG? zsA1CezM)Rz0O0N5i-hfbyUwt3Qr=%*z7oj(g%osMqbWw_&1dG9#4~N_Ph*ir^FuXS1~r3I6+u%pDRm17D~`D3qEEgEkxLU zPl95}8wlicOheK?SFFd`#o?p=Sjzjj7KCZ28|Vxu|9KwN@?a%SV0lLQr5gUnEEru* z#ecMV>1;OVaFDNFdIgH{)16^KL3YqO$?cu2XfPm5*XTQO_;oRXr(VS`V;1yv$p|T+bp-3k#66i zPQnjw;mp=s0xH&+nJ#~Vvy()ZgB}lP*qNuZQx4q7Xd0Mto!*nB_~gBEe#dCnyJ3=q zTC(kuQFe_(SqxNiif-X6U*sVTIL0slT2o%X%KHM6T%J__HvbCGglY?U;uc35j_KU* z5!k!Ws`<-m1Ap0)VMvk9lQYNAIs`w&&4O&ffxm{|$$mSx8Ba*GxuSS(z+C$HQIyUS z>z(L}1U`BBo+eWR>NgMYKnXofmk+MmTl<{OS1))xn|r08t9p_5F(-0=;B%p;2`>Ge z_e3DFAM=s@leNT;yuTWJt;>B3%N&E-Y%gah7-y0szb~LKR`~zQB7mF6Sai4qfTgl$ z6=-I-AkTn3*tJFicI+(mrei0=&J7P$odlCgEby4MA5YL9o|*ju@<5tS@=gw@`pET*Ls8y*uri4q2v>q55Z6plx-P zj7V~}zIwNHAR{&f&9~KgNh@Tkn7@7Q0}cT1-9Hy5q8jJ3uv65v`a@lg^iHYFsn6qn zFUH)Gs63IY>8E>y$+U|hPsKIlq+oUo1A(Lu#u6jB^6R&EqA&bWRSU5Tws!Y^c|WQn zcp7%x_)b=!0v+TH$U9D|D3YPXxp>Uxy7K_~r`Q1bxNG%eFGG@2+=k?6;%gp_sLY0! z^dFHA!XJY+j_1giwtRw`S7KS-^Casc+e%aR@ba}JUZ$`0@GnNgoHd`ixZZqsf1&X- z#LTvgB5mb6;iM!n8TF*Iud)Mf6U+1aL0>rDH4yp8WTL4kvPuS3m#NDFp4Lx4(WI|B zyH9aex^rYPE*YG66+V0-ZRZta1^olHg>Sw;7{-vFFg0|6#cWy?Nzi_^^vMg!kjYGF z;-Mb7{opP+PmpFpL+!CJrZR>C^tH`9UG;}RFtxCl+T5SD(bihqw)sdjW%sR+-QNj(*Xc;;OtFOv(g_rXoapN_~f{941zb^>2V0FkX4@APU;7SDh4(StpcL z83%c5U04yw2tDa(WLs=!Ai;Bdv05fn5Agg-uoe{H(DRd`7Re7Y!Z8Ae@@;*j|!ycoQjiGbiv_qMR7kxcrM+BP+l@EdCUn5LF(Y?K?69slCqAECWbgOo_+P`nUV<++3T=M zoky7JtDjQb>TV~CJlT1CrTRy)=r7n!)-Rq);PgZ`S7httxX6bL zX!G?D7PQ>0uG_Lf0bU>NNN`UoRc78}dA;naw00Tf2hx&CoTAM3kj`4Kuh9(E#O7GO z!AxYQs`$vWVfstr!cTlM-(UCHPidLiM%96I?s+9jb|>FmLgn#qTB$G6K7Fgs>M~81 zC%g8xQ3>NKkbO|E`F`^CeOf&rO@PMLVS0NT8X~+el1g@bAHw!0-*{o=H=1BJ;tT&S zO$EKwDkh+Ee>up~9)Jp@1q7nhO>nhu&B91f^YpCR^v7k7RYJ`L8x}CD+|8kTFDHAJ zc^42LNUqpm)_vl=_=vU3hoy&&!f!(eW`?s?0GP3Gd<5#sD0XJQ8IHP6TH);7cq)}* zBJS~lJRWKLpt8h1u0~2Vih9{f6hKiqI@ieaMfNJ7cg{Lo)EEmy`nzbh#T;hSq}bKn z+KrOH1TznucU+QR0b`vz!1*AUg(Ea>_$A7G*yf2<8aqTe7U&qGlf@F8JWAgnIFJ3~FnY<3i zV^|Vb5bV0C$$wH_FW$T*R$g7+c?JNwEb7df#T@?3K^o*IT^&caEHM*fsW;hUjK)r6 zG9oo)4$o&PY1QfcR#|wqG*KGf+Ad-tz=So>f~fqeT2?TpZ*^Hb986ZgqSvb_t|G^k z5sL_3ZD@;$1T+C_7?%`_h-UjVT+MsVIcg4O;B_Sr#mD)89giP9C6;iL)md$ zxLCx+ItlYRk}b5h*GB9^nU4Uy;FgpUq!z|kkYT-x1yzsY-6C+QKhSkqr(GOqUYfsmc#ovqin0{O}t3quJXMXQ?H= zfpd%nl-dpyz*4GPI%ZyqL3%FxLBlO@?6b<>eJxLLoFCmc<#!Tl`GRr2B}oK2KVnty zI3|Dd<^z?tg{q6*E#n_ZYyzM?V2;wXR*$A`!yO(LScnQxVt3<{NG$_aOa0R~0P>K* z7PUqh?ST;Usdx#;Q3-)^-vt}|f;F39k;Enhrm%OoBa=1vHYZs_@w#}f*cK%2Rnr(^ z<3E0Wy$X#F;NN^2u$3(@!J znPo(_hSqYTW3`Mb6BMc%&}^RIfzN|oi;Q~il4QG@_Xjq~%(mr!QG?Oqa6xE$N+9iJ^3{vY2Zy|UShe7s43ggRaK2j+!}WcTh5*96 zTyTrvM=(79xlsx`2V!@J#kk9aOb|4qxXWnQs1=z`FjdGAl!vxd-P`t24%Jj}{)z|% zjY8|I*^OYPESEpyGrH1uVU<*&(X|L#biw#qu4H`^(ZQ{Uz|8w)U63Tg z*Fni3P)avT+Mos&P67Kj@Mb1+1Jqs{9p;#etx8p+Jr0NkQZo z%|isrQZEFK-*3FlDnbDAzA|<6NXg7mV=I6AVO8-CrK{TdRYt7;C&8}jYAk7Q8H&nE zL1-EGjh>*S#4L1?QEg&D`vE&zPkGnD2L&uyGXZaHlH}6Yv3wHwXEDdcB=>dmg_xrh zl@W{)-jVsao3A(en6BV_mPuh}_}W zG;|$T?_sgL%QWNcEcY801BMz`e?11kD;<;mciH)g4kcvIWOzo|XU4Uy)6Cs4d*V=w zQ~Z4F1hxEY>uhGlAEG?Oh1Lepz*$kfTl@=p0>uy5oI`OH(z7dJ5g0gxBiR%FioF{~ z0ysP2rPv#Rf&4No8!sa-G8Y%2;!O)bEXKt`A+5m5*#k&-#drex0o`p@?|H?IfgGmU zpgC>6+Z}cHze!36bbp4&^zhmjo{(=;1+|}nH0P(JXy(43fx<55a=(M`MA-x6kJBu# zb^0Dfx%J;09ioN&0J@;P+#eizJmXQCotx*mNGivTN zBkiO#r|Yq98Xnacig_^&2HE26DROX0A8QrRD1otmtJ_d-+0qhX` z{XuaW6{I%FDGR*$fC@T3`J4`3Jbo^ZYloFHtK#>y+%b~)RyN#Y?(%3$&`m4AB+ko#hWAcojq8$I~Fz$FoKkR z2Co6T7`29>Fo5i0w(OTz&*9L}!Ls+-dZ>j80SaBw$J}v*WU#ST+1-Srf@syZbjJa8 z#t1;&_v%k_pdJA1cD~)8?&*8~%8Mf31#P?0k7n{T4gy4#A2akjW_q&O(G7o*!Uc8N zx4Q$$mDj(0LLlpT$W2z}A2}g=OkJ4){W?^7u7ph?&ykYz?f0`=r}Px8T<~1r#@*_t zCDNO~;aMi4Ld&x4B#Hu?dIYvhBNC}9sLbn*H#(l=op4K zJu!EG;UbV34G&I=0P>dH^k{g>e1XS#`lV~fuLuC%Nw#0GZw$tN{l05GL*&rpL_qvV zK0RgEMvb@fo!sWja(K%uUNA$IO%cww1rF5+(~b&AzHMS0-uxq7o%K=_l8#~dVT!BllP%A9;GcKwSn zukw-DM-(ug1szw3uzAOl5kP|5;?bt30OFrNl@c39H5sS>VM2W}+j7W?Jp%Nzz9OWm z+n=)*3inl^KNbZ@&TNLBDWD3${6wIn38OMe&vHtr&-pU&rfzu_@;NuO1GJOo*9H(k z=A`kGU*oK5f*H1p?ruk!8*5EaSDJo3O0_puvSj=C!Nl#W#>bG57H<)e`bFl>NWs9l z4&BHP`MH(!XQHGGc$jXH9kpxUuV->iU`58ML(Y8KKVmfoz-=Do=;{)BSKXSkR%00w zo^gke=le^7WQus~AB)hKdWna6%Nq={XsAyneFn?kE@S}$0&c^t&wR4 zw8P6M-cnA{Rhr9=&;Hu>dxH13zHUjFICGku>*e1?mD$O?1#UkIiPw#}b^_A3=}4UI zKF4_SWkD4M3}F4z8bfsq)kkV^C8q%;)d%k9HH&dx zJ*p_nbJzwfrH3(&35^LP23+mMc}Ef#Q{v}mI`9SPJVZ>g7mJ#;_8-0dr832JTcrEv zY4(SZkoQnk%3ZaHyk z1NW!p0TOpe$ZX%0Q@ZXFX3bBubZ2{hG0vT2lUFmlG?H2mJzo_b`?Vg*KcV8XwulC9 zMe6w2r5lhTn!>O*9KQfGw&UQ{xChHm)c2TFx+eEwSeiSENycKtaxgcS$Y=+VpuPRS z$E!*@h7#<-i}w>BKeoJ0vNXns5miYl`#J=O7t!iy!RXf<5XKt+&HNsdMiT*;p)np~ zoM?;?&%p!-c=h9%)wK`X9QPd8%UqeAbvDQfx0lSAHNC`$c^bXsNxyNqiG6{5MvfKo zqNuP?cJMX))AT^XXQaKQPSU^0Z6@~<4W2|3D8mHN*6i1DKRtJuL&_vyCX;^iX?1Qp zvavXf%E7tu>@g3kS%TV9PwHC$C<$1NBEqP{e$&pxzQ!lu%;h53?5TtC2OHhF_b%Br zzj0vbs33C&ja5{E4Y{k`JGGGWZySo`xIdeQ4g`!JF2eKkhsDXV-mI0NYwMCs=8u#I zcLY6Vli6{wdT5eHMyHX2V`!(8+V* zeS5A`p}TMGPbaemv*&^yQD7Z(jI?1;O}1#2BL)xh@d2CHBl> zUA=M*;tWmgs_-OKoYM$|#=FWThORbTb|E2Qu*5O&_b7w?gN1R-pU0m;Tcw58US^AT z$!K0d8n#Qwh#<@bj1bz8Q@HHn_JoAISb}L?=hEOE1W=cJw(}6Rkxv^RduRDc@IgE0 z?qdl+$oMrHfjmP16WjC}Zp+%G?Pkms5`k27cZ*Jgm|Nddo<4!nU-`OS`Pr|QFcn6q zwk4I&l?q&xPXy7P=b>1M(QYfnP=g*o-_o()9G?{6>3oBt5d!H|CV!-?@?K?Ul$ z@P^^@=n9Y|bK>IO!0=*}`Hs!ek-0u}3jHnDbnQ> z6!li>pi9`oZvjY&T^)oa66deC@xnsF(@+84nfn&Mwm&T}JZLMcDXvT2+w>5G*3d=n zo*#?&L=ucXF&AtW3`UZ?5vLw5e;vil@=Sapx4%zSs<201qg^d(V%VS6GXM;o+xeEtcaX!F5~tUjD#DNr{>2YJji?T? zqZ@Cl3oO1CP&490@lMhBR7S&}w<-O?d!c3^$eN#ic&UrC(cN}OJ>zZ$zjuRm*&2k0 z{F~)a#Ig;8n;X5O|4TxMH##`bVPD5_WkKh9M`yU0lCK`;k>(#q zRj)(a5lPRmvND)q6gat5*=uiIyh8=`LsF$2%4%+H0nAUEOz6gM6HM2;X=={2tu@!8 zA5TqTC`_RMF7p1*P=%v13H6c6k=CdHl~LrogI}3RT_Jf;Qm~RCrmguNCqSCq+l(^3 zx`r(03fp^+W*KqnU7IHAU7gf12mEt+1|~vValvc6Sh@T9&3Krv66>CQ2+uPl^v;P2 zb8R?-ZY!45&AuI--|l^9!5sLBFR+gxi6E5vL6rO=pPnwb;CJ$ve4o{lwZ7H93McLU zq6X^>#>d2~ZU*ZyW+k@o9uZ}cz36Mkwpe4EIHGTOXt+s6k4FS#vwq_(i(kNqoZ9DK zDTfqd08VDxBZ?;$Zrhp1MXwVt%JVW$Y%^2j)nlwizco~*f{ei4!(buopK-(f!E9vi z6bzrl6N&RAv7v~~Nx}`EXEAv~B97;|u9;|Y^ox?!^iCabaofwAEg)@iex`I+j8&mCvUTJ@Ex1;G|UKKYpj&*rswOXXRt^%Y=j4@19GW+_<8%_E5)FrTB&kqP!PRa5EP4-y2!LpCZ z2K`I}DVv8mwfQ97H@hmB4oRwC#~;h`c^qDI{p)qyO|bt$T#gVx3lcmSRYRNvYrA1M zkIh}yGP6$ZTeZlx~$0rBje@1O%i( z8iY-E2m(qANJ>gcNJ@*KbR#XTbe`q&zTbDo_|89Y9K(Ubz1jP|*IM_AIj{M<>Ra2| zur!%|y*tRj!A}1TrCh1$+SB(-Dc7`kQ8tR-URP2m)h6awaP@v3B5BJlqJdjy>)jh zwI3u;v>o5TW7z1U%J!4sCvvx3x-Ug8#^C9OtbDe%?43rJ%v2IADHfdJ3l${)`r~l2 z;&dD;oN^LSa&QJTjGg)3tci#(XjsYgeb=+e<@l5H6sBV7cf+%2Bl`1y3C*Z5CJcJZ z!cBxa89)I+hKyfd04WQxnd0Y71EX*ve->>(fY8#@&_2e|JZ2M`bFLTLF@FYf>}_aW zZHni^3Qg*e;cS1l76A90n!qtvcQKnKqrGeBm#_0WKcvDirx=6dhcY-bJEeDJoo*>EQ69yl2Ub8fSHnFP$-$5c#< z*2jw!2&AY{WOQ@eCB+zyJ43%^EQ%ugi3ZX}uqx-74&Pu@A6wg0qj{C|gwVR*Ixtr@ z6MHV~PrZKvBSOHVw-D(*9E#WU<3yEsMA5U}H0hTR=d+ozrSmcg^fOwJ<4UZJ$l*3s zi@z+H_+dVV1}rrJy=x#tPBAV)%F{|AbU$uE^KaIj#8FCNn#?e=>(+e>e^p?*cS%$4RJ;hi6bh%MsVVAVP~1I8Ww=C9=428fbNPzWJpHl;a;IN^IwC z!H_eYP`XoI`_N=bIo`ptb%iG3Z^#7OIjvX$@R@FpfF75X^BndEM$|Dm_YoZP_v3s< zR@Hu43Is~uT_KNTW-2X{yG})?ew=`h7~_d=#25gSZmn&Pt)JZ>VQ+~B=QWgdn$!7mpQ+ngt{ z21yQy9G+UwMQFYQC|N<8XFb<;W{jR!W1!WBEzZ5~!x(9+TS)}f-N9CN-||au9aqbw zu?ELeVSs|tuHXUyodjM^(m$pF!>Nh;>$eOXps-6^ZFE6dsXn*HZ9RPZyV>bOPO_(I zM5|K;m+-~s@K9`dJ1wPCO1cf_x5A30KgQ)>`mou=5pr9QgI?ODBxGyb+}^F- zUH>P;d!=`bdCMMv`OOFq804IKV{2(E7qDsPEI*d^z|;e#XEZ_MXB(T6AXMq&$z74$ z!HA&js{qm{@u`lH78q8apFw1AD|Xl?8P^T!Ah19~bXRZ*V1%jAr5XeXH~DsUx-i<$ zInvEd=BGa;Sc?A$zjO6Dp9t1<85LSw-2*MU?Q9ItAI4VOR})12PO!tAVv>L%tvi^B zsKHd{ewqK?Odv_dxZO)Wb+eyGG}E!nbOFQ}RDP2sm#iZ1;Ry{PLX&Th6;6*7ny^?_{PJ zhiTSJY41Ke9^|8l;$$RV#oV*LZ?&yQlTvlE7rb%q(%vePYnR3wNou_fa^qv0(LNM*WAUUojZj&~rI|e+F%o)3iV0$_9MqZklEWCZDhD zttUY}+5?`@H@42U&2L}WyU54;Hn(SXYeIMuO3s|Ypm;eB0oJ6KdThlY*2YoC#}&)y z;qO$D4EhKTE;5g^87ZArheG@o&X9CQz-Pone+vh$2y|?{v7n9k7wVZ*OY~A8477YF zf8h1Iab(0XwM#1~Crnitn`Fp)(aE%8`3C3T5}cqq6w7Bz_`#C4*lP)2@}SKc?0dl?&XF=c{&tlE|Sodu;_?Dr|tBn^3r-kNk}9#)gxE`RVfF|d}TvMvY> z*nh02C=z}{C0rP$gyEsL)~GfBR(84fH37<^_vM+U=Yq9>LS5f$pSX{lCf8>Y&fjp= z?>w^oY7$-jGK%7x@p@c)--8Dl4}Cg?l%k@;us;t{3(jH;e>uST#Yc${J;KsDqE~;H z!COmRl<>)8)6=QDr;iBjN`H@jFGIFj-v*KTc>GV05cV6mHG1qb;Yv|{YQaKg#fp&$ z2O{lsl?_6i^)Tq-7lF!-XOmu-Ro6*MSWJ$XT`dWm*>dQ*kz60VF+h$KO=Gg@M#r$E zDD!kX=YnXYbHL`q<9W9iKHBo6sx%Z!ZK^eS4|YCvj&$BFX*xc>T3GZJ{D~Tj*5NVq zBfj>_L?j}3c%QNBpNc?u8bd57za%rMOXo~LXLfLBi_qY_RjXS#{TSkTBJOsKYUOJ1 ztO&eG%X?hogE#+>0)SuWb|c56vNXx}F}a^vwczQV1!AR9JoX9B#II{m5sT=^6W(@v z(zlTyw!vS5BP@TZb?mhw)>S#0t9X1zA3mX#OmD_uERMM-NHvu^!{y@mCj#)6wo{&Q z4;1uEw!Uk|J1I(}4^_X#mDsnHhX?Lgf|Ch#4wpy)swMjTZpm36fhq*SaYMD4`Z5MX zOdE#Z_DZ>XJ#olt&aHB85tLjR9~1N0IT6wLCVitX_!~jLG?UTVls|kH#p2 zidx)(^xZ>})GH~MX`DV@Tx(Q~5KIS*fPJ~WDEPA9a)-Afr5I*;n zY8}IX7hDVSVglzWpslVw;A@XTRc=YZ_EL$04ey5oHNpO)=hZ7VZu28L7t$6#{vMpKxtlOQvgW(T z6HxBqBq3oJoAyX=BC+mYm&`9|5uleX?Ll@U8au0|3)2PNhW5~N=K)E{CrXqGZ>I+= zAYZBecYdnaQtuU4JcpjWkDN$BFmc!ia@A`25fp#`p_JZD(CY@#kn8`6D}kT}%i9KO zLBDXN#iTJ0UWYulj$$!S6I|`XX;#d@J#aZ)K!9WHG^S{>Wnluk-b&F<7ROn|39Wlv zEuY@=;HSt33oNer9o<8%J97JEQ4-}`I`Al(CB%P#+pKp@ui6Vmm-H*<{CEP*BJ$NN z>OCzxeyZJ0_R)-1p1tp+>XV-}E{~k6X`G%>waMV7uW+sSWLxR?o&z1B zm;7#4H1wzCUT*AV69$F{N_cl3hR|JF9kw|17bLJJFG9Gnrya_=U#n(*n)-a&PL zf?YambPV|7!GMLC)?iXYsE=M2cQNs?*vbpg_Plqg$@jL-Mx&G-&IJRMz)s=Jvi-sd zv5vYC0(@kBmP&-!xysh>^6T{RDRyn%p`ms(l@9O>40r8*`Mgf}yW_2Dv+f@^&_)%? z%HcOB?^-vXsIkjgQLoRyyObmMiKiFV5~H0K!QurbX%_J7IeLjjWQZ1HdY5v$GcD=F zy}C_kNj5S;D(>83eLtPnms$vk!&v(%eY1R3i)oQdN#zBB!0IL?)a0uhq|P~&{oS2P zIKPd(RV^j1-VLYEkf^vCde@w-Nd-Yx@9wlhs9mR7?5a#R; z(~(XOE(CzPdTu@DY}VR^xPO+OuqCLSWwaMIIiHpmZl*w9YO{L{6btZZ3MjDJ^}013 zU*lvnWb(wOj(<=XBGa=EAw!n)O|YUy;to&1jMvVpT0?ZER>mU(4?n);@*mM`Q+YNB zBc=RJXp~{$>SkH!%K)Sv)yAWMKlbQx3}7F_?bHS2a3=MI(68AY>X3^RVWYKus*t^n zawlr&PZN`ouH193wQcLofiqb5pM)Y=L2%e6<$GByfhvU`{wa&oWr_hs3LQw{zEE%> z(yL9yU`*wEk29vXF&!a8-OfP@oDY6nv`+M&2`w~|99k~y&K`I%1G)_ zMN%NZ1TzUV9%8QcW57RV0Dcld~zIPM>ct(9_5^`ZmspVWUbn(igNE_yeI__z;nTsh0&!W zp^V+{eiJCxTN@`GjCjC|sRT=`R3BS<{^1E5e_9_KWkj&`h@c-kJ@5$k*K%xS07Z~C zhN~@!vs_pIVHM*6&ih=8Y$Ey$tWSJst?@@Lq>JvLE%~9SO(>qR^pt3Po1gCO2l?GdD2g=6A!0$Mjc)-g#PDy0mtt#|>{{R%?>Qh_|7CL;^ z6mKY=^8i4)=^n+yuOD3YhTO;#^Q)QK&GY6{^&Q3^`!f#L&Jr^#(W8Q#dz|JiBb!bh zAJywqvUa=4$^M(Qz32fFrFqGtGZ-KrDn?QlSm^HP)jl7n)JvYk%-7Vk%- z11oNXcXLaT&)W6++dSxKx7hlSfmfo-g*cVgh)Vnf)%GvevXzdW zfGDoEMrkWZ`$^?w@036tH|DuiBc5%|z*AlrDHi&y=TuiCnmlST6q!*?ZZSC)l>6fN zjsf@%#a^nIj2YX{KwIqp0c)Lc5tYOO3Tdyz{qQ({x0T_h{Lq@>OP(2 z`vv~t+0%CF+OTQZ8@5%h}zy8!wGEls7EW5E}o6*bz*52*z&#%f+ zLHYL_IP)H`^AaZq=u&nDlmCb=q7`ZI_OKAb`6D7)z*&PS;g{@7S#MY$ZwkH6FsMLqWY{*T(=YL9gtZao(_TxDYX$Oz5?(y^6+MzNNOdhD~F zQ7d$z>9n&bEBv~1o>CJb+o8I6;Q~AKidVblKhD*C<`X6dD!)~Kvx*Vzcl4y`zh~-X z)j3(e^mt2kWA34~W834g>Qu6v)+Wmcqc}N2Yya8!gJaE$+&}V|^GiutKfi_hrADgN z;ng_D8s7^OtopWZ#PGwMz5dI~Mf-C`3QaSUoJV#l|2ZB&0_Gu{eKrdbNLIDgxrfER z%JZy#x}@3m#H9E`X7H7(P@M~J6(7sR#`s_{6Qx%?%h<3oM@6Oi_#f#W`jA}oy(*SO z1x1p#042h-^}AIFq}*+4hKxHQz)|^VXsgUnU+d0oT6%H}pqC1%Ul6PYz~AGU!&O0m z90*5&wqM7lj#yRyE(q-Fqgt~`q9srnmpW~t{r1R!sy+k|k$m?bC-&dhNg$91I}bOx zpHN%3mR6fxTgf&)Pk_dHClm%_>zN0VDM@a*1(r7sbuxQLmhb{0N%DXEfa^`CQ`e{z zo8to#{d~#~G`}b_i(N5$eaC>e!@yoMx_;K#gHg`ete%JfL!cLcErEaF%70%x@1OSt z?|X!e#I@ovH>%Ui1=dR38?>)NR`5=DLQ_~6^-V>bx5hrp2?tH_;eyJ4uxpxZmH*lp z8lqlFzA6qY3>jy*VmT=Aj9vXQkTW+P()sU>TRsn$Ts(<6ki74#j6<04mb;U9DI^kN zT@E0l4C!TLm47`{ z6>kQIkZ&CIo6Vm@K`{G2D&5-7iN?$fTdY^lQf$+dAN9=O z=j+$pe1fdMAVkLO9R4M1z2{u}?7t@ekKpOB84ovbz7S&4=)LQyy~$iTplCh--8?Z- z0mEDTn>T@_ThduY- z&qG|UhjfUqB ze^y<5hj)D_{=@GuN783h$5Ei2!>>pw_`#0>A~uSynYtsSfF?U+NZOV{jw zjdsXLcW`?-8h-Ys*vIw$>)Bn8C8B4{Zny?X#81uO2&9OM{2c!8t2YscO8@tbODDNA zxZzkdOt)TSr0YC|PZw^_|M^7V^Wos@ze~C`{_-TaaAqJ3i|)M-j{3%hMqnBOcq}O? z77e|9@S}^8m6QD0pag?z?C(813F<2>4|1h+sHmQ%GGF)oQIn06TJa;E=cEpn3?qJhw3yM_EoQqcSQ&nASi- z-q!DwI?1X&(aS+|s5jr8%eXHwrXp{8NhZ`;asYw>!G3xY?oF-5@lNr@jq=Qtnm-Xp zpnOk7!}l%Q@gp^SF8J zFc+E6HC!pdEn3gt^JO35T4gYsul2sEp>izR*68Jwie@?n+4g4xBm$Y_=L*=f8slyH zp*le{rQA}ndqQKU?Y{|7#S|A7l`r44LI`V|`pF&cKG3!WkX{q`<%(Hd9bOX-zA;XR zZlWN^Gr;W;?-NL#=>l!a0NH(8HNLQG9p~jCE&~$}}aCB$8|B^ru}fRwv^VB!Z#Q~6p5-TF6ozv2YLS$^05?6wB6Hf<)3(ViqAkWdu= z-W_F}r7#>7$ar*!<`(`$ARR^NU{2y+{EHpdvZ8>)$nMpH-%ZP=r$nFcUksf(`pHg? z1USd0j#X`GYEEQ-M5hGz1M^?4l=!%5@&n|?BnhiB-P+&&YyxDNik@e3J(Ir zzt!-1EnsmGG`pPw9;MxLTH~VXLoZLJY$ni&Vo={pGD9TezQqlTpDQTuU}jZeGy< zDQc#XxjJ(d_My#jDu67o+d5aL?`7^D|Af~;LMSaQ$*z88&bGN+H-R;qSocAL=EVQf zye8SwX$a4vKCfS8Zn`uP4ZP94cm&!yyLvQLRC*pwWC?vdN0Ewt+7fH6Q{yvx5y~DD zr%*UqFMD=QueFT90cJil5rSsqQ~*3(d3=<|=7w06bXR${VhiPD`|eZG66*ii5k*?x zlyOA^szOIBYkF}Ut`@i3D5){D!)f{wvDFM0%JoC6bt zzgOCe9V!M+Q>-mWnnk)_NX~EbPyFb#Io3zsts^KA#|4v9niwEXBfH=Dvy{Pw^pK8M zyNLD4Wz2}8@vQFNw4_9nYv1?HKN z4%{C7&)&-`0(yWDc^)6N6LsvN0&*G!7PON45`Re2sf57&zX!eqSk_@0+jzukmF}pz z`U3CPUx`EaAH{;b@*+YUgQEoI@9c4EzkW%6+WYyvVgx(ShRG}^pxX@AdBh(G$F0}w z&1u~iD2j_s-u4pVOtJajhsb;{C4A#2+%)!-G3&j>m!E&x;BT+ASGBr?hc{2CGgnEOyX{Ue9%h&> zr>x8wGJJ~^>%#*XO4`3qUkPU}vOWA#>};w2-@V&}TYnPxpBV&hc5zqWo~C*^CCV*n z-(?sU0h9@Sw~{!ga^Hq`E z_wO{B4M_Q*B%QQKvaAA%VAXv2Q*;NWY~WN#=bI zLdv}u9=;_xNaHTTawNv`O)-mPCMBCO9Z_x^=5r%i|pbIM;9RG|NUm59`D%8 zw-)m4w(BObx=D>sH*UwU`>Ta&dqdvJ&`gmz$nhEjD4Y%DzNT-z-8XjF`v_NlNwz%n zfESf1?v!q|@txKX0}uo&;F$R(XMEc&OOKMn_*uoysjnr5_r!XYlv0J@r1%|w%pc~>NJ+?5VOIOt!0dpJ5)ciXTs)ZXH}IPjp6 zTb+7xw38T96;O(ON>8HnJxPpG77EU71x>G7Xq>W3DbMSCK6)C~4^XJV71>>~TA%Xb zJovJRDEQu21+`|3;jw+2-fcgHoL4&857B|%pk3hM$pZvP<=cFkcdng$$l>kxV_U|f zIqg#PXoS0?Ays00zye6Mwie=nZT3*v(=Du@XeT+>La{9ebt#d;`puiFf^BNlbObW@FtWTiOh!!;W2^(6I~pYjs=u$iB^=0Pvxe^2G1S-ThloRkLoIw3e$ z{_C1H=^~QfO**S#thvf-)7TJaN_DQvfE>a9!0W8(>gG?)RHj|bfAFk0OvQ&athmWw zFDRonb*9IFYRlraRK^AFE4{)MiM_>&zVKD2oWJ$ouLcCi@eQehx<8ixiN(rB2%|Vh zJ^b`FX1`D?OLi=kAxHI7)=%|&=B>Kamw{bWlTL4Vh$WL4mHMQ~-rINXP`S9LV6ml< z=L}^mkZ$wUglcWeus_azL6^1hGDU-2h%SSs(b@O*ozPuXE-ZV;f>KVNbaWi!aE=s_ zfL{gOVT6%cGTlWjq9#!39alPt?=4o5(qUqyYic!u1?{gxc(o~Je6{Y@Oe74BJuyYa z)K$24kA8crssI!ioo~OkjD|nQ%yESJ@tE9omFrfwYEquu}s;}qPN20bouSGOUao#R(z6Gciq_M%~+*a z4L_Rk?+lYB<7Xy+N?Sz3FhrT5&Av2U{OL0Dm)N2a?T^^y{=!x3PV3JFx~&$_mN5I_ zE(+)(suzrS1*GW4pO=Uqs$u}k^Jc^Symc*t=v6&@=h?Z0wzI|^xa2EfB=3E-ukUBG^v?s4o8K)M&>&YzeDQBy)Nn1~>MFU^5^@dOnt9fz3WETm)Q zj0-WZW>9S6U^UE02>3Dk>5yJd#+D{QTkaW)O{SCI+?&rmj-Hd_t2QU-^c#bjra59wcEF=m+IoDg2kbzE_Qk+TB zJb9+YErS(bR&q7Gp1j7Um=VMP9*`YGFgY8ydsAgAh~&X2+D8#Hee#v5y$EqE1tDn- zguN4mm2=#T0jp=iqGEEvpBk90zZ`q~ZOf*{0Q7jkO_OccB%k>MDaP{8^gqkWkLc2M zs=wlpj}Sza*w4cwem`Bj(iN_sEnSFJ?;8+s6Ti4r*+m_ZL(o~2dJ{cZ^uvFpxs{b+Jq9CNEQ`3(FRh~Sk1Q0j)_^7YNF?8IC(RcX=vMJVZI z_rLeRbDsu*oZi8QtpaPsd0)g*ZZFfnJh?z1&3rpJS%-TwaVxVBojr*FEGh2X4FzbX z8W!mAfdZ;64h7+4oQ-YL^7Qgwh5{ z=NA%(g9ME$q-xL_F#4iRg~F~^8n>O5xna!RBzEZdT?YX;O$Q3jQmyf0lCXnxeNcf} z@BO*bqMcr~Gjjs*mb*83kLbicpn(2cTp#J=s;j+u0q8nzRNm+=p1HhJ*oA%ye;c?XE?#-@V-*1OU_!tMG%$FVC82zDM#jze^ziqkIkakB;(IW1odKKVM-+0nrg* zGWI)Vw6Y?T+M^E;yAm_FsQ*%;8);&^wXe+T!JddDs^jH)=sLb4jfHSd+V3nbczv?8H+YMB$_rN~$oDOoTSTkx5;4xz>Dne@rA<-<`|LCzV9`^Q4d!rw(fp|!z` zoayxt>MY>+@#b0#`Nv65*^I;$8Ia9Te$*J6(d`)D+1&{rOpPlfE(-cZR44(kF`H=$ zepVt5`0i8Nz3ilAYLu-#+wafzVCEo`c>lU!e$9BNDLM9~|K;xc2U7BM)eWIWsroE_ z^sts+?K=vP<3+#mv7E;p2#wj1{852wS%2xGdux0Y6B9p$PTUu6zK(AzJe|C(+DpT& z!#O=?0gD@4y8zg_YmRn$7|Ln&k%;MB{Cs1S2}6NgDepsqG|(LH6Y9?x_(NI)l_{^z z@GD;TK0o1Xx;K$*tF((oBbNcSIu@~wd9kUDF4ZslolnU`1B%Mf3Q1?LSs$e`^QUFD z8Xy%NHH}gXU!6WyH+!O~&5NKLBc51=wq?dF;*`K~{4Ph9&| zxdsDs5XVr!-`qgh=Z3J_u`|=Xyria^9H?pIk-=N>R(HuH=$RbYUKLq~-0L5NZ-jyh zLVdEoqd(vpo_$^tG@gy|KAl|zT?c=2vL=yRr!vQ5W3zv)1%ZsF-(8*$6fwA$+E&&; zaBWOTQDGtx0@Y^A|8++)D!{1yz5$a_|OOHrqWv+Z-2r> z51sL<_vALW`rD%w;ijdrXzalBYNyAYA0%+u+}@dJsLx+)%g1Og<3Xtt@$D@xj!mwL z;gD^fsdDN=h2HeIFHSuk2lYI>1)QD!R^k-1H1NmQh%P{Ca>f<4tPVC7663aUfi%yF zmbi8JEKMTjQrgszuY1siZo4R38m(YD*O$lo<442jPFV6mz6_?zGxy*A~C8GQ$H$!QDURJefHjR?eC1SN(B6|RgQmhnzqNH&~ec$KEFT)zt`>`O* zwB)_gZ?`$;U^193u%=N)09<*}-n(JNe|X;GqwoJ#C(N4ftXO306+bNJ=Z$=WwjxMB zdi(YYbNAei+Otaw09Z0;>7|i<>X$KyaL+1|_;(HHlV}&spTCn7`|PfwH_umCCj86|=bcg#1xC74(^aG!inDYvH5$SLTmv*v|2Pbq=o&&HVPHzLpy<#*ImFQk4E_L-s|L6?r^^H zXaw>p1XYN4{7gF2cyQ81a82((}h@pV%%wKu4nBe2cKmh%ZKPGv9aN!s|d_gPfGg)p9WU8%qXXe2!ARiEEaKU@A$jqbn)sT zU_AeGEAb2nvc^@=wB>2FnGP7TiGFw7z|by6c!+{Uli7*oa+No=gbOEd^BF+My)-B` zg-mNxxA!DmbAg;d0uZwKCJqk1E7BBmfA^nijWT0Oz00>|wk0a=T6SB|ZQap-6%>SC z6U?O{!VdjAQ({Xs78RLmu~iWUEcJyqz5NQe9%=uOs>8PAm&-&^oT|c->X+CL zMHGo+EK7fdaCDu`7qvj!gNk7mp%-szzb|Hc!Sj<_fM|6`SS`V4g#*}Dzuh3O20*fw zBafN#W`nL|koh=2W%f9k$g&TIPBj^Ndc%}4`Q7vm;`fl%Km;mtTr1U7sb@7$*B5>U zSUt~=WheGSMSD*fw+KPYfDJ8&JBuHD*y)_97oVdi9# z5bJHt98JM+BmyRkvh~P-VM555Hzjyms6vMU#IswUpr2km)>yy1u>fs%%M%DQV%4=> zDIm(@LX)!yUSr5vBOvCkc1$J+wHEOZNGY!km?m$mg zmTs06e*AZ1qo@oMa5hHWtsT|0QCKzZU}GBneJA*@V<^gk@LJ{q9TT7^5m1{O_u6pE zm`p|>U4dD2e6|_n8hcy7oyYFH0~;EN@LRJF4r?)+BO@>*5(Wo@?NOa$Do5Om(P=W$ zFyU;>n*>%=gIVx0K@&IDd*Q!teDBFGg$<7_ zeAvxI)+MsxTlhjSwy3u`qtnuB9R>pj!(2ynT8X1?utz>W_JC#A-FWquwD;7fC@Xo$ zJ!LT_VYT^Yyzq}$*ruvyW3WwkcGzWA*SV)eTZgh>2`T#t@-WPU0t`RqWOD1p1>lKw z{jTW1%Y>=*K;MD9V+NJmQ#u??&7y4-u?tPn5E|pB^Rt=j;@;%_^gYG zKoXS5H-0ZMxBiTR=KCtJS-G084zlMhI1=VW+Kx}Y13YX1s%&NUz3x`L+8h6T#(!n3 zZN>i0tV(MgfHiL*b>CHujkA>`dhe)EXZ;0`a$YwtmgRcJ?PPfuh3Mjj0R^1uk`v7Z zM31M4XYB2%pQ@&5(Y_Ra6hxG*{zzV)W$G+6QxJ)u;Q)+8tGZ^(#5xOEwpC{~0gy=5 z^siBerRy#I%)hqX*MLxUE2IQe)JT{14B~tV2uSVb8mbuSL(8NpD%(kO28(xrRBZP} zuNSv||BsTOoTMZ96P0%-i47ze;1CNuOt`Ob=-cc{3IxfI5wAY2KTu^7%o?uJNUKFb zH(bp(F(pm@770M?b7_;7SN1Dw+6Y_fiY1Ou)lRK9hU&LJt{-2tw*RQbF)0ynXCizK zx5ld%(CgLBuZ?j&1T{Jso&7*^t5VvK*k3+)0gw$m)qEn1 zrB`fV7>$H?C5}MWJAd6%_&zCaL({X}Fp;kJN7L%(O_o;C4XkqLsY8$dx`9PD`xdT3 zk9VvUB=~9KaO~a&M46(wh9AqgBe@iq0P^N03-)k%biON+@ag%7Amg_@(V0S0_0NBJ zgz-_&3V1rYA}^0b#i*EbM4x8cM*yT^xWQA&_{wvSxHQvREYz<77~qa6Q#{l@+X#Q7 z4=(31ca~O#W!VC#+r$8w^VQ&i{)NCqv}BH)r|EP);#LzA;TbA`sS*+O$8EN_eCox* z^Ag|Bl3Wk!UP)a$7q4& zHvMZdFwauWRMDSKo8DIVg`J(5>hyaT719^K-S=57iRCI&LfMHD3z;hT!ilJ-!UP;r zG49uo`<3yNaj<9n#i8t3e_l%i7%0(h+^tc+Bt!NJ^O_|~jd0@wvI%V*fQ12c6erhR z2fN3kI&PysW-DLXrB<-=F4#}=5xX+RdC0RYz50`J2n~$FG>o40<_ALhAMt>9YRsDr z5Yd0VZTRs8YkKAD3+E8Vn;SX=uwFLO+mps6KV0%Kg*_Tm_JwXt&VuOqqf267_8rF?3Se%3 z>O`n>PRww_<1bz%T=yJv(WTq4?L|!&ENtDL7%GtD{+SS3&G`o94z~G)C(_oCon6o2*4lUc4WVbriLN&kIerO%zXg zhS@jXN8Qu9BsNAfrEAMrdkVL`PG*yS<SySVo>s!xT;}C+^G%89jN_y(_*5H z1@}^cyc=hfsTCVK3z|@?6W|$LQ{KgTNBQE1Rm+Uyv*AO}ceB=F-i8?7qF@+eIEHgR zSV*usK*!vI{DE^x9lcTb@JN+NJV5(WuEzZr7P$uPU$zUoWQvy5wPqrJ z3Vgk01rLZu_hF$SI@iF(wagEP&QnXDuDu5OrqvTHapu8E#34n%5!=5qZZ8dP?-_J z!Tv`4v+fsxZH16q-#?Bl?h6=j-Zfu@8Kj>VRW0k&Nz)zF`FZ+%AT#J`*J)hA_B=nf%kSe%*t@_A4Sk&W>ipnSXc8-?KeKEB#e@! z;LHC|X$$;y_QKI$X7hhT?=k|UBGwcS|L9{nmU1=tEyJ8ZH%{l9PLnGyW%1(mG9n#;4M7!CZLd+J$v=p$j=R$v?}rBO|VZqAHMfZs)vBW#lf zhl1HhJ&>M4MJlFAr(E>&x0#0xD`k!wi)Y;0uDF0rTN1^%laU=s86^H&& z1IUm>XxBQ8qiAm#Xosox$=(H+Ip_a8f4W7zxO*_nPnv?!Uxwm)Xb;SmyWA*)RAs#- z>bl1{i(W`8AsMsKfL02v>d&AUhI-i|jRz^W2ta;;le=IV-&Lk09vFS@a{0s_r-){} z%7p7-|CS{>P3@N17V4uZGE`7JQc!8%TS_i2Y+h(IA7_NUf3nZ?6nk?HG7-Kakow1l z3~@E7BrthM4I>><@epo_^W1i<(gI1ZMIUf2A2XffBj6QGK)um2;p-RuZu2fX(t)7Q{SETCl65p)^4;L zi#@3hZ-Gn=>4$FZYwvrUDF`qkX>pt5)xEc@a6O5)w|$JDMg1$29hOFdBhvH2@Ykax zU6Dc*0LQua(Y5VlbTehnTg|EP$XdNwGoMQth#gQ@skz37CJSF;TUBip;?P!$OECsb zp4n@jw$A`y_eT47J)8lNN1GbnqJa<%lmZxDtSq{d^Zm9Gb4@&s4TWW8 z6REECT~L{M{qdzVDcg~u&Iu5qS!hq5It^?NzlRF;6&tA??s#hD{B?N7Qdq6OlHZ-k z5i6`OY-__5tc}i4!Onsv`diiWJpvf!>v_1V+1M(6Oufw+)QB=aLKSYMy2rg7%?Wkr3j0|Ao#S-AB$CB}KIn^8OM)gkQXu1o=KBMGw{ z9aJr5FZMZgC*j7vv55(HY>*(ZBI=hG(W4*oVMgY=J%=OdNY&C9exrIj#sq8Nf~c2{ zgDb%hJVtZT?3bM9z16LF@`@MDk4PfcWM4UCHTk^fA(Hy~Kt80dZM-uaiBF9Jv>69h za+&?%*7O=^2c}5Cl9TJwvSS}Y1>5aT^KNRtYP%B3h8)zr{x&ox;SBKz5Q89w(wE+^(}dT#io)Q z=5Z0*aB}-`0U?L(8Pd2*w3@YW1#e%2(J*WkqpN_BUDF5}vP@G*zfF0Rz~En9;=yh z8J}o?3Ij_`jdYms-2FxpPR4av#)+aX8}u#Bap4``FB@z9l%dkItCJH#GNJ~0=-w-P zs5P`5i}rAb6Sl?Pm!h^m;({nSGu$x~mqK#$EN|62g<4p_qFme}k9l0xAuJ);-+c#j zK2U;cChaBi_L34L5TVO{Qg{S2eF|;<9d@32Tprt{X5zf6wyufw1tiM9y@4&i7ra zISjnm%|a<3YAzuq$b^YCdjE?DHIXV=RmZ3rDHgO7Xv$5$f(7c%T_63;V+VfOWt3gz zTe{-OUO=d>EF~6)Ov|@Eqs*of7tM-L;o~om_8I%F1Y@tXTXjVj3*1lB$|Ws`(4g35 zFPc}!%e5A{RU5fEsnB;Eic?pCl_4UUjq~51FDN zPALZTVxQkST5CxH`z@G9O(#PCtgoW-3iq4A1L(m*>Z@b@090hLdUlS?S#@T`SW}Ir5~2;%Ya26=1`H7OhazYn)A3_jGHr>X}$Yyj(?b$`bDTa zpPE$qM1Olb**+MWaUN4}`;g*i)$7DikLpC6@hI^^Y<3xpk9l*rfT)|Tvs$+Kw_iMy zBsa`^@E~8YefkTNWM6IrGjf}8{eiIy6i~or;o!J4x~oL|?5jL1OX_JS$6j8_M1Uuj zF`EmCbdfl@_=M;fjARIazoHODDoz0OjP~V9ehA}s!{)rrPVs_Vk#~nGm%r-Cm;Xj& zstniZHi@HEWNeMm_-k~@vaBHWo|$JKndVW>VHm~m$|hXjiGufD_p%Am7^1bKVD@RC zl=-W>C<&9tMuJpRIOksX+nLQaAc&RGuR9));beK> zygwaSmc>-+)iQ2o(Q29wo!8 z>Gkd}0O}~#@A4D@6DD@rVRnY`r$;v*?))l^twJ=ga z`Xbf%@xx!SLMuY-Jck=<*O~K!lc_Evc3soPY5q<*X8(>~J<#XrUf^(T-XrGQ{fo1W z`>t;IIqrrP#+uE%5l?sqt&YtBqefmorf#&vt65lRQa0JlayxdL1_fv&lsKHAfJkV6 z4(P(#-~MUyyHV9Y?_f@QykeD_RzpCgs?}cJnA`7~mgjRxQu;`&84pBIZkrNU^qZxG z+3Z)aUJLTGo=^v!bl9@qFP3g&K2hrM43zvzXr~bM6;ds-gp-`GfY6qQoW4LTZGcc* zVrtU!dA4iZt_*`{!#O&jvN_AZ{;;btz)SxoJ{o zJJqz1FASIf=N?C?!{5)M@IjS9IFMuW?oj87@Nf2wovDDffz=&vdo+2GsN;PVoAoj_ z93|+VY4$fPFtc0)2kEfP|E}`Ypy)HX+Jn*u)^#>UbyoyAltsaed>!ftWU{U$H7rO| zP&jP#3g8Zez+Y)rq9n*2bp`gO6|IR94cOrtZEqS|3w%`bba zR_MMLpwsaiLpm^fdM$X9;u$>UBL;jxdatR1?zk6XkpQWqckzM?za^Ly>55s zBIlBMTIrBKI!r~S^Uqm*#}osc;(5>&RL1o)G;@&0Xv-PR``^^($mo6FISB}!cZ>SQ ztNpIAE!@F2`*xj9$&^HuR)E!+><6KsTn41FYJovnT#A=gR4>Dfv4w+>0re$MrP8e# zjV)DLjKr-E9eQ_O8fxclS{|`Y02H~Q1lZ8TuhXXyQ#m?CsvOMow2NLLDZSeA5WpBR zP|rJAJqjbcmR19ae9T7D$kc%eE$5F zE>R5u4IgM4TTbVIl(sVtiLn@?H20HEZiaxp&qt}+JNn@rd#yvf=`b#F0+7So~y~(x@({HP+ zpZo-4N7j&2k`-#&L5z<&Ti&~|D_Z>RFhhsJ)+M`QWQzGl8-V`&64b>+$KtfhDFjTDICsRX-7wYuRoS3V$ zG8bQj#f1x$GKT(^v*H54<`q!`8IWIinWU3q4y6xUWA+OCTr!>WgWC3xycjx?td1Xp zmO3EfH4AgIlhN-RLOM1o`YHu}hHl(Q(HbqQGQym5x(M<2CbK$`m%ghQ&)cH`@ADiR zr=c{MYbGZmfHK9t`#SPJG!_Q@(Wt`g7oXQqZ8QEX43(N1=HzW@g0P;%L30f>rJq{y z3#lHtcOhf)0O&)2C{dL1u-}m6Q?j(-?-IP|)R=5<6tzpm#zm(I+Lyp@ALyirV1#Iq z(*CoB{Pw?E#QZBt35`~se0i2Pc~cW^XT^bQ3CJ#kTyG#;<*2a2wb_2l)atXTxvM3{ zV)cEpeuHk_p3~06EK(k;d>=x*xBDC1vlTC#e(*d%6)pY!jMBNtVRzFl1;ODwXSVN< zc{g21?>b0&9}3iuK1NV;gHI34g{M%C_?1`!)bN7~@to4HKn^a6N2X)kgaVFABv5c^ z5DraH9i>EZ#WBoY*7Nf2cQV1iBP6;f z^1G0sYS!d2)UFcRhG;9o&X67c%KNUGC@QLunIt9gbv;+$n6k=DWbNM8Nm&&HfT$)c zwp>SKNREtfbEC?G_^1@;uLX6F);iHFMZ|(;q`p>J#`Gp6j+uY2z7Fk$Vj@jBs2oz} zQp&8@h2&B;BYI-iACK+D7x5yD`g_L;VYkFVr@t=iooa;_I~5mBj!6NBRUt1aD6WZJ zxIWo+>B>#VIfh=7F+!=hZ?&GHcMrPnNDnXod{mrCaM#eIoQy0LgV4S8HlsrL6X z1PQ1S=Tn*dzd^ibzk()}f*XaSm3iy)dZMjh4{l3zUMg7fASwZE_f7C4Q0lC|mY0u! zt#q@~t6}YELp1lj6~Z5PolN35M-EAUX86kMUvu+8pw1WtneA@Qh{7NP;T9RRNU1KM z4=TIIR6R!)Lj;2`P{l!ZmJouw_TJki3r~KoO~jwNSwp*}CGNuvf81nA(BgkSoS^9;C>NNu^I*)H&A;jKh6!k3QAre~%Sg7UL*+i+p|A_6tRL@c z&2O;s=wL`?kM$SS8V5>%Bquy}?)~V1){>RTusg-3Zmrd-o9P~%j8l7d1ZnqSx^Zoz zA^aDHZ%J|Q#N2eG19#GO!W%H96w1uVA>FVsB8}c~OUyW$1LBBb#*(C+7KS!yyNVj)m*WU1!kTkV4t+NbVJ zApO;93({MOXqexV$N!7COFVQc!dC4~C^5)#{nKokUq~JHO)+!23-f!%YRFz^k1`DG zgn6zuVcH2uA3l$&IG$=RxmY_&?EAPeJWoj&MjPg4lxZK(Cv!!)Yx~9_C!|2e=SxfD z&3_X|gLDlwyoYpaNR>P2WEWQGkH7ors-{~Ua616MYT}?naieTDzJEV@>Ely$^kIdY zq^U|@TB@IX)L-%h;A0MCY)oTj0;@U>B0m48h^h6TVNhj+GLq9_HnmWrG`gaf zg0?^QNEM`!MPQ~(N=Z-u!i6$wwbME5R@j4&c0Y3Nj|b2m-+2K^J6nyNYUdYc-)EXn zc^PC6+g#Pdp9gyXN=r!;{vs)X1AaATvVZfLCYVA8SmdgbiLyPfZ-cv*bny*RSfQw+ zn>93fW71eMwsuZnd4NWNwRqx>DGmT$MqaWTDb8=$;^z_Yt+w>`Lqm0WKW}ZGKlxkf z3L=(lf0X^#-@~5?;?MBktG|0OR@mv0(D0GI3_2HSJrg*o%JLxsT}61myL1yA!-muG z&v-gp62?w{jZ04NgB!DDS#{Tog*XJny=sWG{^<)MR`K7U6%rQlgZ(Y&zOE_KP=UT< zm{GwKcb^6Tb5l?^gVc1(tp5JgmK!f`IN2=aAO$}i`rn}Dvf>w8Q|%|tlB^Gg2zU1v zLj|rJYy20NLbjs+RCR5S=Y`gJJm5(mlfAOhfCWoeccfuH88wKv!L(w*N3@)oG}$lx zEMX?K@eQ8^KVxScuL(Pqibve)K@-|Am+I|Qo4uIxm)2wSoA7hSj*j$RnnO2UB{})d z-*D_e0_cW>cuats-D@7`(c$%|Rqv{m%X?VD@t6hZhsWLf5=k=0ajJNjdcFuC9kf0Y zshI{&Uyj{vB(xxld}+>N7mg?Pi)#PFkH-yvZwYIt>?d~f*@-mj2Yb^IEJt`A{&!!tfGVHaFv7zI^8ejM2WpngM*{)OpUA0sf)T`&EI5}*Oy~Ak= zN$>n^Y9+pIuoBf4pPW^GLU@l9;$9vkzzk2vTPlM+id7I$@M32|0gm$y=_PCkVb=WV zC2Ck5=6p~fmqr`d>wodjNnmB5K07mnN~^(%ac>ddKIt#|t69f^RAjldINo03%0|SO zoBm%A2Qn}W1YA{D zcuXZu&JZ#mFp$zswWTxNBj`I39uWil#u<`PmS3OT&Nc>M6hfvTS)#S~QFkMs=wC4z zw`gq|T2o|x(z$qu?drEQE`QE)cGbXNMJw{}0esLiPa!i~6e53jaEF$x*%@K#{!5^O z7>jl0UHLuBhlAg;`PgK?Ln8!BjgcGdem7>R=OwRHp|%kvxb?l(qSbor&OWd4*UU4* z>LQjhxjsVE`fAD9De`TQfKqWw2mei(zj8$K9RcH4@N`d?HvCRE2JJca;9(zM> z8JsH~07SqN`JaJVVl<|tFmyLEFlFsTqPUSt;hpzhjOoZ8YC)~->(WT{bn*4O=rl=4 z@G(sErc>!9Rb005%Z*T-@MEaKGr1vln223odZO#V1F|?Z6}6o@^UxwZ>jW#%*L|ET z5bdzT00Hp^G7i>_K6XI>N?6ZbCts&vOCtX^;_+4Hu#G%HBj2uM#^8)@5ExfeAk78H{?p>I^S>=qtQwx-EQ>IjM*WsB$Ul zMY`x`7KH6^=MA3P>`Cb3Ab{wG*daUxQ!kH8>?ldk(BgrS9Q7r*c@sgCA@#K_cep&I zH0q;{1s@c^^A^V56mC*w<)Jn!Efn{dIZ>={qSD2CY`0)3~Lhvv4*Bjy|%0i-L!(#%9IN#?Ykk3RcJnkn;=eD?TC!dqWPaRIstU5Nm-q2F785H_)_4I*Tc#|yV9zmxT zODNKX2tdsyoH_Vp(3Jw(5ZD{}fDzVrp=q~ZZr5~#D zSI|bL&^-DohY#oqni>RQ@3^VS8N3L8_iR)Vh&D=q*w2Ff_ONg5-+$E&5p%YSZfnz`Rg95-ICTLn!epm9cbHznws=Njxv%M( zZ*k$=b63r9)aCh_*R!r~q6`#~p1jb~#h@LKYEDN=m;58zj)u&5KIns8lMc{gY|tBE_6cJJ2vz!(sBB z&>u6$$*&F7Gb9lCa)nb^Kj%c9C>VVI)#PvWRI|Dn1FUJGEyR!{#=e&!r*IK7ssHs@ zL*X@H<`B5026PY;XA|wJ5Gespg5ud>={kg8KY%d_*$b0P%dy%ZtnzBm`Kh~?t%vl znbb!d*UgUTl98p6W%vcQd&2;agW;E4Xu zCS#AfUV1?H7(~`Q*>esSQx^YAc_@`EcP%OiNPv`I8o840LVNwd4z)npk#W@rm@sB z+UBF*mFu6~9MyLv9EC|VfB%+j-GC0*;iiS{KfSquBu-Mv^j^Qo8b6M<$lhP^bhW^JoZ#0{aBQ56lCjj+Bz_VnP6 zAx$v;_a=IcOQ3_TIgD1%w`C{4xzWx2@5BGjzr(ID%Pi!zK$#kZDh-IhR*TvQ{%!Aw5(fkl6jsM zTAL#*=Pj7Mf92O4j2rbz{;&xja+g(fUYYa9HSH>nrfIsE63u<8J;~J7-PJ7jWMV3f z!?&7)LbMLsWBQ@LEo~wuf=vFmxCdY3Pe!Tj+cn)Ry_>m(A06j8#nbc7;|m#@8g^@TZz}w{OpW|0*!%2K z!V*E}O{IoYXoiYYR3pXvxN_EeL==H~so(y%h9ciw_G0Y^8e5(yj{hV%_qR)e1m9f2 z^^{iOdCA|%jPpGAjrwLgUu4{!X9~XZx*beN{duiU{95=s}2L5 zCuB~Grh|v{Pd5({z%+3*q1WHa)%Q(gKPb6JyeXWBlQ<9RoXdsXpFm40XyG0@pTX86 zZ5pG6jis5FW$-EwUm`*7`$o81^g97|$ofbNc}$FWepQTjE8HOHp892Mg(afZheMVp z=Wh{XNQQB(|2kkt=+axh=hP8ti$<)S^jeWyW3qb@J-D;i-uLfcB_t;+)%W1IhX?RW z%ht+dyMisz4oGBqk2<2W!TFC|0!gQ?{Y`R;l-`eQs+&43_wS;+9iM3;H)y|GO??cl z#4rGvdCH{-aJ;u?&__><(9l}=m@-3Ns0sDy;PL(W_bmz!1l-uz6bp03dhL-#N4V*4 z$=r{-0jO6&EtriygG{uAX4Olc(5mVCP)eZ9`gHqr>jz!Q!U%qbCs`qUl=|HoR1bb? zJ|nX@TnibQq4V$#2E8#Vvh|BMRxA9poPND?(j`G$jp}*wInW$I{r|EZg1Jk+EpOv? z@>TUs@aC9Vre}1aJlBMLJLftt;1~}&5A%$*Plp#N8_=_#969J59*JSDFpo(6czXtY z!E&3GTi!qgt;El?jfcF-U}^WIl893B^ySCvN7Z3nnSWUn1p@6mcDRs%RlQ&3 zY_q?_gm17^)8L)$F-v5}Qm0Ad{^c*IpoXdWD+~I7Hu3`BuLBibA9!em^RNHi47;qI zY;m8xl<8&z>xSZ+u^ocb^Q@CG8eXRdKA=(u_qEu!5k%SuvrY=c2p9{Hc#V6nCUC>hsk$tfQ;Z!%L zurBg1{~m)e9D}~G(Rx4R!X?nCYR=;=o$5yFV>(iNX^!^);^JHT1yu2fdq~-Ub8jOM zQob>*Yl4pTO5rD)@9p3xH1%+r7Hprp%Yu$XNeXEiT>B*$B6#8KJi-9^)!zvzVUE=9 zX=;}wu{2hRd3o5Y9PgO1c=xa6+aw%(?-=k@-powYG`YZn$_-$uOzM%HEABxa)$i5G zNP9GQUWML&_s|RjL^LqGQC2FL-{6p9?NhhHYmZ(9-IpRJ*9cODo~*aX5)sw|t;7A| zTMtj(j}XW;qwY&9(uHSu8#nqkeWhQlh*Pi|EYG@gQkG2}mp5}0fnE4p_xDf9iv zD`w~TtJv{fm{4BXsYlwpH2xtueg|lAEsDIG-9WExVlU|beu!N(*r2iSrJ8n*KzZZ& zh)DAF%~Fo=V5El@vv2hmUHoquYDEXUG>^Z4E=?F_$0|PHq@-PX>wGx#I(N`f^TRm{ z^|VuKU;Q_$PW=llrW=V5W{Q($EcRQoJDf^FC70NU(D_N!G%#$N_#~jxX+a-);~)v` z#}RuEENqh%OimL45P9u4^2M>mOB_EN;!bv39f2_acBq*X^$2snKdG&E8wM0;^h@2vruD^V_$HFQW$%suo=+Vner=vt9Lx z)I_ws6S=A5*eHR=QFQFsRY`X4Xm|Nh*@ETCpdLuu0cKjuv6c6YYRJsu=l$L*Y1YKtY zgBnc@tS5!uYnSBa&_HroV}27VXdN%{{KE=CS7Xc5%94eUf<4#6sODawr_f)C#qF51 zS?0U@{rkj!SL$H`4);OF(f*SYJKlkR#2n?E_j0bm#l&xYSOP}MhpMr0@&9k|qo-n{ z2RSKQP4KWgy|Aay-;SzpyVUhsb@kivrG@=N;rzQiV$InNr;v{^pPeiiC;wyRq#nQ{ z+?wDnW=Q|QRR6AR=F|dj6WqP>dw4xJ4*a}*_1{FFnZYGuwhj~NBJuzCWS~K9GJ=hF z`$>6+aL5PXcKzQdQn=(*>-4Qe67)Alt>QV&5g-!Mf0u_i!cbHG`Nj1yyaehiBKp4p zAp^N+i6a{cp(sq9)fo+CiC|LfoKVTBAQMsD3q4mplAzqA37v0 zT4*dr_#3qQD|SpMkXo4XdgacYlKc9)HM3muH-2%$JPXfHWc`!;P@MqRd`5Da;QQ|Z zM-@2aprS%hF=``qF+E2Gh5QmLBimxFi?3Dvi|;j{;no=PD?wS+;p^iIRA})~-WMfb zIcsjeE1BT0RlZ9K-L4!n5)xTO9p2J?P6ZQ?jqXmq+BmmmYn*eN=~ofkrOoMAUvUCtOf8@bp#i2e7ml)gGqs6fv3^!x$3 zP0zlcPpiw;m)pe#Wl#N@lZ;abA8y6+t-cGme*efzOMp0!3F+rQii`oaGS{n68)<51I~Kyw6DbMKth`YJj|0a zv0`{2X+fo|ePb|n7 z;MA-`_zW03vwA&zhWXhK+Z?2SAVd^TRiE_!MD;3U7*+hdz_%B)h}<5=A%ap|<3%h4 zo(KSRl@YPzbq<*yK|H&eD~GoJ=+@H7RE{!HZ!CRhYner7{4@l&Ols{l#on?#8YPoQ zIS}Q@_HsULiad}l4Sk(T@tGQDg&Kwb^46yflF>+YF=)H~*ZB(-WovVl#5<{}$G7Mh zuBA!YPH9z5G-GF0x6GwuFZdLZfYx~a(Evv_(mUw6(4lWwQ7>Zwm3qRaI|mlP^Zr-( zv6uCl^A7$hOWXL4`c7gm-;0C}>Io+}&F4_@+rvvFu%IXaX|MCelzk;}FHmNfu)$UV z)Oc%H{P7Z;)_|7HVQldAQDfkUb|hKeTOgS|4~J-TL$63Re&)?X?I+|+kgI;8ioC-O z1$6wK_yF1vK1ngp|K(Nyk2^Jwt$Ayup!4zLd)U_9r^OfijkT0F35x2F`L>_!H%1^U zT2>FV$no@^3(2AYm4l$a7cWGoJz*f`IJxgOOZ?CG)6ZMz0PSOc;jM}Q7WrOf^4;a< zLSH?w)ENCe5fw=hi|gA*)XW=?dFg!(;}O8YPOCoVX)kIKt9G0mW~DS zo-Su@n?#8L-Vp5~BACnR?mv%2TuD+Vgp}?CtYPxB#x~|~G5=4goA>u9pk=6XWuPyU zdVv6@(k)bY-_VpF-VwV>G4*j#U|s$9c5#u-hP-!q#khMi59jA%gOm}3*K1gx#~lWR zQtk-v;blpv1}@U?DS`{I{nQVW6GjwBrFWvB@{h$9B{V7>7T>ds(!2 zNTmr`Rs5&_eyUy8|5=oNIicHD)2`S?ML0xjgb1!ID6v#k{|yk@|IDn4t{&v4-B)9| z?d&xxr?x#bML-A+l3=q_tjSW-bMa)z%um-)Db&%q(_wKw%L$C-yA3AmQBk;EiV_M- z?k4JM2A*D-+lwzA6;cxn zA`S>~=1fwwde*P{)*Jv+BrtWPU3tIJzjITv;62AW=L)-ry6{RK+TG!_SbS#&@{_V> zaU)|$>OL2X4poumaB;br7`n^wofhL}(&vzFe)D*TDaV5d572cy4aof{p(54EXZENN zax39we{P`|;ivhBJJQz2AWmyasl z)4tsEW4O1sTbsLhF6dr}{=k`cA*>hOr46^X6%5_~U^l2BwV^nWp?OH6gYCVH$Mu-}an(a|U7|Y9AH6PD zk>kTnJ_odip_jcrY>;gxfBRh=aS)YhQhQ2GNmWNGgZgJGgXPJK7Uac0%$OkZM!+&9W!l_k8hZw?;QPU$pt?s?H>nelvdL(O(6!XighG<``4X*Y!J ziO_Jt5#-7djZXP(l&L!_Z>1%5uc|I#?Qp`$)3~{EB*1?U9mdO6kHQ)4ImnEJes21f zZ@)famwcLnx7-IL(E(kiE-r`JFvZ^3jsIeXP$f6`m*#P!Vo!Xa43L;tN9}j^UGEeuR)cFt zvv^lK$h(yO%WmCG%tt6K;g)FNwf^IA<91wk*CwrB8!}P{C1D`Bv#VXuy11j4fKNry z1o)xs_ zYRd>M&eY>ih@~v`qN9X*=l<;?Q18RO?!Fijwb1h zWPA(BFxKp9y@-+Qu@PzzL3Oxgq0;8rqrudpWVXgf(^w!Kt@qEYN3*GMOuag&3oiEs@q~?&f`FD~?$ZmboBXiv$;`j14)2Z9vH3e7SCk1iv$a4;B%KF$Y!{Cf+ZOo~7w5`oGz}&kY}r z=Wt1Rn6l=Ze$5nA6Pxb0-6$~bQaL!%{d~nERHHC(VJvn zXgx;bi;K9kwK|$3j_EC^IeNN8y<%^at(N;o!L@Nax|kzaHaFN*HI_>h7x zs}m)0NQ+72tQRH5l31lC+|9l49lQIu*>IJEpb*1tB9E*RU0Z|Ce0VfoF(Vc+HnCCe z(u7yS;fOUlW`VjC$5}lhxB&isG%1a?1mTt>w894ykgbRzH!9(vfr;)&pL`U&oFjrsi$Z|zMg#@h9u!-;h~m)vKxAis4e_2!|iQjD?0NVPPt z?>o%<3rPdUDz_sHyl0>J#ae7vu7|;7_v0)9Unc&7->cD9>%$+^`rK}*lf}d6=O(Z7 z41U&-=)J~PWA*UV(}&ma>tU;B+LeY}6p(JoAZsgVTvZ?2)SeCejhgXI7SWfaRnOBzHXo}4hJ$Q6% zF)!2YO$_^6`+ywS_f#2`I4jJ-8h=Uetgwp*qrb^aY_~pxQ zC+aem7aI&vyJ9?WWW!A;J4A`cRV*E4k4#YP#ad-mCm)lH4l0&lDK1Si@AzwO1)D3^ zr1KvS_pR%lQ%iD>U0UwwTc zXYYP_ptj5Yi`(w7ve15=86}6hwzm>jbv@Ep#O>_;*@1&^S_nvox-WzNGp&)=WWJb7 zkFe>71Y1E1(GNLSY>&ckfyGpq-FiUjl+0{dV{bS{1uK5qH@^*+89hi`yFQhN# zV2~avSQb4YTrkA7mApIBgAgk_-ca84m0kO*eO1kf+uIeijbjI22^82-T7oZNg4KTpewPg+!!+|n%@bvXFX&h%r~M@mfzEu4XI=os zifFFE&mm}rJNGAjKbvldbmG@(9vi`3J$O=vuO)h1(Oz6pa;{-1gp$fOy!Lo@iqta0 zL3rLaOS>>~PCSm05=K?06(YAiOkB!xa>={DR>uH^dpIDhxZ&u9-GBs6IM*tf2Q@+UNS$QZSS0UOs z8th(=NY+{q{RO9uUTk5a6)aePzzUFd{gyFla!iFyVk{tJbD5-Ak7dRf*%f8l%5vUIK2tK5H$0A2A;1T0Ep810?I+Xqb*0aHaAte-Z| zT9f5DEI7V0EjZ!kt$hhY3t-hZ)OsXd`#sYqOA)6tu^|i6XLav!8@L#e33yPHTUIy< z*AN{I;l9L1&{%cTL`)^fT5)gLq?;+J~7+* z^k0>0Ad+<*;>^b_Lw+lWyc1mLGk&-1GJuD0CU7@E*^C{IqXY|U()1PweyvXF#N9M^ z^~s#dx$KIkZN59 z_{mm&VPk_=PI~RT=_wYc?D0&Af=D~&vz4G6+p^TV8VV`OABAA4gU;_88@a+{E!mLR zj}M}D($iz?x+T)<&v?VPP}X!Bq@+NDLJ)C~n`W;ggKw4s@%+HScc>Q$`mG2iwxJJR zQX2;<*E&qHf1c>5)X1Eu(?Ug0Qaoh+h`@MUGqtN_fcMSX_ZU)4Xc4`YEtF(@tsnU* z2`N!A$7!%mJnm;0u~zIGOJ!DS1daWU?{!0r3gen-E_2LtSR%J}aL*3Z2XA2nJTZtj z;v$83n~EqJST&ST4bJ=w0uX^u9hl;H!~Oc}nQUYX6UMEM-J^nV^Y=Bg0lpFMv7tH) zln^pCCfq;(Kai6mS$*XmLJY1QkN{bW>B*ICVe_2u8D0xy^if>QBGt^w)5wsxalIph zFA+%(9PDnx{a)?EF&SQZqT&x7P%=Dru^zVisxO`1Yr;oVGmZ)BLTF(SdLR9qm%0S=*bu zq7=y^E{}z`-!6=dI?>T`hPN(@x}?gz)v{h3MRsdtM>huIRKL+VdqkJ}7{wilc|=9N zlX(K~X%VB!LA)|4=4$TOX1|h$mxRKBYWf}{n2{IZYKr&@NvPlTJvOIg zB0BzKL(V&BK`k2ic#j^kn1mjIL=^bk9}6^;^U);3(4b73rbp%#9Ww&3MX&zg#Bti`)i3mEy8N}f{%4l=6>6y5Q1>sN zIFWY@IrHvDEN!_tSx-rB8!?juGy_vSu;~y11aP$f%To9GPmLEMM43=wYSeo{n0qP# zkzND`nUXbn!2-Dl8pH`AQ;T*m)D(WRWhDKos#p`m(!HP-MUo8ueRHGWX_wFD%d50{ z&2+}6c+Jyz5@o=?aHARCB%;fPNv$F;SUH}!twx==%nQ#*V6U#fK4R#xV}9dRJ70Eu zLrQ%}>i2Ynu~hL$Kl}H|ucZidZ-N*EP?5J@SQSA?Y*7-ei>-=}e0wCGhQWlCo^d0# z{~bDAB>-g%RG^^KD*qM^Lo&_Gqf7dht%hyMCT(U){`Lo}w5VnyYsHfD&A<~pcpM$c zgJ9Cd6VK)QH=kR?vl(vkbmt(#@sz1`nCdHjsXjeFZKT?3&y&kJrRl{#J8Ol(i})jY z1V?R1pu29#(>Fn_W8c8%WfC5KQzvdRdO8B=MG5jIp$bI-Hrg)zpe35#R|3iYwg&%V zN!Fqu0du`{J@Ze0t`o>@2IwsJO%}?QW7T4hoUrqWqqaLiOOm?p_9X;KrKW1?#YF=0 z79yhsYA^IfR0#-{6`JoFlYMG`-;p5K3w^$LXjo)m%ky^DaWh;^R+ruJkau5j;```b zfWEq}{d*xb@A>Qr+|ACSXH!@7ReE0X+|1K#)ubqq8CZR1ZSI6_r$XEf`g0W=ubhG4 z*L;Q?+Y}sj$P`m>qu>H$kIX0Z&K25h!_wKugd>DLyMEw2@plrv9h5 z`BR_wo-+lLv$xM9RzM7RM$a??P_RKwS)Z5QDFjSQqOQ*vfz8=(K`sqO1VC!HhO{DC zX#Z+Pa-+K2rea3{S|E@jVSb-A7X21IxIwyq|JoA>>)td3RV;YKpqj{28>2wm55^BR zZ-ya`{alA#g){;}Df}i4p6V!L+q+)!1^!io_f`_BaSImmBeC5L`zj5$b0W64O`>!2 zd3V_lMt1C&#jh;oK9V-cEvTHB`zBeDU;z33NQ$XWW##!VxEMx^-G=rwCCR(7`abTS z^3`OOa{BRayef1j`fPG3J>AM+9ppbjox`$?%}5V|Xtq)vLMzik@)T?5AoXjumeSt` zL?KheP({m}oyN?P@F|aaTq!w~5H#JgA$07mom z+|hBEJwmOLN)T67Vlb4IRbc~5#l%04{$!C;;P3zA&O}dwOwh8g>uOE4`jbSeU?Be3 zFkkDwXd}a@N27l+YdU&=nW$*w1JjcsP0zxvL_>b!8wcybx>@|WCta9&1+%83VmuA& z9z&;&616LdwXo5Z6kLDba)`8Qh8nn?h6UyZHoJyQ6MPAWolY5`ld)Q2KAXCfLbvp4 zZ?UPqRI42tkHlNqXKlDS&u|@(9RvVgb%9rwhmy(1SxK4##UdYX&T={c2b_peLh4_aA@F2J4)JF{cb>GH9D2Bo_n(G$ra3B>D+4_7^CT*=Xz z$)>sVltqp(TkbtI3l${E)=!wn>iNADYH`r~f0LA~9MB}zoIy64kk*@|5LqUYRA`=d zUYeUNYC_Qy6l3`6BaRIHlE#su`p?C6?DNvruGd+dyddoUIDelW^`>#?X6EjO>nmuf zMnH)oHKCKkYq{lPQ7{8TS@s_FE|mhF%UKlDCWTV9bGMfFAwZHaJlV8nXGRa(BWS0>|c2~ku3zq#1q39et8x_ox4n>+1uQH1I{@Fs;inq|tNEja2U z$LhY)=duF<@_}i}Fi0G~KK|l4R%C6#Z_DQL>|*!hCxtODg&8bDrm`LgoxQ2|xUUj@ z*`i_Kj;Q&hmMU%@Q6&{+akqZnB{CyUns&BL9+nxiE6Wh)V^>&2sN!{?sYpjo)h}|$eZ}JEBJEPq>(VpL-wqv) z-4HPf)czv)NEvT;zraU!FA$J7{&XV!`N8*Mp~ApJOPi3RrE`Bt`r9o7y-0RUp`ds4 z`~%#Vr%;qvo=(4*Ka>0L_7|_f=OKH>&@;`|Yxcb;x@QPNZ&4qz{jjsy=(+hJ>LbnJ z!JkjIW?#8kwnO#?TZ`=pk}xQq8a+mc|MA^EFXf4>e!^J!=jad;aYut2Os&M#2ybC6 zd{IK(HAiF#J@ghWq@&~YcDgnW?_6ojc+Um?iI6+FvJ;1>R9yoKQhJa9ZygzleBr$x;$UvUQkA$ZWt?I-=f;+ zst(misubX8vm8*?rXRXt;LCRg=l;tV^*q;-&_|&3nr}E2JJ>cxvG)YKO~Q6N#Pr!6 zosm4A4b7itQw*B`Ku^OHvL@{sC!S9}$y@KRiI&{*3JA1g>SLhY!`o+hOaJIcLZVH< z)m+~MZGK+8%dd;J%SG9ON&8Rr+AzO@Ez@gU4aF$QWrjyQw4VF{Y*^ES)(BZ)o|8N> zts+?+G}{?VNF))w7B!P3sTMjU0#fRUaHhXB7%4o%b0JtP z?IvDhr7{V4lu**J)Up&O6Z+7v+*w-OYk`5x>%alK`V0eKK1)8_M;S6dY&$PViqtQw zkbRp!DORKK%$ibnf=L{89i+a^`59fhxf+E5mI!6>Nx+hnwhn5Kiji8lK}TPO<*UM+ z10xrzyU;EI@!bcf7P*Ns8nvMfypYqYx+Dst5lhIAR;n4c^uqc6yXe{7YU!^v!>jvM zM3?A!twwyTzXzL8zGf{%`@;i$K(YrAZ z9NKmAF5&Y4I!uuK`w|=Y<==|fAYh_J){=s&>doGV$GfWK=gpjlE{x5GjqjGFyC`oJ zN!+f4Jk7Wn7;mePs+X|=_`#q95x#3q-*Qnes9%{sN~u4F5_vKrLYb|Sf!a9NTR6t+ zkM|mBKe3SMGC|mY+b*`hnw%y4Am-NVZ7b*B&Q$`t!|)h9PqeS0m;`6;k5(7}C}-O) z;0=}tiSFTkOtq>8H64ooQEb1PxqTJqJn*oQXG%t|t^fV=g8?+})euz6M_x*VcTmI8 zh@5dz`Kt)e`I~*8b%VJ|l{jI4|5svz%>4H;YGa*@5c=e<;TYoZL`C>Q7Fk}ks?+s` zHXRzAVZppR$V#s1^%yZ2ONFFZUO#pk_Sh)yEBl#Zypa?+nZ1k0MaYQw@vaEy;{{Ec z0Jy1X;TT9&7M`+wazSu==Z5*~_i=d$+!aCT5TfI8paSTW_qo~)8?@LX-{-?X3)8=V z77w<%5cwQWb#^_NTuo+BGvsL}fHt*-@U^T&2nCX@Uc|saXfk2UqV5*|*G->C6T<07 z5s$=(^qU=_obnO_I@PC00G@2(DElFNPa2D&yG+9{K^Ko=I*nq}B5$vifs?Vn@xPd$t}*SsA(%aWk%_+2WH-+?eb*tOCJ+h z>DhWN_L$S1*U^|?O19462(guPgTSGv*KR4BJQhHcX2=BS@;})uaBkOLItBEt%W2iI z>?ObTbmry-F?U~%u|tVx{VFCutWuIy(LjJ!0L6Xm^vbzmj|8faDM@1y9nOR!im0LQZSgL8h z-VXWtTW19P&8i^q^Q8b=pSyOiG4cFtWFM6PNrEBY-<7=qNgYWQ%{N>t+CKQtT>_5b zBzXYvgP-a^{4@xq0YP$Ybym_ssmwq+pHiIYEoBRns~5b(hzh}k#%>kIxjj1DnXdZ5 zV5#(FbZkE&GB{x-IQr66MF$^ylgq_;jBJV1Ass43pKduX?dogU{^5PV;^Bg;!#jQu zi3Egxg29skC~`*@qv&)NOY0!Y=rg^W7P@jENfIDM(Uvy8fS&X0ZvdU%-MXQV07y4N zh7`@MI-2-FZ&X)*XA?{Xvb7D`(YMM&4S$EJF&Yh8+H8d|tyL+m>H}Vg`t~Aw59fd8 zb4zs0E)Hg|d5NDm7W^opchxM=Du5IQ6lbiL)Nks*-e>%B<13S2^+=r5)aAvq=3>I8 zhkow&Non8k+ie`_@#xaghwRE~?gSltjIwEQ02%=o^^@>TB%zD=W&rCtj?{+W2+a3t zYaFhAqR9mCp861@YuRi`%T-ZJ5@J|@Elh|ewC3r1t?P*q3+7eIx1tH#7YA1SRzUc3;67|`I$gWDp#MDbt4Fn((Hp&p!Lwz2cVGR^>e*Z{FTZG zhuDszSn1GvRK(+8LXy&uFUR6CZhxQBWN#MChNZ8dUVZ4=HNngybiylg>3X^K&Gko! zT#R|kSI9cTV6|L8I`CE}-TFpyE+E4K1?@#dub^}1DSk2HJpa9*#J&6ni#cb-pDx3W z%@E{yx~%E$>Ab5QkmLtEH>4xQajX2y{y=cbI2U;IKGifDzETSU- zdqc!7gkFFNgk-Wn6;fe`S2JW;iU9}6;P>Gd!c=aduL&lMYK^!{(?6FA^_AD+pf;d| zphaiX7ynf@=oULt`tR-7j|Kt)SZys5NTrQ-ck1S1SYW@ljEd|pnWLA#AR&+>7s7-cs^ z6W>`!?Pj<|GkjmUfR~@+`s4#EYhwWC)~7~wo%Z#e|Hs{1|3&qMUBi2ZZjkOqrAxX? z5TsKil@O5b90ci5LXZxTkd&5|ZV@D;Q$o6Pp5ynvKhN|24exKnoH;wMy{}knL9Tf` zC9}Jw^NT)M3zT0soo2}9 z$G_1Ysk)jckaw7pj2eHVvHrOsl_W?|KTCc-L@Ab4?1TpnFw?cOs7$N6mFOiaml+dI z1r@WgcqQE<#nUmKp~t;Nre~MKz)Hp&-aP1*5QGo_K?Lr9maZJEK_~(_>Nrd z(8P!Ql%p-2UoVKX2shvh%2yfa{JvOY+&)-bEr$DP)I_fvOwqFCBAKB#W*D09@QnFr zwQ$i0v0%6}Nm8Q(?;R9Gb5YJ4QbMX&6$z+yxN!^hr6si&Epx1BxM0&52G(4=e~bxe zACxvV8uuqqKv7jMJm9Tc&Sjwv4OLaAgmqJ^(69UFScd}86=Bw%dUd`eYthEB`4o*>gwEfReN}{g!z3q&@kcSaQmH?nDWPQO!0@cp&;G5F) zj(h4XZ;;IO#%CG_aW>+529B2POQ(6Z1+iPiLRvQNJ&)3~U(`Z3;B$xw!apxf(#Q5`!BVBRLL!v`>uOL&XtP`K!^&1Xo*xZbE zf<$jVI*+=Z*>ifGxCy@Ob{;vYyk6uO{7neS$A&|h#i^Z>zL5`)NZ-0(cPlc_b? z&HgbciFjTcv})lY_SQVfV%0M64$OWQkEJXsUJvjbk7$y%|HOPhy{bWkfP)-q6MYs^ zFr7vueJOS4zP46vrL3ADbM!)Xsn|6+Sz39HmX!JEYft+|TSoy^{6%8)SlDvWO(=>s zF#omq-A1kL*^`xrxbIt9{JQkBUyN&sl)}rtr9cZeFZh69j!<%bi498*v|H#AS5W#> zLy252!0V=+@X+!{{aa`)B`9~y$>2tOA_@eyBI8}lytMSCQ98*UB!%27nZhZ^=bGVTpmB-^T^D*;46f87-pdasg^tH?rQ7Zt5MPQoZ; z)su9GelX3w`T1VL1pR}U2c->K$@u9dK&0}J!~DHdny0VJUf#tIY4IQ{kT==L#mYwO zO`n6HfU`el@)jX|l{Y05{Q8bcO|K%dp>AeHl{fx&@4WZmnn?4ND> zmMMXfE*h|PU_cORIMwewL`#CO>I*6#K6w}Z=vrN*<Y+<9%w?dB&V(u5R zOi?$i-uTD}Wga#ZZToV)86z4E*j|I-DT|ZCqyx$tltVAok_8f-8DDaUH3HD56V~UP2 z@Z8M)D+xf1)iTv)ZBrf1;#8R=h;yA-8SF zd9!%qo@wgQ`qlHe;vC|vdWQmTm}GAIWzF`Hs%_K_uZ)F!-d| z3FbqGn^Ke?h2)>TREP?sMC?-TJS%T|?}sv7T%H2N(?Im0Np(9D?^>u9dpiGFNOdHX z_W+EOo?S$hVMSJ0`s0F>0qBXLcM{|>Gly9O+lUF$crnN z%`}Fs49;hSiWX@6XA#*65Y?^$&o-6l(%@e{J!~enBZoqMHd8dTUC?+Xo1PM)Sz@)L zgBwV_wNl?C$o0q6HIm7h-{wb6W_4SaudVO0Nm9j)SVE=q5>{yJFX*;&*8&hUq2sTG zV#Chv>3pQ;+uy8Tr1bgt`LU=lREoT*bGFoUc=H56SEYDp_M0G(u?jJyc!%Ol4{~e+rl3<+_Fj9-*9SpZMMgo%jSM$8 zti^s#>lu?J$?Yt~o5LH1E^ihd7xr)nJY-J~A^lsQF{6lAOx1gf5?>RrlmQJ!i_v%GExWfHD>G^{z7#%5e4HDKiu9Z*Kc(gO2Y+6lye{HFOD?NONpify&~;PSdM_4KqBzuyrx? zToo|*7=3IC6;|Ohp^oXp;QD0#7{b!a)DYf1CxObBgj*q!YX_sZ44{vig%Q^7B(eM; zT<$D2uw_QgU+WgFN$&^f5`A@dcpUxYBV^CTn19n{uau!KIl;k86=N;5 zohgA({Pkni^2U!iXMrf-Yuy`|LqLen<&FHir_C{V{*SEOM7m;$z~{GyEl>37LD6vz zy=zStzLxt#l&{GiOE@K%R6k(M#T2&FcMJ~B5<-{BxqEHs2SPxm8~rQ0Zq=p^@&p~2 zx5x44dhJZX0MF5~K8F$6TwgcO)nmsftJd!`lg1y-QC(KhRT+|7>O!)L87F*%U$MSD}Rh@dV&2sMg*? zv_V8SnUl|+%wSc~T1%!9&i9&0-R+rE{tSwL@6B{hI`w>*)ek~d`b=?f?Zsasxt}*W zMT3`ca7G2>%hB6qN?{BYnGBDf{ADBh@(k~F_oJIEo15RuvQ7K1c?>fthL&k_gwC`~ z%m?1030z*xX%=s{8g$FZPWk=O1UWMARz19%z`j3TdN{8xE~!@ z?PWmF`}#`oL|2JR!8JmBkL$Upue7kAg$dSaCqzK?6lv%oDp!{BE8lw%_-34R6iM(D z=v&eP!sZ6A8D?gr6kJ`s&|4fhleKb^%hOo@&Naks|8y)Z;_g*BP#OynoBoA+p??ZemU&{DaHvRs-U)%#fi2Lz9Y>x!5i zGlnw{xNy!j5(cIThdEk_9KBg3=HaRjRM!Io94Mcd!P32q^+vY z^M|wdW*hJDx0I@ONd_N9>R~>*e6S(s3DI@;(LkgUST=k%tiLCjzCWA8`e%Ggi`(B+ z&$)v3SDz?;UaN#fDFyV`)E>ak%^-bBh;EDijX<_5$#aUx=HONGs_d3^0*JcOj=cSz zSSYk11QMnR!h$CDjBcSA@<{J;e!AHqa?tdH%%rv$%Swh+>i0xAq|*)AVMG9S%gX)e zB5}5T4~U-vAO_xq&AoOa_^i5fNPNSdjJ6033-5(?jl3?7SQ+&u|F z)?8q6sz#C#f4NBpe7SCWE|75-@y?D_fA8Ml-Q`@;m0O{n0k@1kQ_G2*e6|jG5bU|1L<(Q7;mj3QeOEsR}ZLv-Z)6eT1*Y(1(jE3rPO6+rN@#05f*pc z;JW!pZLK3ht_^K#jrz(DS|`0<30S3@Dx5z-Cy59VqDX9l<~5xiXZaoQ2}RA?R+N&ptGMRYrzYQ3Ur@QepjAa z^DCnHIrmR9F_%V&w4j4I0C>H4pv*KQ4<0*O#XhX#`}!=Yb0?;JvM>F*`GViV;IMtwQis?lzvkdP*NU@1ozQ(FFA69f3) z1Y?Pg(L{{#6w79gXuyC3Y7WMta~>ay{HT3%9kJY}o0mRyjd##(bKjzedq+NSRxE{Nz9|Lvhs z)?7-K!lzDLx9XQntVqSYeld{GT3W|3oQAfrbXZHQm)VnwC5p={;Cplp!3MF++>NA0 zglva(bp9upa@;eGM_~gIU1NZuV&DActuTAQ7Y3y*+)VMtgPh-e%J`o7;yYaLfX6Uz zKG{pQ?WQE(BvxGG`VqFIqG{+9AS*j)eC9d-$PjZ+Q{USU;(-6o9Wt2~EFD*y{YqC= zXgW}+CRwO%>yLH|8jb+(kmui`AWCu%v7I~l^{f@!x1_HP7zT>z>)}9kbVY2pWQE2&~}BhfbaIaI;=`-p^qO1giq&O!Z>ojY}EV-Bb*zyC<~<$8O-=VdIzBc72T)o zVBkZh41QDakqarHAb8k|!_{FAjv3H4r`6pxLTLC@(wi^dVH)qo3ECf0CuO5}5Cd~X zi#NQXYY-_$XUv;~JX}l_5+cgM|1vGfN;Umv9OD3Ch6N6`(U5QmG4Qb)rCQDhr6Xvj z64k4>$<^!x6HEd90pKxf7hxB-y6J*C=NLs+w|DJ*)3$kYwCW~2*2vD zv@cpB4A}p<&1+_$SZU6J5!Ppi>hzWj-}X}M{L4WMV*Pp5kf-rpn9cHG`Ugu|6!Oj@ z+1m|KEzfDZS%#XA-)2;O>|J(fTbdzBi$qYuw)pqBhPxe@US$T@rXL1vBdsnyF7^fP zqI~Y!?q2xx=Nx}1sAosM5az>JlXDI9wUg|af7zPe71IAm8W+41^eUqQ6c6r?=2Az@ zSv-LQRNieVt_KTDNSj}*}XS@iqHM&p<<1*j#Qmn7Jv{w^rbJm-#7Z>UioU`{R-5;dyF>s zXSi^<&cuesnW2*CN1Ud=4ⅅ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 H(To2D2ioGK diff --git a/fonts/lucida_sans_60.png b/fonts/lucida_sans_60.png index d67af5feba8481d159743fa9e90d9d124503cb94..0efcd9e32f8bf3ba356e6906531cf41b0098dbc2 100755 GIT binary patch literal 13992 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 literal 15405 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 a003}nP?3WXfRZ}^0000KKFo literal 10040 zcmaiaWl$VIu;wDcEjR>caa-JB@m*X4!3pl}8X#zpEDpgEoL~v=uEE`dE>3XE!sWet zb#+&DuilTDufLh;ny#;Es%yGBR#ROG7mE@L007`ZA@bS)0P;T*8G!U}2CShR>i+{& zTNyPO0H7`j`>(~Te;mnETS*pBJwbK&kI-2{wABEB0A>InED`{C{I?W#004M{0DvQN z06;7g03dVw(yAr#Zv)c}^3L-gLjH3ojyOvFGmyQs)pY;>pOkTt|6uP`l;iv2Ry z001*1R9;4xoZ_?xADnhm_~+vM+&9nD51fk5AW1rkvi)@--?Aa9_z&2iewBG)!C_vk zv9aBVgVV?cRhj_Tgk#M)r%F1nb-ijOf6auWl8Z()rIq_&GCS>1&JdPGMZ5=qe}PM) zPt_NDdT-vX2bxLIJ}ZG9&`}@APa{t=)*h~X8SsXR%^oB2Ha6QAQ1u=?O7FH(@(>T# zjU0Q?dgrz7%5BD~qcxoy3oeo4ko!z?+&^*a7b#4#Cqr*RKuj0 zk+tcsPIV@NtI|lplMgOlk0O>sUWDRtu0Z|=lsR3?9SO6oj9H4u5SOJd{AL&hU6QO@ z`Vpyop%xsnkRG&i$70%b_IWYGMi@%tjJIy4I+Kym!iBg%^3GERI4J4VRUJ@`##!0fiax_v%o29`A(YxxK#ZM>TH8Em=zP_0ELS1y%1e) z4OVfAIn$qe*I(U zd!w?Kv_s`dTrxAnQ49O0z)+Ey!>9l*U!?4m_YqHf8-$At$mg4IHW!wWNDtIFdQ#dt z2>biY=~NXM8&WKTOgM_s>l4em{91^Eb*76?@^8%Iie17v94*c-lcN@O~@ayBOPRor}Z?12M9;1i><3&%j!&*$bu*7yHQ z>4$DWj;&Wptjc72_0`tp?_;?8Vt~treI(?l;?!`;KimD2D-ULs?eo~zdZ%6s#VCvj9XoM=xu6+a*e~yC^1Uzy@xdPwE-%wjFY^2nRaD+PbQQ zMVfC{I5a6LL(4@`YdJd`EP$S}03uNRJF$pQIIuN0_n9Nlu=^ILmTz`r)JEyjw01KK z#VhiPr$PKV5OmIt5Zq&ac7xtFUlQuQ+|dl#`yS3kRxD^-t=-j;wPE-GaSV(W|%B+ zYdyBQO8aZAPwrvaXgpaEm;}0oOV#aqf~M_IadgxEXv_SGr(#Y$OaFNb)^tWOE3H|M zqE&0YVDb>?;=(X;zzmhwPf5NqXPX*Qs%J>*7)9u%%fG;K^P zs$Z#Q5!2YoJTN8f^or_mUM%sPZCroZHG0_!-Zis9Qq~tso&>SIf$&j$b!QDn#pG3x zm8K=y(@}wg52@m!LzT!EcVY1)X`D49(Ba~UwnO?f)OYO-!9g!LVH-3BFdyVtK)FHPw{=CK(ox>w4Wn|CK#Gj}Yjv$zAZ=`vGnzuOS1Wd7Rhd+w za{&J7N{Kibv8!Wc)y9JHx{V2S(*r-5}n-mRU|X$*HsFSyGSPhT{J<4CW;yxHT)0Pv&IE0o)QBI zW-l=*0oWh}b2%A}20Pn$1{@~Kig6)~im9-qjU=Oq#B)&aq23cC;A|MJJd%m*t0iwy zOp+fImaa=jY#J`68y-1LS0#Xj#MF(V%{y$BkH)nL($&%%>Q$hysI$(t^`35ZVu3fi zjchmHKD3vYCz!Fdbr1jIoOF=bd&q{acP4gjFi&r*t`i=vzBS&f9kfOJTVYI|ofZqa zEVe&HP6-$XjgCtc9>2{J;KQ|dNN3``o}tL5zZ!4$O@5PcL=+Fdty;G6 zdkfV&7#O)IW3LhWoYu;oVZ)rTGS_y-nQ3Q2&$zRKz|d>2>`UzbsOD`zNZ{Rw--UrS z?;dE=k+�JON`Ihh&m~n!iuzN_>6nQ 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 diff --git a/fonts/lucida_sans_90.png b/fonts/lucida_sans_90.png index c13e5d0bd25c02af5eff822d739b9492d92768a5..822a465f25b33d54f4a05a192b7ce9eb265135a7 100755 GIT binary patch literal 10704 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Ð1*}F#WPR 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ð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 O0OX}rr0OJ0gZ~!?AEZYB diff --git a/fonts/mono_dejavu_sans_110.png b/fonts/mono_dejavu_sans_110.png index 4536b514cfc45ead34f7e5ccb3db0979e9984db8..c90c0e2422962b2f2fd0ec4f510b42ef9684a4a8 100755 GIT binary patch literal 67613 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 literal 74668 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

48I%JKOOoWzF6_Z+a`jDu&!!KtXz(| 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�o2I#=YZ8Tm(Fq9QPq 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